Materials
Material models and dispersive media in WiTwin Maxwell
Overview#
WiTwin Maxwell extends the base witwin.core.Material with dispersive pole models, anisotropic tensors, and convenience constructors.
import witwin.maxwell as mw
# Simple dielectric
mat = mw.Material(eps_r=12.0)
# Conductive material
mat = mw.Material(eps_r=4.0, sigma_e=0.01)
# Dispersive Drude metal
mat = mw.Material.drude(eps_inf=1.0, plasma_frequency=2.0e15, gamma=1.0e13)Material#
Constructor#
| Parameter | Type | Default | Description |
|---|---|---|---|
eps_r | float | 1.0 | Relative permittivity |
mu_r | float | 1.0 | Relative permeability |
sigma_e | float | 0.0 | Electrical conductivity. Must be >= 0 |
name | str | None | None | Optional material name |
debye_poles | tuple[DebyePole] | () | Electric Debye dispersion poles |
drude_poles | tuple[DrudePole] | () | Electric Drude dispersion poles |
lorentz_poles | tuple[LorentzPole] | () | Electric Lorentz dispersion poles |
mu_debye_poles | tuple[DebyePole] | () | Magnetic Debye dispersion poles |
mu_drude_poles | tuple[DrudePole] | () | Magnetic Drude dispersion poles |
mu_lorentz_poles | tuple[LorentzPole] | () | Magnetic Lorentz dispersion poles |
epsilon_tensor | DiagonalTensor3 | None | None | Anisotropic permittivity tensor |
mu_tensor | DiagonalTensor3 | None | None | Anisotropic permeability tensor |
sigma_e_tensor | DiagonalTensor3 | None | None | Anisotropic conductivity tensor |
Convenience Constructors#
# Debye dispersive medium
mw.Material.debye(eps_inf=2.0, delta_eps=1.5, tau=1.0e-12)
# Drude metal
mw.Material.drude(eps_inf=1.0, plasma_frequency=2.0e15, gamma=1.0e13)
# Lorentz resonant medium
mw.Material.lorentz(eps_inf=1.0, delta_eps=2.0, resonance_frequency=1.0e12, gamma=1.0e10)Properties#
| Property | Description |
|---|---|
material.is_dispersive | True if any dispersion poles are set |
material.is_electric_dispersive | True if electric poles are set |
material.is_magnetic_dispersive | True if magnetic poles are set |
material.is_anisotropic | True if any tensor is set |
material.is_nonlinear | True if kerr_chi3 is set |
Methods#
material.relative_permittivity(frequency) — Returns complex permittivity at the given frequency in Hz including all dispersion poles and conductivity.
material.relative_permeability(frequency) — Returns complex permeability at the given frequency in Hz.
Dispersive Pole Models#
DebyePole#
A first-order relaxation pole for modeling dielectric relaxation.
mw.DebyePole(delta_eps=1.5, tau=1.0e-12)| Parameter | Description |
|---|---|
delta_eps | Permittivity change. Must be >= 0 |
tau | Relaxation time in seconds. Must be > 0 |
DrudePole#
A free-electron pole for modeling metals and plasmas.
mw.DrudePole(plasma_frequency=2.0e15, gamma=1.0e13)| Parameter | Description |
|---|---|
plasma_frequency | Plasma frequency in Hz. Must be > 0 |
gamma | Collision rate in Hz. Must be >= 0 |
LorentzPole#
A second-order resonant pole for modeling phonon resonances and bound electrons.
mw.LorentzPole(delta_eps=2.0, resonance_frequency=1.0e12, gamma=1.0e10)| Parameter | Description |
|---|---|
delta_eps | Permittivity change at resonance. Must be >= 0 |
resonance_frequency | Resonance frequency in Hz. Must be > 0 |
gamma | Damping rate in Hz. Must be >= 0 |
Anisotropic Tensors#
Use DiagonalTensor3 for axis-aligned anisotropic materials:
mat = mw.Material(
epsilon_tensor=mw.DiagonalTensor3(xx=4.0, yy=4.0, zz=2.0),
)| Parameter | Description |
|---|---|
xx | Tensor component along x |
yy | Tensor component along y |
zz | Tensor component along z |
Note
Full Tensor3x3 off-diagonal support is not yet implemented. Use DiagonalTensor3 for anisotropic materials.
Next Steps#
- Simulation — run the simulation
- First simulation tutorial — end-to-end example