Source code for elli.dispersions.lorentz_lambda

# Encoding: utf-8
"""Lorentz dispersion law with parameters in units of wavelengths."""

import numpy.typing as npt

from .base_dispersion import Dispersion


[docs] class LorentzLambda(Dispersion): r"""Lorentz dispersion law with parameters in units of wavelengths. Single parameters: -- Repeated parameters: :A: Amplitude of the oscillator. Defaults to 1. :lambda_r: Resonance wavelength. Defaults to 0. Unit in nm. :gamma: Broadening of the oscillator. Defaults to 0. Unit in nm. Output: .. math:: \varepsilon(\lambda) = 1 + \sum_j \boldsymbol{A}_j \cdot \lambda^2 / (\lambda^2 - \boldsymbol{lambda\_r}_j^2 + i \cdot \boldsymbol{gamma}_j \cdot \lambda) The summation index :math:`j` refers to the respective oscillator. """ single_params_template = {} rep_params_template = {"A": 1, "lambda_r": 0, "gamma": 0} def dielectric_function(self, lbda: npt.ArrayLike) -> npt.NDArray: return 1 + sum( c.get("A") * lbda**2 / (lbda**2 - c.get("lambda_r") ** 2 - 1j * c.get("gamma") * lbda) for c in self.rep_params )