Quick Start
If you just want to get started with a transfer matrix calculation and plot the transmittance or reflectance spectrum, this is the place to start. First make sure to install TransferMatrix.jl by typing ]
from the Julia REPL to enter Pkg mode, then run
pkg> add https://github.com/garrekstemo/TransferMatrix.jl.git
Quarter-wave mirror
Let's make a simple quarter-wave mirror, or distributed bragg reflector (DBR). We will do this via alternating layers of titanium dioxide (n = 2.13) and silica (n = 1.46) optimized for a wavelength of 630 nm. We'll make three periods of these two layers and and layer of air. This 4x4 transfer matrix method simultaneously calculates the transmittance and reflectance for s-polarized and p-polarized radiation. (We are using the powerful plotting library Makie.jl to produce the figures.)
using TransferMatrix
using CairoMakie
λs = collect(range(0.4, 1.0, length = 1000)) .* 1e-6
n_tio2 = fill(2.13, length(λs))
n_sio2 = fill(1.46, length(λs))
air = Layer("Air", 0.5e-6, λs, fill(1.0, length(λs)), zeros(length(λs)))
tio2 = Layer("TiO2", 0.074e-6, λs, n_tio2, zeros(length(λs)))
sio2 = Layer("SiO2", 0.108e-6, λs, n_sio2, zeros(length(λs)))
layers = [air, tio2, sio2, tio2, sio2, tio2, sio2]
s = Structure(layers, λs, [0.0])
Tp, Ts, Rp, Rs = calculate_tr(s)
fig, ax, l = lines(λs .* 1e9, Rp, label = "3 periods")
ax.xlabel = "Wavelength (nm)"
ax.ylabel = "Reflectance"
fig
Now let's try a few more periods and plot them all together to see how the reflectance changes with increasing number of layers. Notice that we are adding new layers directly to the structure and not creating a new structure.
nperiods = 6
for i in 1:nperiods
push!(s.layers, tio2)
push!(s.layers, sio2)
if i%3 == 0
Tp, Ts, Rp, Rs = calculate_tr(s)
lines!(ax, λs .* 1e9, Rp, label = "$(i + 3) periods")
end
end
axislegend(ax)
fig
You can see that it's quite simple to make a structure and modify the layers. Note that while an individual Layer
is immutable, you can modify the properties of a Structure
.