tidy3d.BoundarySpec#

class tidy3d.BoundarySpec#

Specifies boundary conditions on each side of the domain and along each dimension.

Parameters
  • x (Boundary = Boundary(plus=Periodic(name=None,, type='Periodic'), minus=Periodic(name=None,, type='Periodic'), type='Boundary')) – Boundary condition on the plus and minus sides along the x axis.

  • y (Boundary = Boundary(plus=Periodic(name=None,, type='Periodic'), minus=Periodic(name=None,, type='Periodic'), type='Boundary')) – Boundary condition on the plus and minus sides along the y axis.

  • z (Boundary = Boundary(plus=Periodic(name=None,, type='Periodic'), minus=Periodic(name=None,, type='Periodic'), type='Boundary')) – Boundary condition on the plus and minus sides along the z axis.

Show JSON schema
{
   "title": "BoundarySpec",
   "description": "Specifies boundary conditions on each side of the domain and along each dimension.\n\nParameters\n----------\nx : Boundary = Boundary(plus=Periodic(name=None,, type='Periodic'), minus=Periodic(name=None,, type='Periodic'), type='Boundary')\n    Boundary condition on the plus and minus sides along the x axis.\ny : Boundary = Boundary(plus=Periodic(name=None,, type='Periodic'), minus=Periodic(name=None,, type='Periodic'), type='Boundary')\n    Boundary condition on the plus and minus sides along the y axis.\nz : Boundary = Boundary(plus=Periodic(name=None,, type='Periodic'), minus=Periodic(name=None,, type='Periodic'), type='Boundary')\n    Boundary condition on the plus and minus sides along the z axis.",
   "type": "object",
   "properties": {
      "x": {
         "title": "Boundary condition along x.",
         "description": "Boundary condition on the plus and minus sides along the x axis.",
         "default": {
            "plus": {
               "name": null,
               "type": "Periodic"
            },
            "minus": {
               "name": null,
               "type": "Periodic"
            },
            "type": "Boundary"
         },
         "allOf": [
            {
               "$ref": "#/definitions/Boundary"
            }
         ]
      },
      "y": {
         "title": "Boundary condition along y.",
         "description": "Boundary condition on the plus and minus sides along the y axis.",
         "default": {
            "plus": {
               "name": null,
               "type": "Periodic"
            },
            "minus": {
               "name": null,
               "type": "Periodic"
            },
            "type": "Boundary"
         },
         "allOf": [
            {
               "$ref": "#/definitions/Boundary"
            }
         ]
      },
      "z": {
         "title": "Boundary condition along z.",
         "description": "Boundary condition on the plus and minus sides along the z axis.",
         "default": {
            "plus": {
               "name": null,
               "type": "Periodic"
            },
            "minus": {
               "name": null,
               "type": "Periodic"
            },
            "type": "Boundary"
         },
         "allOf": [
            {
               "$ref": "#/definitions/Boundary"
            }
         ]
      },
      "type": {
         "title": "Type",
         "default": "BoundarySpec",
         "enum": [
            "BoundarySpec"
         ],
         "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
      },
      "ComplexNumber": {
         "title": "ComplexNumber",
         "description": "Complex number with a well defined schema.",
         "type": "object",
         "properties": {
            "real": {
               "title": "Real",
               "type": "number"
            },
            "imag": {
               "title": "Imag",
               "type": "number"
            }
         },
         "required": [
            "real",
            "imag"
         ]
      },
      "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 : Union[tidycomplex, ComplexNumber] = None\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.",
               "anyOf": [
                  {
                     "title": "ComplexNumber",
                     "description": "Complex number with a well defined schema.",
                     "type": "object",
                     "properties": {
                        "real": {
                           "title": "Real",
                           "type": "number"
                        },
                        "imag": {
                           "title": "Imag",
                           "type": "number"
                        }
                     },
                     "required": [
                        "real",
                        "imag"
                     ]
                  },
                  {
                     "$ref": "#/definitions/ComplexNumber"
                  }
               ]
            }
         },
         "required": [
            "bloch_vec"
         ],
         "additionalProperties": false
      },
      "Boundary": {
         "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"
               },
               "anyOf": [
                  {
                     "$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"
               },
               "anyOf": [
                  {
                     "$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
      }
   }
}

Fields
  • x (tidy3d.components.boundary.Boundary)

  • y (tidy3d.components.boundary.Boundary)

  • z (tidy3d.components.boundary.Boundary)

attribute x: tidy3d.components.boundary.Boundary = Boundary(plus=Periodic(name=None, type='Periodic'), minus=Periodic(name=None, type='Periodic'), type='Boundary')#

Boundary condition on the plus and minus sides along the x axis.

attribute y: tidy3d.components.boundary.Boundary = Boundary(plus=Periodic(name=None, type='Periodic'), minus=Periodic(name=None, type='Periodic'), type='Boundary')#

Boundary condition on the plus and minus sides along the y axis.

attribute z: tidy3d.components.boundary.Boundary = Boundary(plus=Periodic(name=None, type='Periodic'), minus=Periodic(name=None, type='Periodic'), type='Boundary')#

Boundary condition on the plus and minus sides along the z axis.

classmethod all_sides(boundary: tidy3d.components.boundary.BoundaryEdge)#

Set a given boundary condition on all six sides of the domain

Parameters

boundary (BoundaryEdge) – Boundary condition to apply on all six sides of the domain.

Example

boundaries = BoundarySpec.all_sides(boundary=PML())

classmethod pec(x: bool = False, y: bool = False, z: bool = False)#

PEC along specified directions

Parameters
  • x (bool = False) – Toggle whether to set a PEC condition on both plus and minus sides along the x axis.

  • y (bool = False) – Toggle whether to set a PEC condition on both plus and minus sides along the y axis.

  • z (bool = False) – Toggle whether to set a PEC condition on both plus and minus sides along the z axis.

Example

boundaries = BoundarySpec.pec(x=True, z=True)

classmethod pmc(x: bool = False, y: bool = False, z: bool = False)#

PMC along specified directions

Parameters
  • x (bool = False) – Toggle whether to set a PMC condition on both plus and minus sides along the x axis.

  • y (bool = False) – Toggle whether to set a PMC condition on both plus and minus sides along the y axis.

  • z (bool = False) – Toggle whether to set a PMC condition on both plus and minus sides along the z axis.

Example

boundaries = BoundarySpec.pmc(x=True, z=True)

classmethod pml(x: bool = False, y: bool = False, z: bool = False)#

Default PML along specified directions

Parameters
  • x (bool = False) – Toggle whether to set a default PML on both plus and minus sides along the x axis.

  • y (bool = False) – Toggle whether to set a default PML on both plus and minus sides along the y axis.

  • z (bool = False) – Toggle whether to set a default PML on both plus and minus sides along the z axis.

Example

boundaries = BoundarySpec.pml(y=True)

property to_list: List[Tuple[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], 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]]]#

Returns edge-wise boundary conditions along each dimension for internal use.