Dispersion API¶
dispersion
¶
Differentiable permittivity of the built-in materials, in JAX.
The models of :mod:hyperbolic_optics.materials, evaluated in JAX so that
wavelength gradients include the dispersion. Parameters come from the same
material_params.json; the tests check the two agree.
Models:
- transparency-window crystals (LiNbO₃, TiO₂, quartz, calcite, sapphire) and PIC materials (SiO₂, Si₃N₄, Si): lossless Sellmeier fits per principal axis;
- uniaxial and biaxial: the factorised TO–LO form
ε(ω) = ε∞ ∏ᵢ (ω_LO,i² − ω² − iωγ_LO,i) / (ω_TO,i² − ω² − iωγ_TO,i)per principal axis, with a uniaxial tensordiag(ε_o, ε_o, ε_e)(optic axis along z); - monoclinic (β-Ga₂O₃): Lorentz Bu modes whose dipoles lie at angles αᵢ in the x-y plane, which gives the xy component, plus Au modes along z.
Frequencies are in cm⁻¹ (:func:at_wavelength takes µm); tensors are in the
crystal frame (rotate with :func:hyperbolic_optics.bcm.rotate_tensor).
:func:pockels_tensor adds the Pockels effect of an applied field.
Functions:
-
materials–Names accepted by :func:
permittivity(the payload API's material names). -
permittivity–Crystal-frame permittivity tensor of a built-in material,
[..., 3, 3]. -
at_wavelength–:func:
permittivityat a vacuum wavelength in µm (1e4 / λcm⁻¹). -
frequency_range–The material's frequency window in cm⁻¹ -- its Reststrahlen fit window for the
-
trigonal_3m–The electro-optic tensor
rᵢⱼₖ[3, 3, 3](pm/V) of a point-group-3m crystal. -
pockels_tensor–The permittivity under an applied field, in the lab frame.
materials
¶
permittivity
¶
Crystal-frame permittivity tensor of a built-in material, [..., 3, 3].
Parameters:
-
material(str) –A name from :func:
materials, e.g."hBN". -
wavenumber_cm(Array) –Frequency in cm⁻¹, any shape; differentiable.
Source code in hyperbolic_optics/dispersion.py
at_wavelength
¶
:func:permittivity at a vacuum wavelength in µm (1e4 / λ cm⁻¹).
frequency_range
¶
The material's frequency window in cm⁻¹ -- its Reststrahlen fit window for the phonon models, its published validity for the Sellmeier ones.
Source code in hyperbolic_optics/dispersion.py
trigonal_3m
¶
The electro-optic tensor rᵢⱼₖ [3, 3, 3] (pm/V) of a point-group-3m crystal.
In the crystal frame: z the optic © axis, x perpendicular to a mirror
plane. In contracted notation r = [[0, −r22, r13], [0, r22, r13],
[0, 0, r33], [0, r51, 0], [r51, 0, 0], [−r22, 0, 0]].
Source code in hyperbolic_optics/dispersion.py
pockels_tensor
¶
The permittivity under an applied field, in the lab frame.
Parameters:
-
eps_crystal(Array) –The unperturbed tensor in the crystal frame
[..., 3, 3](e.g.dispersion.at_wavelength("LiNbO3", 1.55)). -
r_pm_per_v(Array) –The electro-optic tensor
[3, 3, 3]in the crystal frame (e.g. :data:LITHIUM_NIOBATE). -
field_v_per_um(Array) –The applied field in the lab frame
[..., 3], V/µm. -
rotation(Array | None, default:None) –The crystal's orientation,
Rwithε_lab = R·ε_crystal·Rᵀ(:func:hyperbolic_optics.bcm.rotation_matrix); identity if omitted.
The Pockels effect: the impermeability η = ε⁻¹ changes by
Δηᵢⱼ = Σₖ rᵢⱼₖ Eₖ (1e-6 per pm/V · V/µm).
Returns:
-
Array–ε(E)in the lab frame[..., 3, 3]; differentiable in every argument.