Skip to content

Commit 0a529f4

Browse files
committed
new structure for medium.py
1 parent 2eeb246 commit 0a529f4

14 files changed

Lines changed: 2513 additions & 2518 deletions
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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

Comments
 (0)