Source code for elli.dispersions.drude_resistivity

# Encoding: utf-8
"""Drude dispersion model with resistivity based parameters."""

import numpy as np
import numpy.typing as npt
import scipy.constants as sc

from ..utils import conversion_wavelength_energy
from .base_dispersion import Dispersion


[docs] class DrudeResistivity(Dispersion): r"""Drude dispersion model with resistivity based parameters. Drude models in the literature typically contain an additional epsilon infinity value. Use `EpsilonInf` to add this parameter or simply do DrudeEnergy() + eps_inf. Single parameters: :rho_opt: Optical resistivity. Defaults to 1. Unit in Ω-cm. :tau: Mean scattering time. Defaults to 1. Unit in s. Repeated parameters: -- Output: .. math:: \varepsilon(E) = \hbar / (\varepsilon_0 \cdot \boldsymbol{rho\_opt} \cdot \boldsymbol{tau} \cdot E^2 - i \cdot \hbar \cdot E) where :math:`\hbar` is the planck constant divided by :math:`2\pi` and :math:`\varepsilon_0` is the vacuum dielectric permittivity. """ single_params_template = {"rho_opt": 1, "tau": 1} rep_params_template = {} def dielectric_function(self, lbda: npt.ArrayLike) -> npt.NDArray: energy = conversion_wavelength_energy(lbda) hbar = sc.value("Planck constant in eV/Hz") / 2 / np.pi eps0 = sc.value("vacuum electric permittivity") * 1e-2 return hbar**2 / ( eps0 * self.single_params.get("rho_opt") * (self.single_params.get("tau") * energy**2 - 1j * hbar * energy) )