layer_absorbance#

optika.materials.layer_absorbance(index, wavelength, direction=1, n=1, layers=None, substrate=None)[source]#

Compute the fraction of energy absorbed for a particular layer in the multilayer stack.

Parameters:
  • index (int) – The index of a AbstractLayer in layers to find the absorbance of.

  • wavelength (Quantity | AbstractScalar) – The wavelength of the incident light in vacuum.

  • direction (float | AbstractScalar) – The component of the incident light’s propagation direction in the ambient medium antiparallel to the surface normal. Default is to assume normal incidence.

  • n (float | AbstractScalar) – The complex index of refraction of the ambient medium.

  • layers (None | Sequence[AbstractLayer] | AbstractLayer) – A sequence of layers representing the multilayer stack. If None, then this function computes the reflectivity and transmissivity of the ambient medium and the substrate.

  • substrate (None | Layer) – A layer representing the substrate supporting the multilayer stack. The thickness of this layer is ignored. If None, then the substrate is assumed to be a vacuum.

Return type:

PolarizationVectorArray

Examples

Compute the amount of energy absorbed in a layer of silicon coated by a thin layer of silicon dioxide and compare it to the energy absorbed by both layers

import numpy as np
import matplotlib.pyplot as plt
import astropy.units as u
import named_arrays as na
import optika

# Define a grid of wavelengths at which to evaluate the absorbance
wavelength = na.geomspace(10, 10000, axis="wavelength", num=1001) * u.AA

# Define a thin layer of silicon dioxide and a thick layer of silicon
layers = [
    optika.materials.Layer(
        chemical="SiO2",
        thickness=5 * u.nm,
    ),
    optika.materials.Layer(
        chemical="Si",
        thickness=16 * u.um,
    )
]

# Compute the fraction of energy absorbed by the silicon
absorbance = optika.materials.layer_absorbance(
    index=1,
    wavelength=wavelength,
    layers=layers,
)

# Compute the fraction of energy absorbed by both layers
reflected, transmitted = optika.materials.multilayer_efficiency(
    wavelength=wavelength,
    layers=layers,
)
absorbance_total = 1 - reflected - transmitted

# Plot the results
fig, ax = plt.subplots()
na.plt.plot(
    wavelength,
    absorbance.average,
    ax=ax,
    label="absorbance",
)
na.plt.plot(
    wavelength,
    absorbance_total.average,
    ax=ax,
    label="total absorbance",
)
ax.set_xscale("log")
ax.legend()
ax.set_xlabel(f"wavelength ({wavelength.unit:latex_inline})");
ax.set_ylabel("incident energy fraction");
../_images/optika.materials.layer_absorbance_0_1.png