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).

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 the guest in the host 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 isotropic spherical inclusions.

Returns one of the two analytical solutions to this quadratic equation:

\[2 \varepsilon_\text{eff}^2 + [(3f - 2) \varepsilon_a + (1 - 3f)\varepsilon_b] \varepsilon_\text{eff} - \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

  • Ph.J. Rouseel; J. Vanhellemont; H.E. Maes. (1993) Thin Solid Films, 234, 423-427

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.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 the guest in the host 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 the guest in the host 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