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
AbstractLayerin 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:
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");
References to
optika.materials.layer_absorbance