Materials & EMA¶
The Materials submodule provides the classes to build complex materials from dispersion models.
The simplest provided material is the
IsotropicMaterial.
It takes only one Dispersion which is used for all three axis of the material.
It can also be created by calling dispersion.get_mat().
For Crystals with two or three different dispersions, there are the
UniaxialMaterial and
UniaxialMaterial respectively.
The respective materials can be rotated to achieve different crystal orientations. A good visualization for these rotations can be found in Figure 6.10 of Fujiwara’s book ‘Spectroscopic Ellipsometry’ [1].
Additionally two materials can be combined via various :ref:’Effective medium approximations’, to create mixtures or account for interface roughness.
References
Abstract base classes¶
- class elli.materials.Material[source]¶
Base class for materials (abstract class).
- class elli.materials.MixtureMaterial(host_material, guest_material, fraction)[source]¶
Abstract Class for mixed materials.
Creates a material mixture from two materials.
- Parameters:
- get_tensor(lbda)[source]¶
Gets the permittivity tensor of the material for wavelength ‘lbda’.
- Parameters:
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
- Returns:
Permittivity tensor.
- Return type:
npt.NDArray
- abstract get_tensor_fraction(lbda, fraction)[source]¶
Gets the permittivity tensor of the material for wavelength ‘lbda’, while overwriting the set fraction. Used in VaryingMixtureLayers.
- Parameters:
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
fraction (float) – Fraction of the guest material used for evaluation. (Range 0 - 1).
- Returns:
Permittivity tensor.
- Return type:
npt.NDArray
- class elli.materials.SingleMaterial[source]¶
Base class for non-mixed materials (abstract class).
- get_tensor(lbda)[source]¶
Gets the permittivity tensor of the material for wavelength ‘lbda’.
- Parameters:
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
- Returns:
Permittivity tensor.
- Return type:
npt.NDArray
- set_rotation(r)[source]¶
Sets rotation of the Material.
- Parameters:
r (npt.NDArray) – rotation matrix (from
rotation_euleror others)
Isotropic and non-isotropic materials¶
- class elli.materials.IsotropicMaterial(dispersion)[source]¶
Isotropic material.
Creates isotropic material with a dispersion.
- Parameters:
dispersion (Dispersion) – Dispersion relation of all three crystal directions.
- set_dispersion(dispersion)[source]¶
Sets dispersion relation of the isotropic material.
- Parameters:
dispersion (Dispersion) – Dispersion relation of all three crystal directions.
- class elli.materials.UniaxialMaterial(dispersion_o, dispersion_e)[source]¶
Uniaxial material.
Creates a uniaxial material with two dispersions.
- Parameters:
dispersion_o (Dispersion) – Dispersion relation for ordinary crystal axes (x and y direction).
dispersion_e (Dispersion) – Dispersion relation for extraordinary crystal axis (z direction).
- set_dispersion(dispersion_o, dispersion_e)[source]¶
Sets dispersion relations of the uniaxial material.
- Parameters:
dispersion_o (Dispersion) – Dispersion relation for ordinary crystal axes (x and y direction).
dispersion_e (Dispersion) – Dispersion relation for extraordinary crystal axis (z direction).
- class elli.materials.BiaxialMaterial(dispersion_x, dispersion_y, dispersion_z)[source]¶
Biaxial material.
Creates a biaxial material with three dispersions.
- Parameters:
dispersion_x (Dispersion) – Dispersion relation for x crystal axes.
dispersion_y (Dispersion) – Dispersion relation for y crystal axes.
dispersion_z (Dispersion) – Dispersion relation for z crystal axes.
- set_dispersion(dispersion_x, dispersion_y, dispersion_z)[source]¶
Sets dispersion relations of the biaxial material.
- Parameters:
dispersion_x (Dispersion) – Dispersion relation for x crystal axes.
dispersion_y (Dispersion) – Dispersion relation for y crystal axes.
dispersion_z (Dispersion) – Dispersion relation for z crystal axes.
Effective medium approximations¶
- class elli.materials.VCAMaterial(host_material, guest_material, fraction)[source]¶
Mixture Material approximated with a simple virtual crystal like average.
\[\varepsilon_\text{eff} = (1 - f) \varepsilon_h + f \varepsilon_g\]where:
\(\varepsilon_\text{eff}\) is the effective permittivity of host/mixture material,
\(\varepsilon_h\) is the permittivity of the host mixture material,
\(\varepsilon_g\) is the permittivity of the guest mixture material and
\(f\) is the volume fraction of material a in the guest material.
Creates a material mixture from two materials.
- Parameters:
- get_tensor_fraction(lbda, fraction)[source]¶
Gets the permittivity tensor of the marterial for wavelength ‘lbda’, while overwriting the set fraction.
- Parameters:
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
fraction (float) – Fraction of the guest material used for evaluation. (Range 0 - 1).
- Returns:
Permittivity tensor.
- Return type:
npt.NDArray
- class elli.materials.BruggemanEMA(host_material, guest_material, fraction)[source]¶
Mixture Material approximated with the Bruggeman formula for spherical inclusions.
Returns one of the two analytical solutions to this quadratic equation:
\[2 \varepsilon_\text{eff}^2 + \varepsilon_\text{eff} [(3f - 2) \varepsilon_a + (1 - 3f)\varepsilon_b] - \varepsilon_a \cdot \varepsilon_b = 0\]where \(\varepsilon_\text{eff}\) is the effective permittivity of host/mixture material, \(\varepsilon_a\) is the permittivity of the first mixture material, \(\varepsilon_b\) is the permittivity of the second mixture material and \(f\) is the volume fraction of material a in the material b.
References
Josef Humlicek in Ellipsometry at the Nanoscale, Springer-Verlag Berlin Heidelberg, 2013
Creates a material mixture from two materials.
- Parameters:
- get_tensor_fraction(lbda, fraction)[source]¶
Gets the permittivity tensor of the material for wavelength ‘lbda’, while overwriting the set fraction.
- Parameters:
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
fraction (float) – Fraction of the guest material used for evaluation. (Range 0 - 1).
- Returns:
Permittivity tensor.
- Return type:
npt.NDArray
- static jansson_algorithm(e_h, e_g, root1, root2)[source]¶
Use the algorithm proposed by Jansson and Arwin to find the correct root of the solution to the Bruggeman formula.
References
Jansson R. , Arwin H. (1994) Optics Communications, 106, 4-6, 133-138, https://doi.org/10.1016/0030-4018(94)90309-3.
- Parameters:
e_h (npt.ArrayLike) – Dielectric tensor of host material.
e_g (npt.ArrayLike) – Dielectric tensor of host material.
root1 (npt.ArrayLike) – Solution 1 for dielectric tensor of mixture.
root2 (npt.ArrayLike) – Solution 2 for dielectric tensor of mixture.
- Returns:
Physically correct permittivity tensor for the mixture.
- Return type:
npt.NDArray
- class elli.materials.MaxwellGarnettEMA(host_material, guest_material, fraction)[source]¶
Mixture Material approximated with the Maxwell Garnett formula. It is valid for spherical inclusions with small volume fraction.
\[\varepsilon_\text{eff} = \varepsilon_h \frac{2f(\varepsilon_g - \varepsilon_h) + \varepsilon_g + 2\varepsilon_h} {2\varepsilon_h + \varepsilon_g - f(\varepsilon_g - \varepsilon_h)}\]where:
\(\varepsilon_\text{eff}\) is the effective permittivity of host/mixture material,
\(\varepsilon_h\) is the permittivity of the host mixture material,
\(\varepsilon_g\) is the permittivity of the guest mixture material and
\(f\) is the volume fraction of material a in the guest material.
Creates a material mixture from two materials.
- Parameters:
- get_tensor_fraction(lbda, fraction)[source]¶
Gets the permittivity tensor of the material for wavelength ‘lbda’, while overwriting the set fraction.
- Parameters:
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
fraction (float) – Fraction of the guest material used for evaluation. (Range 0 - 1).
- Returns:
Permittivity tensor.
- Return type:
npt.NDArray
- class elli.materials.LooyengaEMA(host_material, guest_material, fraction)[source]¶
Mixture Material approximated with Looyenga’s formula. Valid for materials with small contrast.
\[\varepsilon_\text{eff} = ((1 - f) \varepsilon_h^{1/3} + f \varepsilon_g^{1/3})^3\]where:
\(\varepsilon_\text{eff}\) is the effective permittivity of host/mixture material,
\(\varepsilon_h\) is the permittivity of the host mixture material,
\(\varepsilon_g\) is the permittivity of the guest mixture material and
\(f\) is the volume fraction of material a in the guest material.
References
Looyenga, H. (1965). Physica, 31(3), 401–406.
Creates a material mixture from two materials.
- Parameters:
- get_tensor_fraction(lbda, fraction)[source]¶
Gets the permittivity tensor of the material for wavelength ‘lbda’, while overwriting the set fraction.
- Parameters:
lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).
fraction (float) – Fraction of the guest material used for evaluation. (Range 0 - 1).
- Returns:
Permittivity tensor.
- Return type:
npt.NDArray