Structures
The virtual representation of a sample is finally build using the Structure class.
A Structure consists of one IsotropicMaterial used as semi-infinite
entry material and a second arbitrary Material as exit material.
A list of Layers can be added as desired in between these materials,
to create a 1D model of layered media.
The basic Layer consists of a material and an assigned thickness.
An arbitrary sequence of layers can be stacked and repeated by RepeatedLayers,
to create Bragg-mirror or multiple quantum well structures.
There are also classes to approximate layers with varying properties along the z-axis (inhomogeneous layers) by creating multiple thinner homogeneous slices:
TwistedLayeris able to represent rotating materials, like twisted nematic materials.VaryingMixtureLayertakes anMixtureMaterialand uses a gradient as mixture fraction.
Layers
Abstract base classes
- class elli.structure.AbstractLayer[source]
Abstract class for a layer.
- abstract get_permittivity_profile(lbda)[source]
Returns the permittivity profile of the layer for the given wavelengths.
- Parameters
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
- Returns
Returns list of tuples [(thickness, dielectric tensor), …]
- Return type
List[Tuple[float, npt.NDArray]]
- class elli.structure.InhomogeneousLayer[source]
Abstract base class for inhomogeneous layers with varying properties in z-direction.
- get_permittivity_profile(lbda)[source]
Returns the permittivity profile of the layer for the given wavelengths. The tensor is evaluated in the middle of each slice.
- Parameters
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
- Returns
Returns list of tuples [(d1, epsilon1), (d2, epsilon2), …]
- Return type
List[Tuple[float, npt.NDArray]]
- get_slices()[source]
Returns z slicing with the position relative to this layer, not to the whole structure.
- Returns
array of ‘z’ positions [z0, z1,… , zmax], with z0 = 0 and zmax = z{d+1}
- Return type
npt.NDArray
- set_divisions(div)[source]
Defines the number of slices to simulate the layer.
- Parameters
div (int) – Number of slices for the layer
Homogeneous layers
- class elli.structure.Layer(material, thickness)[source]
Homogeneous layer of dielectric material.
New layer of material ‘material’, with thickness ‘thickness’
- get_permittivity_profile(lbda)[source]
Returns the permittivity profile of the layer for the given wavelengths.
- Parameters
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
- Returns
Returns a list containing one tuple [(thickness, dielectric tensor)]
- Return type
List[Tuple[float, npt.NDArray]]
- class elli.structure.RepeatedLayers(layers, repetitions, before=0, after=0)[source]
Repeated structure of layers.
Create a repeated structure of layers.
Example : For layers [1,2,3] with n=2, before=1 and after=0, the structure will be 3123123.
- Parameters
layers (List[AbstractLayer]) – List of the repeated layers, starting from z=0
repetitions (int) – Number of repetitions
before (int, optional) – Number of additional layers before the first period. Defaults to 0.
after (int, optional) – Number of additional layers after the last period. Defaults to 0.
- get_permittivity_profile(lbda)[source]
Returns the permittivity profile of the layer for the given wavelengths.
- Parameters
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
- Returns
Returns list of tuples [(thickness, dielectric tensor), …]
- Return type
List[Tuple[float, npt.NDArray]]
- set_layers(layers)[source]
Set list of layers.
- Parameters
layers (List[AbstractLayer]) – List of the repeated layers, starting from z=0
Inhomogeneous layers
- class elli.structure.TwistedLayer(material, thickness, div, angle)[source]
Twisted layer. The material gets rotated around the z axis.
Creates a layer with a twisted material.
- Parameters
- get_tensor(z, lbda)[source]
Gets permittivity tensor matrix for position ‘z’ and wavelength ‘lbda’.
- Parameters
z (float) – Position in the layer (in nm)
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
- Returns
Permittivity tensor for position ‘z’ and wavelength ‘lbda’.
- Return type
npt.NDArray
- class elli.structure.VaryingMixtureLayer(material, thickness, div, fraction_modulation=<function VaryingMixtureLayer.<lambda>>)[source]
Mixture layer, with varying fraction dependent on z Position.
Note: The set fraction of the mixture material will be ignored and replaced by the result of the fraction modulation function.
- Parameters
material (MixtureMaterial) – MixtureMaterial object
d (float) – Thickness of layer (in nm)
div (int) – Number of slices for the layer
fraction_modulation (Callable[[float], float]) – Function to modify the fraction amount, takes float from 0 to 1 (top to bottom of layer), should return fraction at that level. Defaults to a linear profile (100% host material to 100% guest material).
- get_tensor(z, lbda)[source]
Gets permittivity tensor matrix for position ‘z’ and wavelength ‘lbda’.
- Parameters
z (float) – Position in the layer (in nm)
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
- Returns
Permittivity tensor for position ‘z’ and wavelength ‘lbda’.
- Return type
npt.NDArray
Structure Class
- class elli.structure.Structure(front, layers, back)[source]
Description of the whole structure.
Consists of:
front half-space (incident)
layer succession
back half-space (exit)
- Parameters
front (IsotropicMaterial) – IsotropicMaterial used as front half space
layers (List[Layer]) – List of Layers, starting from z=0
back (Material) – Material used as back half space
- evaluate(lbda, theta_i, solver=<class 'elli.solver4x4.Solver4x4'>, **solver_kwargs)[source]
Return the Evaluation of the structure for the given parameters with standard settings.
- Parameters
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
theta_i (float) – Incident angle of the experiment (in degrees).
solver (Solver, optional) – Choose which solver class is used. Defaults to Solver4x4.
solver_kwargs (optional) – Keyword arguments for the Solver can be appended as arguments.
- Returns
Result of the experiment.
- Return type
- get_permittivity_profile(lbda)[source]
Returns the permittivity profile of the complete structure for the given wavelengths.
- Parameters
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
- Returns
Returns list of tuples [(thickness, dielectric tensor), …]
- Return type
List[Tuple[float, npt.NDArray]]
- set_back_material(material)[source]
Defines the back half-space material.
- Parameters
material (Material) – Material used as back half space
- set_front_material(material)[source]
Defines the front half-space material. Has to be isotropic.
- Parameters
material (IsotropicMaterial) – IsotropicMaterial used as front half space