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

1

H. Fujiwara, Spectroscopic Ellipsometry, Principles and Applications, Chichester, UK, John Wiley & Sons, Ltd (2007). https://doi.org/10.1002/9780470060193

Abstract base classes

class elli.materials.Material[source]

Base class for materials (abstract class).

get_refractive_index(lbda)[source]

Gets the refractive index tensor for wavelength ‘lbda’.

Parameters

lbda (npt.ArrayLike) – Single value or array of wavelengths (in nm).

Returns

Refractive index tensor.

Return type

npt.NDArray

abstract 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

class elli.materials.MixtureMaterial(host_material, guest_material, fraction)[source]

Abstract Class for mixed materials.

Creates a material mixture from two materials.

Parameters
  • host_material (Material) – Host Material.

  • guest_material (Material) – Material incorporated in the host.

  • fraction (float) – Fraction of the guest material (Range 0 - 1).

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

set_constituents(host_material, guest_material)[source]

Sets Materials in the mixture.

Parameters
  • host_material (Material) – Host Material.

  • guest_material (Material) – Material incorporated in the host.

set_fraction(fraction)[source]

Sets fraction and checks if fraction is in range from 0 to 1.

Parameters

fraction (float) – Fraction of the guest material (Range 0 - 1).

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

abstract set_dispersion()[source]

Sets dispersion relation of the material.

set_rotation(r)[source]

Sets rotation of the Material.

Parameters

r (npt.NDArray) – rotation matrix (from rotation_euler or 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
  • host_material (Material) – Host Material.

  • guest_material (Material) – Material incorporated in the host.

  • fraction (float) – Fraction of the guest material (Range 0 - 1).

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
  • host_material (Material) – Host Material.

  • guest_material (Material) – Material incorporated in the host.

  • fraction (float) – Fraction of the guest material (Range 0 - 1).

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

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
  • host_material (Material) – Host Material.

  • guest_material (Material) – Material incorporated in the host.

  • fraction (float) – Fraction of the guest material (Range 0 - 1).

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
  • host_material (Material) – Host Material.

  • guest_material (Material) – Material incorporated in the host.

  • fraction (float) – Fraction of the guest material (Range 0 - 1).

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