Skip to content

Materials

Base Materials

fdtdx.objects.material.UniformMaterial

Bases: SimulationObject

Object with uniform permittivity and permeability throughout its volume.

A material object that applies constant permittivity and permeability values to its entire volume in the simulation grid. Used as base class for specific material implementations.

Attributes:

Name Type Description
permittivity float

Relative permittivity (εᵣ) of the material

permeability float

Relative permeability (μᵣ) of the material, defaults to 1.0

color tuple[float, float, float]

RGB tuple for visualization, defaults to light grey

Source code in src/fdtdx/objects/material.py
@extended_autoinit
class UniformMaterial(SimulationObject):
    """Object with uniform permittivity and permeability throughout its volume.

    A material object that applies constant permittivity and permeability values
    to its entire volume in the simulation grid. Used as base class for specific
    material implementations.

    Attributes:
        permittivity: Relative permittivity (εᵣ) of the material
        permeability: Relative permeability (μᵣ) of the material, defaults to 1.0
        color: RGB tuple for visualization, defaults to light grey
    """

    permittivity: float = frozen_field(init=True, kind="KW_ONLY")  # type: ignore
    permeability: float = tc.field(default=1.0, init=True, kind="KW_ONLY")  # type: ignore
    color: tuple[float, float, float] = LIGHT_GREY

    def get_inv_permittivity(
        self,
        prev_inv_permittivity: jax.Array,
        params: dict[str, jax.Array] | None,
    ) -> tuple[jax.Array, dict]:  # permittivity and info dict
        """Calculate inverse permittivity for this material's volume.

        Args:
            prev_inv_permittivity: Previous inverse permittivity values
            params: Optional parameters for permittivity calculation

        Returns:
            tuple containing:
                - Array of inverse permittivity values (1/εᵣ)
                - Dictionary with additional information
        """
        del params
        res = jnp.ones_like(prev_inv_permittivity) / self.permittivity
        return res, {}

    def get_inv_permeability(
        self,
        prev_inv_permeability: jax.Array,
        params: dict[str, jax.Array] | None,
    ) -> tuple[jax.Array, dict]:  # permeability and info dict
        """Calculate inverse permeability for this material's volume.

        Args:
            prev_inv_permeability: Previous inverse permeability values
            params: Optional parameters for permeability calculation

        Returns:
            tuple containing:
                - Array of inverse permeability values (1/μᵣ)
                - Dictionary with additional information
        """
        del params
        res = jnp.ones_like(prev_inv_permeability) / self.permeability
        return res, {}

get_inv_permeability(prev_inv_permeability, params)

Calculate inverse permeability for this material's volume.

Parameters:

Name Type Description Default
prev_inv_permeability Array

Previous inverse permeability values

required
params dict[str, Array] | None

Optional parameters for permeability calculation

required

Returns:

Type Description
tuple[Array, dict]

tuple containing: - Array of inverse permeability values (1/μᵣ) - Dictionary with additional information

Source code in src/fdtdx/objects/material.py
def get_inv_permeability(
    self,
    prev_inv_permeability: jax.Array,
    params: dict[str, jax.Array] | None,
) -> tuple[jax.Array, dict]:  # permeability and info dict
    """Calculate inverse permeability for this material's volume.

    Args:
        prev_inv_permeability: Previous inverse permeability values
        params: Optional parameters for permeability calculation

    Returns:
        tuple containing:
            - Array of inverse permeability values (1/μᵣ)
            - Dictionary with additional information
    """
    del params
    res = jnp.ones_like(prev_inv_permeability) / self.permeability
    return res, {}

get_inv_permittivity(prev_inv_permittivity, params)

Calculate inverse permittivity for this material's volume.

Parameters:

Name Type Description Default
prev_inv_permittivity Array

Previous inverse permittivity values

required
params dict[str, Array] | None

Optional parameters for permittivity calculation

required

Returns:

Type Description
tuple[Array, dict]

