-
Notifications
You must be signed in to change notification settings - Fork 5
LayerTMMO structure
The LayerTMMO
structure is a Material
subtype exported to ensure the proper parameters are included for the calculations. This means the information of each layer of interest is set here. Then you can combine them to arrange the final structure. This subtype is thought for isotropic media (index of refraction).
The structure is used to construct information of the modelled system for simulations, with TMMOptics.jl and for the fitting procedure FitTMMOptics.jl.
For using this subtype, we invoke it as follow
LayerTMMO(n; type=:GT, d=0.0, nλ0=n(λ0))
The argument n
is the complex index of refraction of the layer. Usually, the index of refraction depends on the wavelength, for which it can be defined as
n = RIdb.air(beam.λ)
n = RI.bruggeman(0.89, [RIdb.air(beam.λ), RIdb.silicon(beam.λ)])
using the built-in database and models of indices of refraction and exported by ThinFilmsTools.jl, see RefractiveIndicesDB.jl and RefractiveIndicesModels.jl. You can use your own index of refraction as long as it is constructed in the same way, a 1D complex floating array.
It is used to define how to treat the input thickness parameter d
. type
takes one of the following values for each layer:
type = :GT
, which indicates an input layer with its complex index of refraction n
and geometrical thickness d
in nanometers. Here, d
has to be defined as the actual (physical) thickness of the layer. This is the default value of the type
parameter.
type = :OT
, which is used to construct a layer with refractive n
and the fraction of optical thickness. This is useful for multilayer stacks (Distributed Bragg Reflector) normally specified in terms of quarter/half-wave layers.
Both types can be mixed into a sequence of layers, for instance:
layers = [ LayerTMMO(RIdb.air(beam.λ)),
LayerTMMO(RI.looyenga([0.89 1.0-0.89], [RIdb.air(beam.λ), RIdb.silicon(beam.λ)]); d=77.0),
LayerTMMO(RIdb.dummy(beam.λ, 1.45, 0.0); type=:OT, d=1.0/4.0),
LayerTMMO(RIdb.dummy(beam.λ, 3.45, 0.0); type=:OT, d=1.0/2.0) ]
The structure of layers to simulate is set by letting the input layers
to collect the information defined before. For instance, to define a thin film single layer with a incident (air) and substrate (silicon) media, we can write:
layers = [ LayerTMMO(RIdb.air(beam.λ)),
LayerTMMO(RIdb.sno2f(beam.λ); d=250.0),
LayerTMMO(RIdb.silicon(beam.λ)) ]
The thickness of the layer is defined here. Depending on the type
chosen, this value is taken as the fraction of optical thickness (type=:OT
) or as the geometrical (physical) thickness in nanometers (type=:GT
). For instance:
d = 250.0 # nm, type=:GT
d = 1.0/4.0 # type=:OT
For all cases, the thicknesses of the first and last layers are not taken into account as the calculations are performed for semi-infinite incident/substrate media, so we just put a zero regardless of the subtype.
Be careful not to set d = 1.0/4.0
with type=:GT
(default), because you will get undesired results.
The parameter nλ0
is used to calculate the thickness of the layer when is set to type=:OT
, and also to plot the profile of indices of refraction.
This parameter is a complex floating number, containing the index of refraction of the reference wavelength. For instance:
nλ0 = RIdb.dummy(beam.λ0, 3.45, 0.0))
nλ0 = RIdb.air(beam.λ0)
By default, if you do not specify this number, it will be set to the index of refraction of the layer at λ0
.