fdtdx.BoundaryConfig#
- class fdtdx.BoundaryConfig(*, boundary_type_minx='pml', boundary_type_maxx='pml', boundary_type_miny='pml', boundary_type_maxy='pml', boundary_type_minz='pml', boundary_type_maxz='pml', thickness_grid_minx=10, thickness_grid_maxx=10, thickness_grid_miny=10, thickness_grid_maxy=10, thickness_grid_minz=10, thickness_grid_maxz=10, kappa_start_minx=None, kappa_end_minx=None, kappa_start_maxx=None, kappa_end_maxx=None, kappa_start_miny=None, kappa_end_miny=None, kappa_start_maxy=None, kappa_end_maxy=None, kappa_start_minz=None, kappa_end_minz=None, kappa_start_maxz=None, kappa_end_maxz=None, kappa_order_minx=None, kappa_order_maxx=None, kappa_order_miny=None, kappa_order_maxy=None, kappa_order_minz=None, kappa_order_maxz=None, alpha_start_minx=None, alpha_end_minx=None, alpha_start_maxx=None, alpha_end_maxx=None, alpha_start_miny=None, alpha_end_miny=None, alpha_start_maxy=None, alpha_end_maxy=None, alpha_start_minz=None, alpha_end_minz=None, alpha_start_maxz=None, alpha_end_maxz=None, alpha_order_minx=None, alpha_order_maxx=None, alpha_order_miny=None, alpha_order_maxy=None, alpha_order_minz=None, alpha_order_maxz=None, sigma_start_minx=None, sigma_end_minx=None, sigma_start_maxx=None, sigma_end_maxx=None, sigma_start_miny=None, sigma_end_miny=None, sigma_start_maxy=None, sigma_end_maxy=None, sigma_start_minz=None, sigma_end_minz=None, sigma_start_maxz=None, sigma_end_maxz=None, sigma_order_minx=None, sigma_order_maxx=None, sigma_order_miny=None, sigma_order_maxy=None, sigma_order_minz=None, sigma_order_maxz=None, bloch_vector=(0.0, 0.0, 0.0))[source]#
Bases:
TreeClassConfiguration class for boundary conditions.
This class stores parameters for boundary conditions in all six directions (min/max x/y/z). Supports both PML and periodic boundaries. For PML, the parameters control the absorption properties and physical size of the PML regions.
Quick Reference#
Attributes
Methods
Attributes#
-
BoundaryConfig.alpha_end_maxx:
float|None# Final alpha value at max x boundary. Default 0.0.
-
BoundaryConfig.alpha_end_maxy:
float|None# Final alpha value at max y boundary. Default 0.0.
-
BoundaryConfig.alpha_end_maxz:
float|None# Final alpha value at max z boundary. Default 0.0.
-
BoundaryConfig.alpha_end_minx:
float|None# Final alpha value at min x boundary. Default 0.0.
-
BoundaryConfig.alpha_end_miny:
float|None# Final alpha value at min y boundary. Default 0.0.
-
BoundaryConfig.alpha_end_minz:
float|None# Final alpha value at min z boundary. Default 0.0.
-
BoundaryConfig.alpha_order_maxx:
float|None# Polynomial order for alpha grading at max x boundary. Default 1.0.
-
BoundaryConfig.alpha_order_maxy:
float|None# Polynomial order for alpha grading at max y boundary. Default 1.0.
-
BoundaryConfig.alpha_order_maxz:
float|None# Polynomial order for alpha grading at max z boundary. Default 1.0.
-
BoundaryConfig.alpha_order_minx:
float|None# Polynomial order for alpha grading at min x boundary. Default 1.0.
-
BoundaryConfig.alpha_order_miny:
float|None# Polynomial order for alpha grading at min y boundary. Default 1.0.
-
BoundaryConfig.alpha_order_minz:
float|None# Polynomial order for alpha grading at min z boundary. Default 1.0.
-
BoundaryConfig.alpha_start_maxx:
float|None# Initial alpha value at max x boundary. Default 0.01 * 2 * jnp.pi * c / wavelength * eps0.
-
BoundaryConfig.alpha_start_maxy:
float|None# Initial alpha value at max y boundary. Default 0.01 * 2 * jnp.pi * c / wavelength * eps0.
-
BoundaryConfig.alpha_start_maxz:
float|None# Initial alpha value at max z boundary. Default 0.01 * 2 * jnp.pi * c / wavelength * eps0.
-
BoundaryConfig.alpha_start_minx:
float|None# Initial alpha value at min x boundary. Default 0.01 * 2 * jnp.pi * c / wavelength * eps0.
-
BoundaryConfig.alpha_start_miny:
float|None# Initial alpha value at min y boundary. Default 0.01 * 2 * jnp.pi * c / wavelength * eps0.
-
BoundaryConfig.alpha_start_minz:
float|None# Initial alpha value at min z boundary. Default 0.01 * 2 * jnp.pi * c / wavelength * eps0.
-
BoundaryConfig.bloch_vector:
tuple[float,float,float]# Bloch wave vector (k_x, k_y, k_z) in rad/m. Each component provides the phase shift for the corresponding axis when that axis uses “bloch” boundaries. The full 3D vector is stored on every BlochBoundary; each boundary extracts the component along its own axis to compute exp(i * k_axis * L_axis).
-
BoundaryConfig.boundary_type_maxx:
str# Boundary type at maximum x (“pml”, “periodic”, “pec”, “pmc”, or “bloch”). Default “pml”.
-
BoundaryConfig.boundary_type_maxy:
str# Boundary type at maximum y (“pml”, “periodic”, “pec”, “pmc”, or “bloch”). Default “pml”.
-
BoundaryConfig.boundary_type_maxz:
str# Boundary type at maximum z (“pml”, “periodic”, “pec”, “pmc”, or “bloch”). Default “pml”.
-
BoundaryConfig.boundary_type_minx:
str# Boundary type at minimum x (“pml”, “periodic”, “pec”, “pmc”, or “bloch”). Default “pml”.
-
BoundaryConfig.boundary_type_miny:
str# Boundary type at minimum y (“pml”, “periodic”, “pec”, “pmc”, or “bloch”). Default “pml”.
-
BoundaryConfig.boundary_type_minz:
str# Boundary type at minimum z (“pml”, “periodic”, “pec”, “pmc”, or “bloch”). Default “pml”.
-
BoundaryConfig.kappa_end_maxx:
float|None# Final kappa value at max x boundary. Default 1.0.
-
BoundaryConfig.kappa_end_maxy:
float|None# Final kappa value at max y boundary. Default 1.0.
-
BoundaryConfig.kappa_end_maxz:
float|None# Final kappa value at max z boundary. Default 1.0.
-
BoundaryConfig.kappa_end_minx:
float|None# Final kappa value at min x boundary. Default 1.0.
-
BoundaryConfig.kappa_end_miny:
float|None# Final kappa value at min y boundary. Default 1.0.
-
BoundaryConfig.kappa_end_minz:
float|None# Final kappa value at min z boundary. Default 1.0.
-
BoundaryConfig.kappa_order_maxx:
float|None# Polynomial order for kappa grading at max x boundary. Default 1.0.
-
BoundaryConfig.kappa_order_maxy:
float|None# Polynomial order for kappa grading at max y boundary. Default 1.0.
-
BoundaryConfig.kappa_order_maxz:
float|None# Polynomial order for kappa grading at max z boundary. Default 1.0.
-
BoundaryConfig.kappa_order_minx:
float|None# Polynomial order for kappa grading at min x boundary. Default 1.0.
-
BoundaryConfig.kappa_order_miny:
float|None# Polynomial order for kappa grading at min y boundary. Default 1.0.
-
BoundaryConfig.kappa_order_minz:
float|None# Polynomial order for kappa grading at min z boundary. Default 1.0.
-
BoundaryConfig.kappa_start_maxx:
float|None# Initial kappa value at max x boundary. Default 1.0.
-
BoundaryConfig.kappa_start_maxy:
float|None# Initial kappa value at max y boundary. Default 1.0.
-
BoundaryConfig.kappa_start_maxz:
float|None# Initial kappa value at max z boundary. Default 1.0.
-
BoundaryConfig.kappa_start_minx:
float|None# Initial kappa value at min x boundary. Default 1.0.
-
BoundaryConfig.kappa_start_miny:
float|None# Initial kappa value at min y boundary. Default 1.0.
-
BoundaryConfig.kappa_start_minz:
float|None# Initial kappa value at min z boundary. Default 1.0.
-
BoundaryConfig.sigma_end_maxx:
float|None# Final sigma value at max x boundary. Default -(3.0 + 1) * jnp.log(1e-6) / (2 * (eta0 / 1.0) * (self.thickness * self._config.uniform_spacing())).
-
BoundaryConfig.sigma_end_maxy:
float|None# Final sigma value at max y boundary. Default -(3.0 + 1) * jnp.log(1e-6) / (2 * (eta0 / 1.0) * (self.thickness * self._config.uniform_spacing())).
-
BoundaryConfig.sigma_end_maxz:
float|None# Final sigma value at max z boundary. Default -(3.0 + 1) * jnp.log(1e-6) / (2 * (eta0 / 1.0) * (self.thickness * self._config.uniform_spacing())).
-
BoundaryConfig.sigma_end_minx:
float|None# Final sigma value at min x boundary. Default -(3.0 + 1) * jnp.log(1e-6) / (2 * (eta0 / 1.0) * (self.thickness * self._config.uniform_spacing())).
-
BoundaryConfig.sigma_end_miny:
float|None# Final sigma value at min y boundary. Default -(3.0 + 1) * jnp.log(1e-6) / (2 * (eta0 / 1.0) * (self.thickness * self._config.uniform_spacing())).
-
BoundaryConfig.sigma_end_minz:
float|None# Final sigma value at min z boundary. Default -(3.0 + 1) * jnp.log(1e-6) / (2 * (eta0 / 1.0) * (self.thickness * self._config.uniform_spacing())).
-
BoundaryConfig.sigma_order_maxx:
float|None# Polynomial order for sigma grading at max x boundary. Default 3.0.
-
BoundaryConfig.sigma_order_maxy:
float|None# Polynomial order for sigma grading at max y boundary. Default 3.0.
-
BoundaryConfig.sigma_order_maxz:
float|None# Polynomial order for sigma grading at max z boundary. Default 3.0.
-
BoundaryConfig.sigma_order_minx:
float|None# Polynomial order for sigma grading at min x boundary. Default 3.0.
-
BoundaryConfig.sigma_order_miny:
float|None# Polynomial order for sigma grading at min y boundary. Default 3.0.
-
BoundaryConfig.sigma_order_minz:
float|None# Polynomial order for sigma grading at min z boundary. Default 3.0.
-
BoundaryConfig.sigma_start_maxx:
float|None# Initial sigma value at max x boundary. Default 0.0.
-
BoundaryConfig.sigma_start_maxy:
float|None# Initial sigma value at max y boundary. Default 0.0.
-
BoundaryConfig.sigma_start_maxz:
float|None# Initial sigma value at max z boundary. Default 0.0.
-
BoundaryConfig.sigma_start_minx:
float|None# Initial sigma value at min x boundary. Default 0.0.
-
BoundaryConfig.sigma_start_miny:
float|None# Initial sigma value at min y boundary. Default 0.0.
-
BoundaryConfig.sigma_start_minz:
float|None# Initial sigma value at min z boundary. Default 0.0.
-
BoundaryConfig.thickness_grid_maxx:
int# Number of grid cells for PML at maximum x boundary. Default 10.
-
BoundaryConfig.thickness_grid_maxy:
int# Number of grid cells for PML at maximum y boundary. Default 10.
-
BoundaryConfig.thickness_grid_maxz:
int# Number of grid cells for PML at maximum z boundary. Default 10.
-
BoundaryConfig.thickness_grid_minx:
int# Number of grid cells for PML at minimum x boundary. Default 10.
-
BoundaryConfig.thickness_grid_miny:
int# Boundary type at minimum y (“pml” or “periodic”). Default “pml”.
-
BoundaryConfig.thickness_grid_minz:
int# Number of grid cells for PML at minimum z boundary. Default 10.
Methods#
- BoundaryConfig.aset(attr_name, val, create_new_ok=False)#
Sets an attribute of this class. In contrast to the classical .at[].set(), this method updates the class attribute directly and does not only operate on jax pytree leaf nodes. Instead, replaces the full attribute with the new value.
The attribute can either be the attribute name of this class, or for nested classes it can also be the attribute name of a class, which itself is an attribute of this class. The syntax for this operation could look like this: “a->b->[0]->[‘name’]”. Here, the current class has an attribute a, which has an attribute b, which is a list, which we index at index 0, which is an element of type dictionary, which we index using the dictionary key ‘name’.
Note that dictionary keys cannot contain square brackets or single quotes (even if they are escaped).
- Parameters:
attr_name (str) – Name of attribute to set
val (Any) – Value to set the attribute to
create_new_ok (bool, optional) – If false (default), throw an error if the attribute does not exist. If true, creates a new attribute if the attribute name does not exist yet.
- Returns:
Updated instance with new attribute value
- Return type:
Self
- classmethod BoundaryConfig.from_uniform_bound(thickness=10, boundary_type='pml', kappa_start=None, kappa_end=None, kappa_order=None, alpha_start=None, alpha_end=None, alpha_order=None, sigma_start=None, sigma_end=None, sigma_order=None, override_types=None, bloch_vector=(0.0, 0.0, 0.0))[source]#
Creates a BoundaryConfig with uniform parameters for all boundaries.
- Parameters:
thickness (int, optional) – Grid thickness to use for all PML boundaries. Defaults to 10.
boundary_type (str, optional) – Type of boundary to use (“pml” or “periodic”). Defaults to “pml”.
kappa_start (float, optional) – Initial kappa value for all boundaries. Defaults to 1.0.
kappa_end (float, optional) – Final kappa value for all boundaries. Defaults to 1.5.
kappa_order (float, optional) – Polynomial order for kappa grading at all boundaries. Defaults to 1.0.
alpha_start (float, optional) – Initial alpha value for all boundaries. Defaults to 1e-8.
alpha_end (float, optional) – Final alpha value for all boundaries. Defaults to 1e-8.
alpha_order (float, optional) – Polynomial order for alpha grading at all boundaries. Defaults to 1.0.
sigma_start (float, optional) – Initial sigma value for all boundaries. Defaults to 0.0.
sigma_end (float, optional) – Final sigma value for all boundaries. Defaults to 1.0.
sigma_order (float, optional) – Polynomial order for sigma grading at all boundaries. Defaults to 3.0.
override_types (dict[str, str], optional) – Dictionary mapping specific boundaries (“min_x”, “max_x”, “min_y”, “max_y”, “min_z”, “max_z”) to their boundary types (“pml”, “periodic”), overriding the global boundary_type. Defaults to None.
bloch_vector (tuple[float, float, float], optional) – Bloch wave vector (k_x, k_y, k_z) in rad/m. Each component sets the phase shift for the corresponding axis. Defaults to (0, 0, 0).
- Returns:
New config object with uniform parameters
- Return type:
- BoundaryConfig.get_alpha_dict(prop)[source]#
Gets a dictionary mapping boundary names to their alpha values.
- Parameters:
prop (Literal["alpha_start", "alpha_end"]) – Which alpha property to get, either “alpha_start” or “alpha_end”.
- Returns:
- Dictionary with keys ‘min_x’, ‘max_x’, ‘min_y’, ‘max_y’, ‘min_z’, ‘max_z’
mapping to their respective alpha values.
- Return type:
dict[str, float | None]
- Raises:
Exception – If prop is not “alpha_start” or “alpha_end”
- BoundaryConfig.get_class_fields()#
- Return type:
list[TreeClassField]
- BoundaryConfig.get_dict()[source]#
Gets a dictionary mapping boundary names to their grid thicknesses.
- Returns:
- Dictionary with keys ‘min_x’, ‘max_x’, ‘min_y’, ‘max_y’, ‘min_z’, ‘max_z’
mapping to their respective grid thickness values.
- Return type:
dict[str, int]
- BoundaryConfig.get_inside_boundary_slice()[source]#
Gets slice objects for the non-PML interior region of the simulation volume.
- Returns:
- Three slice objects for indexing the x, y, z dimensions
respectively, excluding the PML boundary regions.
- Return type:
tuple[slice, slice, slice]
- BoundaryConfig.get_kappa_dict(prop)[source]#
Gets a dictionary mapping boundary names to their kappa values.
- Parameters:
prop (Literal["kappa_start", "kappa_end"]) – Which kappa property to get, either “kappa_start” or “kappa_end”.
- Returns:
- Dictionary with keys ‘min_x’, ‘max_x’, ‘min_y’, ‘max_y’, ‘min_z’, ‘max_z’
mapping to their respective kappa values.
- Return type:
dict[str, float | None]
- Raises:
Exception – If prop is not “kappa_start” or “kappa_end”
- BoundaryConfig.get_order_dict(prop)[source]#
Gets a dictionary mapping boundary names to their polynomial order values.
- Parameters:
prop (Literal["sigma_order", "alpha_order", "kappa_order"]) – Which order property to get.
- Returns:
- Dictionary with keys ‘min_x’, ‘max_x’, ‘min_y’, ‘max_y’, ‘min_z’, ‘max_z’
mapping to their respective order values.
- Return type:
dict[str, float | None]
- Raises:
Exception – If prop is not one of the valid options
- BoundaryConfig.get_public_fields()#
- Return type:
list[TreeClassField]
- BoundaryConfig.get_sigma_dict(prop)[source]#
Gets a dictionary mapping boundary names to their sigma values.
- Parameters:
prop (Literal["sigma_start", "sigma_end"]) – Which sigma property to get, either “sigma_start” or “sigma_end”.
- Returns:
- Dictionary with keys ‘min_x’, ‘max_x’, ‘min_y’, ‘max_y’, ‘min_z’, ‘max_z’
mapping to their respective sigma values.
- Return type:
dict[str, float | None]
- Raises:
Exception – If prop is not “sigma_start” or “sigma_end”
- BoundaryConfig.get_type_dict()[source]#
Gets a dictionary mapping boundary names to their boundary types.
- Returns:
- Dictionary with keys ‘min_x’, ‘max_x’, ‘min_y’, ‘max_y’, ‘min_z’, ‘max_z’
mapping to their respective boundary types (“pml” or “periodic”).
- Return type:
dict[str, str]
If you find any errors in the documentation, please report them in the Github Issues!