Source code for fdtdx.core.wavelength
from fdtdx import constants
from fdtdx.core.jax.pytrees import TreeClass, autoinit, frozen_field
[docs]
@autoinit
class WaveCharacter(TreeClass):
"""Class describing a wavelength/period/frequency in free space. Importantly, the wave characteristic conversion is
based on a free space wave when using the wavelength (For conversion, a refractive index of 1 is used).
"""
#: Phase shift in radians. Defaults to 0.
phase_shift: float = frozen_field(default=0.0)
#: Optional period in seconds. Mutually exclusive with wavelength and frequency.
#: Defaults to None.
period: float | None = frozen_field(default=None)
#: Optional wavelength in meters for free space propagation.
#: Mutually exclusive with period and frequency. Defaults to None.
wavelength: float | None = frozen_field(default=None)
#: Optional frequency in Hz. Mutually exclusive with period and wavelength.
frequency: float | None = frozen_field(default=None)
def __post_init__(
self,
):
self._check_input()
def _check_input(self):
if sum([self.period is not None, self.frequency is not None, self.wavelength is not None]) != 1:
raise Exception("Need to set exactly one of Period, Frequency or Wavelength in WaveCharacter")
[docs]
def get_period(self) -> float:
if self.period is None:
if self.wavelength is not None:
return self.wavelength / constants.c
elif self.frequency is not None:
return 1.0 / self.frequency
else:
raise Exception("This should never happen")
assert self.period is not None, "This should never happen"
return self.period
[docs]
def get_wavelength(self) -> float:
if self.wavelength is None:
if self.period is not None:
return self.period * constants.c
elif self.frequency is not None:
return constants.c / self.frequency
else:
raise Exception("This should never happen")
assert self.wavelength is not None, "This should never happen"
return self.wavelength
[docs]
def get_frequency(self) -> float:
if self.frequency is None:
if self.period is not None:
return 1.0 / self.period
elif self.wavelength is not None:
return constants.c / self.wavelength
else:
raise Exception("This should never happen")
assert self.frequency is not None, "This should never happen"
return self.frequency