|
| 1 | +from .anisotropic import AnisotropicMedium, CustomAnisotropicMedium, FullyAnisotropicMedium |
| 2 | +from .base import AbstractCustomMedium, AbstractMedium |
| 3 | +from .dispersionless import CustomMedium, Medium, PECMedium |
| 4 | +from .dispersive_abc import CustomDispersiveMedium, DispersiveMedium |
| 5 | +from .dispersive_models import ( |
| 6 | + CustomDebye, |
| 7 | + CustomDrude, |
| 8 | + CustomLorentz, |
| 9 | + CustomPoleResidue, |
| 10 | + CustomSellmeier, |
| 11 | + Debye, |
| 12 | + Drude, |
| 13 | + Lorentz, |
| 14 | + PoleResidue, |
| 15 | + Sellmeier, |
| 16 | +) |
| 17 | +from .lossy_metal import HammerstadSurfaceRoughness, HuraySurfaceRoughness, LossyMetalMedium |
| 18 | +from .medium_2d import Medium2D |
| 19 | +from .nonlinear import KerrNonlinearity, NonlinearSpec, NonlinearSusceptibility, TwoPhotonAbsorption |
| 20 | +from .perturbation import PerturbationMedium, PerturbationPoleResidue |
| 21 | +from .utils import medium_from_nk |
| 22 | + |
| 23 | +PEC = PECMedium(name="PEC") |
| 24 | +PEC2D = Medium2D(ss=PEC, tt=PEC) |
| 25 | + |
| 26 | + |
| 27 | +def medium_from_nk(n: float, k: float, freq: float, **kwargs) -> Union[Medium, Lorentz]: |
| 28 | + """Convert ``n`` and ``k`` values at frequency ``freq`` to :class:`Medium` if ``Re[epsilon]>=1``, |
| 29 | + or :class:`Lorentz` if if ``Re[epsilon]<1``. |
| 30 | +
|
| 31 | + Parameters |
| 32 | + ---------- |
| 33 | + n : float |
| 34 | + Real part of refractive index. |
| 35 | + k : float = 0 |
| 36 | + Imaginary part of refrative index. |
| 37 | + freq : float |
| 38 | + Frequency to evaluate permittivity at (Hz). |
| 39 | + kwargs: dict |
| 40 | + Keyword arguments passed to the medium construction. |
| 41 | +
|
| 42 | + Returns |
| 43 | + ------- |
| 44 | + Union[:class:`Medium`, :class:`Lorentz`] |
| 45 | + Dispersionless medium or Lorentz medium having refractive index n+ik at frequency ``freq``. |
| 46 | + """ |
| 47 | + eps_complex = AbstractMedium.nk_to_eps_complex(n, k) |
| 48 | + if eps_complex.real >= 1: |
| 49 | + return Medium.from_nk(n, k, freq, **kwargs) |
| 50 | + return Lorentz.from_nk(n, k, freq, **kwargs) |
0 commit comments