Layer stacks¶
kind: "layer_stack", model lightsmith.problems.LayerStackProblem. A planar multilayer between a
semi-infinite superstrate and a semi-infinite substrate. Computes reflection, transmission and absorption
against wavelength, angle and polarisation.
Fields¶
| Field | Meaning |
|---|---|
superstrate |
The incidence medium, a material |
layers |
Layer(thickness_nm, material, coherent=True), listed from the superstrate side to the substrate side. Set coherent=False for thick slabs, such as a 1 mm substrate. |
substrate |
The exit medium, a material |
wavelengths |
Vacuum wavelengths in nm |
angles_deg |
Angles of incidence in the superstrate (default [0]) |
polarizations |
Any of "s" and "p" (default both) |
options |
Per-method solver options |
Result¶
SpectrumResult:
r,tandaper polarisation, indexed[angle][wavelength];r_amplitudeandt_amplitudeas (real, imaginary) pairs, when every layer is coherent;provenanceandwarnings.
SpectrumResult.difference(other) gives the maximum and RMS differences between two spectra on the same
grids.
Solvers¶
auto order: TMM → RCWA → FDTD.
- TMM is exact and fast, handles incoherent layers, and is differentiable.
- RCWA treats an unpatterned stack as a single-harmonic problem.
- FDTD handles normal incidence only.
Example¶
import lightsmith as ls
from lightsmith.problems import Layer, LayerStackProblem
bragg = LayerStackProblem(
superstrate=ls.ConstantIndex(n_real=1.0),
layers=[Layer(thickness_nm=600 / 4 / n, material=ls.ConstantIndex(n_real=n))
for _ in range(10) for n in (2.3, 1.45)],
substrate=ls.ConstantIndex(n_real=1.52),
wavelengths=ls.WavelengthRange(start_nm=450, stop_nm=800, num=351),
)
res = ls.solve(bragg)