tidy3d.Boundary
tidy3d.Boundary#
- class tidy3d.Boundary#
Boundary conditions at the minus and plus extents along a dimension
- Parameters
plus (Union[Periodic, PECBoundary, PMCBoundary, PML, StablePML, Absorber, BlochBoundary] = Periodic(name=None, type='Periodic')) – Boundary condition on the plus side along a dimension.
minus (Union[Periodic, PECBoundary, PMCBoundary, PML, StablePML, Absorber, BlochBoundary] = Periodic(name=None, type='Periodic')) – Boundary condition on the minus side along a dimension.
Example
>>> boundary = Boundary(plus = PML(), minus = PECBoundary())
Show JSON schema
{ "title": "Boundary", "description": "Boundary conditions at the minus and plus extents along a dimension\n\nParameters\n----------\nplus : Union[Periodic, PECBoundary, PMCBoundary, PML, StablePML, Absorber, BlochBoundary] = Periodic(name=None, type='Periodic')\n Boundary condition on the plus side along a dimension.\nminus : Union[Periodic, PECBoundary, PMCBoundary, PML, StablePML, Absorber, BlochBoundary] = Periodic(name=None, type='Periodic')\n Boundary condition on the minus side along a dimension.\n\nExample\n-------\n>>> boundary = Boundary(plus = PML(), minus = PECBoundary())", "type": "object", "properties": { "plus": { "title": "Plus BC", "description": "Boundary condition on the plus side along a dimension.", "default": { "name": null, "type": "Periodic" }, "discriminator": { "propertyName": "type", "mapping": { "Periodic": "#/definitions/Periodic", "PECBoundary": "#/definitions/PECBoundary", "PMCBoundary": "#/definitions/PMCBoundary", "PML": "#/definitions/PML", "StablePML": "#/definitions/StablePML", "Absorber": "#/definitions/Absorber", "BlochBoundary": "#/definitions/BlochBoundary" } }, "oneOf": [ { "$ref": "#/definitions/Periodic" }, { "$ref": "#/definitions/PECBoundary" }, { "$ref": "#/definitions/PMCBoundary" }, { "$ref": "#/definitions/PML" }, { "$ref": "#/definitions/StablePML" }, { "$ref": "#/definitions/Absorber" }, { "$ref": "#/definitions/BlochBoundary" } ] }, "minus": { "title": "Minus BC", "description": "Boundary condition on the minus side along a dimension.", "default": { "name": null, "type": "Periodic" }, "discriminator": { "propertyName": "type", "mapping": { "Periodic": "#/definitions/Periodic", "PECBoundary": "#/definitions/PECBoundary", "PMCBoundary": "#/definitions/PMCBoundary", "PML": "#/definitions/PML", "StablePML": "#/definitions/StablePML", "Absorber": "#/definitions/Absorber", "BlochBoundary": "#/definitions/BlochBoundary" } }, "oneOf": [ { "$ref": "#/definitions/Periodic" }, { "$ref": "#/definitions/PECBoundary" }, { "$ref": "#/definitions/PMCBoundary" }, { "$ref": "#/definitions/PML" }, { "$ref": "#/definitions/StablePML" }, { "$ref": "#/definitions/Absorber" }, { "$ref": "#/definitions/BlochBoundary" } ] }, "type": { "title": "Type", "default": "Boundary", "enum": [ "Boundary" ], "type": "string" } }, "additionalProperties": false, "definitions": { "Periodic": { "title": "Periodic", "description": "Periodic boundary condition class.\n\nParameters\n----------\nname : Optional[str] = None\n Optional unique name for boundary.", "type": "object", "properties": { "name": { "title": "Name", "description": "Optional unique name for boundary.", "type": "string" }, "type": { "title": "Type", "default": "Periodic", "enum": [ "Periodic" ], "type": "string" } }, "additionalProperties": false }, "PECBoundary": { "title": "PECBoundary", "description": "Perfect electric conductor boundary condition class.\n\nParameters\n----------\nname : Optional[str] = None\n Optional unique name for boundary.", "type": "object", "properties": { "name": { "title": "Name", "description": "Optional unique name for boundary.", "type": "string" }, "type": { "title": "Type", "default": "PECBoundary", "enum": [ "PECBoundary" ], "type": "string" } }, "additionalProperties": false }, "PMCBoundary": { "title": "PMCBoundary", "description": "Perfect magnetic conductor boundary condition class.\n\nParameters\n----------\nname : Optional[str] = None\n Optional unique name for boundary.", "type": "object", "properties": { "name": { "title": "Name", "description": "Optional unique name for boundary.", "type": "string" }, "type": { "title": "Type", "default": "PMCBoundary", "enum": [ "PMCBoundary" ], "type": "string" } }, "additionalProperties": false }, "PMLParams": { "title": "PMLParams", "description": "Specifies full set of parameters needed for complex, frequency-shifted PML.\n\nParameters\n----------\nsigma_order : NonNegativeInt = 3\n Order of the polynomial describing the absorber profile (~dist^sigma_order).\nsigma_min : NonNegativeFloat = 0.0\n [units = 2*EPSILON_0/dt]. Minimum value of the absorber conductivity.\nsigma_max : NonNegativeFloat = 1.5\n [units = 2*EPSILON_0/dt]. Maximum value of the absorber conductivity.\nkappa_order : NonNegativeInt = 3\n Order of the polynomial describing the PML kappa profile (kappa~dist^kappa_order).\nkappa_min : NonNegativeFloat = 0.0\n \nkappa_max : NonNegativeFloat = 1.5\n \nalpha_order : NonNegativeInt = 3\n Order of the polynomial describing the PML alpha profile (alpha~dist^alpha_order).\nalpha_min : NonNegativeFloat = 0.0\n [units = 2*EPSILON_0/dt]. Minimum value of the PML alpha.\nalpha_max : NonNegativeFloat = 1.5\n [units = 2*EPSILON_0/dt]. Maximum value of the PML alpha.\n\nExample\n-------\n>>> params = PMLParams(sigma_order=3, sigma_min=0.0, sigma_max=1.5, kappa_min=0.0)", "type": "object", "properties": { "sigma_order": { "title": "Sigma Order", "description": "Order of the polynomial describing the absorber profile (~dist^sigma_order).", "default": 3, "minimum": 0, "type": "integer" }, "sigma_min": { "title": "Sigma Minimum", "description": "Minimum value of the absorber conductivity.", "default": 0.0, "units": "2*EPSILON_0/dt", "minimum": 0, "type": "number" }, "sigma_max": { "title": "Sigma Maximum", "description": "Maximum value of the absorber conductivity.", "default": 1.5, "units": "2*EPSILON_0/dt", "minimum": 0, "type": "number" }, "type": { "title": "Type", "default": "PMLParams", "enum": [ "PMLParams" ], "type": "string" }, "kappa_order": { "title": "Kappa Order", "description": "Order of the polynomial describing the PML kappa profile (kappa~dist^kappa_order).", "default": 3, "minimum": 0, "type": "integer" }, "kappa_min": { "title": "Kappa Minimum", "default": 0.0, "minimum": 0, "type": "number" }, "kappa_max": { "title": "Kappa Maximum", "default": 1.5, "minimum": 0, "type": "number" }, "alpha_order": { "title": "Alpha Order", "description": "Order of the polynomial describing the PML alpha profile (alpha~dist^alpha_order).", "default": 3, "minimum": 0, "type": "integer" }, "alpha_min": { "title": "Alpha Minimum", "description": "Minimum value of the PML alpha.", "default": 0.0, "units": "2*EPSILON_0/dt", "minimum": 0, "type": "number" }, "alpha_max": { "title": "Alpha Maximum", "description": "Maximum value of the PML alpha.", "default": 1.5, "units": "2*EPSILON_0/dt", "minimum": 0, "type": "number" } }, "additionalProperties": false }, "PML": { "title": "PML", "description": "Specifies a standard PML along a single dimension.\n\nParameters\n----------\nname : Optional[str] = None\n Optional unique name for boundary.\nnum_layers : NonNegativeInt = 12\n Number of layers of standard PML.\nparameters : PMLParams = PMLParams(sigma_order=3, sigma_min=0.0, sigma_max=1.5, type='PMLParams', kappa_order=3, kappa_min=1.0, kappa_max=3.0, alpha_order=1, alpha_min=0.0, alpha_max=0.0)\n Parameters of the complex frequency-shifted absorption poles.\n\nExample\n-------\n>>> pml = PML(num_layers=10)", "type": "object", "properties": { "name": { "title": "Name", "description": "Optional unique name for boundary.", "type": "string" }, "type": { "title": "Type", "default": "PML", "enum": [ "PML" ], "type": "string" }, "num_layers": { "title": "Number of Layers", "description": "Number of layers of standard PML.", "default": 12, "minimum": 0, "type": "integer" }, "parameters": { "title": "PML Parameters", "description": "Parameters of the complex frequency-shifted absorption poles.", "default": { "sigma_order": 3, "sigma_min": 0.0, "sigma_max": 1.5, "type": "PMLParams", "kappa_order": 3, "kappa_min": 1.0, "kappa_max": 3.0, "alpha_order": 1, "alpha_min": 0.0, "alpha_max": 0.0 }, "allOf": [ { "$ref": "#/definitions/PMLParams" } ] } }, "additionalProperties": false }, "StablePML": { "title": "StablePML", "description": "Specifies a 'stable' PML along a single dimension.\nThis PML deals handles possbly divergent simulations better, but at the expense of more layers.\n\nParameters\n----------\nname : Optional[str] = None\n Optional unique name for boundary.\nnum_layers : NonNegativeInt = 40\n Number of layers of 'stable' PML.\nparameters : PMLParams = PMLParams(sigma_order=3, sigma_min=0.0, sigma_max=1.0, type='PMLParams', kappa_order=3, kappa_min=1.0, kappa_max=5.0, alpha_order=1, alpha_min=0.0, alpha_max=0.9)\n 'Stable' parameters of the complex frequency-shifted absorption poles.\n\nExample\n-------\n>>> pml = StablePML(num_layers=40)", "type": "object", "properties": { "name": { "title": "Name", "description": "Optional unique name for boundary.", "type": "string" }, "type": { "title": "Type", "default": "StablePML", "enum": [ "StablePML" ], "type": "string" }, "num_layers": { "title": "Number of Layers", "description": "Number of layers of 'stable' PML.", "default": 40, "minimum": 0, "type": "integer" }, "parameters": { "title": "Stable PML Parameters", "description": "'Stable' parameters of the complex frequency-shifted absorption poles.", "default": { "sigma_order": 3, "sigma_min": 0.0, "sigma_max": 1.0, "type": "PMLParams", "kappa_order": 3, "kappa_min": 1.0, "kappa_max": 5.0, "alpha_order": 1, "alpha_min": 0.0, "alpha_max": 0.9 }, "allOf": [ { "$ref": "#/definitions/PMLParams" } ] } }, "additionalProperties": false }, "AbsorberParams": { "title": "AbsorberParams", "description": "Specifies parameters common to Absorbers and PMLs.\n\nParameters\n----------\nsigma_order : NonNegativeInt = 3\n Order of the polynomial describing the absorber profile (~dist^sigma_order).\nsigma_min : NonNegativeFloat = 0.0\n [units = 2*EPSILON_0/dt]. Minimum value of the absorber conductivity.\nsigma_max : NonNegativeFloat = 1.5\n [units = 2*EPSILON_0/dt]. Maximum value of the absorber conductivity.\n\nExample\n-------\n>>> params = AbsorberParams(sigma_order=3, sigma_min=0.0, sigma_max=1.5)", "type": "object", "properties": { "sigma_order": { "title": "Sigma Order", "description": "Order of the polynomial describing the absorber profile (~dist^sigma_order).", "default": 3, "minimum": 0, "type": "integer" }, "sigma_min": { "title": "Sigma Minimum", "description": "Minimum value of the absorber conductivity.", "default": 0.0, "units": "2*EPSILON_0/dt", "minimum": 0, "type": "number" }, "sigma_max": { "title": "Sigma Maximum", "description": "Maximum value of the absorber conductivity.", "default": 1.5, "units": "2*EPSILON_0/dt", "minimum": 0, "type": "number" }, "type": { "title": "Type", "default": "AbsorberParams", "enum": [ "AbsorberParams" ], "type": "string" } }, "additionalProperties": false }, "Absorber": { "title": "Absorber", "description": "Specifies an adiabatic absorber along a single dimension.\nThis absorber is well-suited for dispersive materials\nintersecting with absorbing edges of the simulation at the expense of more layers.\n\nParameters\n----------\nname : Optional[str] = None\n Optional unique name for boundary.\nnum_layers : NonNegativeInt = 40\n Number of layers of absorber to add to + and - boundaries.\nparameters : AbsorberParams = AbsorberParams(sigma_order=3, sigma_min=0.0, sigma_max=6.4, type='AbsorberParams')\n Adiabatic absorber parameters.\n\nExample\n-------\n>>> pml = Absorber(num_layers=40)", "type": "object", "properties": { "name": { "title": "Name", "description": "Optional unique name for boundary.", "type": "string" }, "type": { "title": "Type", "default": "Absorber", "enum": [ "Absorber" ], "type": "string" }, "num_layers": { "title": "Number of Layers", "description": "Number of layers of absorber to add to + and - boundaries.", "default": 40, "minimum": 0, "type": "integer" }, "parameters": { "title": "Absorber Parameters", "description": "Adiabatic absorber parameters.", "default": { "sigma_order": 3, "sigma_min": 0.0, "sigma_max": 6.4, "type": "AbsorberParams" }, "allOf": [ { "$ref": "#/definitions/AbsorberParams" } ] } }, "additionalProperties": false }, "BlochBoundary": { "title": "BlochBoundary", "description": "Specifies a Bloch boundary condition along a single dimension.\n\nParameters\n----------\nname : Optional[str] = None\n Optional unique name for boundary.\nbloch_vec : float\n Normalized component of the Bloch vector in units of 2 * pi / (size along dimension) in the background medium, along the dimension in which the boundary is specified.\n\nExample\n-------\n>>> bloch = BlochBoundary(bloch_vec=1)", "type": "object", "properties": { "name": { "title": "Name", "description": "Optional unique name for boundary.", "type": "string" }, "type": { "title": "Type", "default": "BlochBoundary", "enum": [ "BlochBoundary" ], "type": "string" }, "bloch_vec": { "title": "Normalized Bloch vector component", "description": "Normalized component of the Bloch vector in units of 2 * pi / (size along dimension) in the background medium, along the dimension in which the boundary is specified.", "type": "number" } }, "required": [ "bloch_vec" ], "additionalProperties": false } } }
- attribute minus: Union[tidy3d.components.boundary.Periodic, tidy3d.components.boundary.PECBoundary, tidy3d.components.boundary.PMCBoundary, tidy3d.components.boundary.PML, tidy3d.components.boundary.StablePML, tidy3d.components.boundary.Absorber, tidy3d.components.boundary.BlochBoundary] = Periodic(name=None, type='Periodic')#
Boundary condition on the minus side along a dimension.
- Validated by
_deprecation_2_0_missing_defaults
bloch_on_both_sides
periodic_with_pec_pmc
periodic_with_pml
- attribute plus: Union[tidy3d.components.boundary.Periodic, tidy3d.components.boundary.PECBoundary, tidy3d.components.boundary.PMCBoundary, tidy3d.components.boundary.PML, tidy3d.components.boundary.StablePML, tidy3d.components.boundary.Absorber, tidy3d.components.boundary.BlochBoundary] = Periodic(name=None, type='Periodic')#
Boundary condition on the plus side along a dimension.
- Validated by
_deprecation_2_0_missing_defaults
bloch_on_both_sides
periodic_with_pec_pmc
periodic_with_pml
- classmethod absorber(num_layers: pydantic.types.NonNegativeInt = 40, parameters: tidy3d.components.boundary.PMLParams = AbsorberParams(sigma_order=3, sigma_min=0.0, sigma_max=6.4, type='AbsorberParams'))#
Adiabatic absorber boundary specification on both sides along a dimension.
- Parameters
num_layers (int = 40) – Number of layers of absorber to add to + and - boundaries.
parameters (
PMLParams
) – Adiabatic absorber parameters.
Example
>>> absorber = Boundary.absorber(num_layers=40)
- classmethod bloch(bloch_vec: complex)#
Bloch boundary specification on both sides along a dimension.
- Parameters
bloch_vec (complex) – Normalized component of the Bloch vector in units of 2 * pi / (size along dimension) in the background medium, along the dimension in which the boundary is specified.
Example
>>> bloch = Boundary.bloch(bloch_vec=1)
- classmethod bloch_from_source(source: Union[tidy3d.components.source.GaussianBeam, tidy3d.components.source.ModeSource, tidy3d.components.source.PlaneWave], domain_size: float, axis: Literal[0, 1, 2], medium: Optional[tidy3d.components.medium.Medium] = None)#
Bloch boundary specification on both sides along a dimension based on a given source.
- Parameters
source (Union[
GaussianBeam
,ModeSource
,PlaneWave
]) – Angled source.domain_size (float) – Size of the domain in the direction normal to the Bloch boundary
axis (int) – Axis normal to the Bloch boundary
medium (
Medium
) – Background medium associated with the Bloch vector. Default: free space.
Example
>>> from tidy3d import GaussianPulse, PlaneWave, inf >>> pulse = GaussianPulse(freq0=200e12, fwidth=20e12) >>> pw_source = PlaneWave( ... size=(inf,inf,0), source_time=pulse, direction='+', angle_theta=1.5, angle_phi=0.3) >>> bloch = Boundary.bloch_from_source(source=pw_source, domain_size=5, axis=0)
- classmethod pec()#
PEC boundary specification on both sides along a dimension.
Example
>>> pec = Boundary.pec()
- classmethod periodic()#
Periodic boundary specification on both sides along a dimension.
Example
>>> pbc = Boundary.periodic()
- classmethod pmc()#
PMC boundary specification on both sides along a dimension.
Example
>>> pmc = Boundary.pmc()
- classmethod pml(num_layers: pydantic.types.NonNegativeInt = 12, parameters: tidy3d.components.boundary.PMLParams = PMLParams(sigma_order=3, sigma_min=0.0, sigma_max=1.5, type='PMLParams', kappa_order=3, kappa_min=1.0, kappa_max=3.0, alpha_order=1, alpha_min=0.0, alpha_max=0.0))#
PML boundary specification on both sides along a dimension.
- Parameters
num_layers (int = 12) – Number of layers of standard PML to add to + and - boundaries.
parameters (
PMLParams
) – Parameters of the complex frequency-shifted absorption poles.
Example
>>> pml = Boundary.pml(num_layers=20)
- classmethod stable_pml(num_layers: pydantic.types.NonNegativeInt = 40, parameters: tidy3d.components.boundary.PMLParams = PMLParams(sigma_order=3, sigma_min=0.0, sigma_max=1.0, type='PMLParams', kappa_order=3, kappa_min=1.0, kappa_max=5.0, alpha_order=1, alpha_min=0.0, alpha_max=0.9))#
Stable PML boundary specification on both sides along a dimension.
- Parameters
num_layers (int = 40) – Number of layers of ‘stable’ PML to add to + and - boundaries.
parameters (
PMLParams
) – ‘Stable’ parameters of the complex frequency-shifted absorption poles.
Example
>>> stable_pml = Boundary.stable_pml(num_layers=40)