tuple containing: - Array of inverse permittivity values (1/εᵣ) - Dictionary with additional information

Source code in src/fdtdx/objects/material.py
def get_inv_permittivity(
    self,
    prev_inv_permittivity: jax.Array,
    params: dict[str, jax.Array] | None,
) -> tuple[jax.Array, dict]:  # permittivity and info dict
    """Calculate inverse permittivity for this material's volume.

    Args:
        prev_inv_permittivity: Previous inverse permittivity values
        params: Optional parameters for permittivity calculation

    Returns:
        tuple containing:
            - Array of inverse permittivity values (1/εᵣ)
            - Dictionary with additional information
    """
    del params
    res = jnp.ones_like(prev_inv_permittivity) / self.permittivity
    return res, {}

Base class for materials with uniform electromagnetic properties.

fdtdx.objects.material.NoMaterial

Bases: SimulationObject

Object that does not modify the permittivity nor permeability

Source code in src/fdtdx/objects/material.py
@tc.autoinit
class NoMaterial(SimulationObject):
    """
    Object that does not modify the permittivity nor permeability
    """

    placement_order: int = -1000

    def get_inv_permittivity(
        self,
        prev_inv_permittivity: jax.Array,
        params: dict[str, jax.Array] | None,
    ) -> tuple[jax.Array, dict]:  # permittivity and info dict
        del params
        return prev_inv_permittivity, {}

    def get_inv_permeability(
        self,
        prev_inv_permeability: jax.Array,
        params: dict[str, jax.Array] | None,
    ) -> tuple[jax.Array, dict]:  # permeability and info dict
        del params
        return prev_inv_permeability, {}

Non-interacting material that preserves existing properties.

fdtdx.objects.material.SimulationVolume

Bases: UniformMaterial

Background material for the entire simulation volume.

Defines the default material properties for the simulation background. Usually represents air/vacuum with εᵣ=1.0 and μᵣ=1.0.

Source code in src/fdtdx/objects/material.py
@tc.autoinit
class SimulationVolume(UniformMaterial):
    """Background material for the entire simulation volume.

    Defines the default material properties for the simulation background.
    Usually represents air/vacuum with εᵣ=1.0 and μᵣ=1.0.
    """

    permittivity: float = tc.field(default=1.0, init=True, kind="KW_ONLY")  # type: ignore
    permeability: float = tc.field(default=1.0, init=True, kind="KW_ONLY")  # type: ignore

Background material defining simulation environment properties.

fdtdx.objects.material.Substrate

Bases: UniformMaterial

Material representing a substrate layer.

Used to model substrate materials like silicon dioxide. Visualized in light brown color by default.

Source code in src/fdtdx/objects/material.py
@extended_autoinit
class Substrate(UniformMaterial):
    """Material representing a substrate layer.

    Used to model substrate materials like silicon dioxide.
    Visualized in light brown color by default.
    """

    color: tuple[float, float, float] = LIGHT_BROWN

Material for modeling substrate layers.

fdtdx.objects.material.WaveGuide

Bases: UniformMaterial

Material for optical waveguides.

Used to model waveguide structures that can guide electromagnetic waves. Visualized in light blue color by default.

Attributes:

Name Type Description
permittivity float

Required relative permittivity of the waveguide material

color tuple[float, float, float]

RGB tuple for visualization, defaults to light blue

Source code in src/fdtdx/objects/material.py
@tc.autoinit
class WaveGuide(UniformMaterial):
    """Material for optical waveguides.

    Used to model waveguide structures that can guide electromagnetic waves.
    Visualized in light blue color by default.

    Attributes:
        permittivity: Required relative permittivity of the waveguide material
        color: RGB tuple for visualization, defaults to light blue
    """

    permittivity: float = tc.field(init=True, kind="KW_ONLY")  # type: ignore
    color: tuple[float, float, float] = LIGHT_BLUE

Material for optical waveguide structures.