From 042d74df4f1a091e5c13e98801796b78327ba4c3 Mon Sep 17 00:00:00 2001 From: momchil Date: Wed, 30 Oct 2024 12:17:44 +0100 Subject: [PATCH] Updates for 2.7.6 --- CHANGELOG.md | 5 +++- docs/notebooks | 2 +- tests/sims/simulation_sample.h5 | Bin 464032 -> 465224 bytes tests/sims/simulation_sample.json | 38 +++++++++++++++++++++++++++++- tidy3d/schema.json | 22 +++++++++++++---- 5 files changed, 59 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00482b47e..4b173d795 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.7.6] - 2024-10-30 + ### Added - Users can pass the `shading` argument in the `SimulationData.plot_field` to `Xarray.plot` method. When `shading='gouraud'`, the image is interpolated, producing a smoother visualization. - Users can manually specify the background medium for a structure to be used for geometry gradient calculations by supplying `Structure.background_permittivity`. This is useful when there are overlapping structures or structures embedded in other mediums. @@ -1355,7 +1357,8 @@ which fields are to be projected is now determined automatically based on the me - Job and Batch classes for better simulation handling (eventually to fully replace webapi functions). - A large number of small improvements and bug fixes. -[Unreleased]: https://github.com/flexcompute/tidy3d/compare/v2.7.5...develop +[Unreleased]: https://github.com/flexcompute/tidy3d/compare/v2.7.6...develop +[2.7.6]: https://github.com/flexcompute/tidy3d/compare/v2.7.5...v2.7.6 [2.7.5]: https://github.com/flexcompute/tidy3d/compare/v2.7.4...v2.7.5 [2.7.4]: https://github.com/flexcompute/tidy3d/compare/v2.7.3...v2.7.4 [2.7.3]: https://github.com/flexcompute/tidy3d/compare/v2.7.2...v2.7.3 diff --git a/docs/notebooks b/docs/notebooks index 86b0310c5..3ad84c09b 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit 86b0310c55af92be71c04d7e2c6865d1090c3534 +Subproject commit 3ad84c09bfa80ceb3cb4cdf894472430acf2a1fb diff --git a/tests/sims/simulation_sample.h5 b/tests/sims/simulation_sample.h5 index 8fef253cb4198bce67caf45ad6bfadea7f36ef94..25142049c4e0312561189c4fad122ee0da02a938 100644 GIT binary patch delta 18397 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 YQWe5Xn+u%yq7?bBSa76P1jk4IKac`=9RL6T delta 17680 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 diff --git a/tests/sims/simulation_sample.json b/tests/sims/simulation_sample.json index 1444999d5..2154786a3 100644 --- a/tests/sims/simulation_sample.json +++ b/tests/sims/simulation_sample.json @@ -41,6 +41,7 @@ "length": 1.0 }, "name": "traced_dieletric_cylinder", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -72,6 +73,7 @@ ] }, "name": "traced_dieletric_box", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -115,6 +117,7 @@ ] }, "name": "traced custom polyslab", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -149,6 +152,7 @@ ] }, "name": "dieletric_box", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -180,6 +184,7 @@ ] }, "name": "lossy_box", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -207,6 +212,7 @@ ] }, "name": "sellmeier_sphere", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -246,6 +252,7 @@ ] }, "name": "lorentz_box", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -283,6 +290,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -314,6 +322,7 @@ } }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -350,6 +359,7 @@ ] }, "name": "drude_box", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -386,6 +396,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -461,6 +472,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -510,6 +522,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -579,6 +592,7 @@ ] }, "name": "pec_group", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -608,6 +622,7 @@ "length": 2.0 }, "name": "anisotopic_cylinder", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -685,6 +700,7 @@ ] }, "name": "pole_slab", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -727,6 +743,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -761,6 +778,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -799,6 +817,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -838,6 +857,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -876,6 +896,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -914,6 +935,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -951,6 +973,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -991,6 +1014,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -1047,6 +1071,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -1110,6 +1135,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -1166,6 +1192,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -1222,6 +1249,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -1271,6 +1299,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -1307,6 +1336,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -1384,6 +1414,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -1421,6 +1452,7 @@ } }, "name": "dieletric_mesh", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -1462,6 +1494,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -1512,6 +1545,7 @@ } }, "name": "clip_operation", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -1573,6 +1607,7 @@ ] }, "name": "transformed_box", + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -2807,6 +2842,7 @@ ] }, "name": null, + "background_permittivity": null, "type": "Structure", "medium": { "attrs": {}, @@ -2825,7 +2861,7 @@ "snapping_points": [], "type": "GridSpec" }, - "version": "2.7.5", + "version": "2.7.6", "lumped_elements": [], "subpixel": false, "simulation_type": null, diff --git a/tidy3d/schema.json b/tidy3d/schema.json index ddfba8d0d..5da498676 100644 --- a/tidy3d/schema.json +++ b/tidy3d/schema.json @@ -1,6 +1,6 @@ { "title": "Simulation", - "description": "Custom implementation of Maxwell\u2019s equations which represents the physical model to be solved using the FDTD\nmethod.\n\nParameters\n----------\nattrs : dict = {}\n Dictionary storing arbitrary metadata for a Tidy3D object. This dictionary can be freely used by the user for storing data without affecting the operation of Tidy3D as it is not used internally. Note that, unlike regular Tidy3D fields, ``attrs`` are mutable. For example, the following is allowed for setting an ``attr`` ``obj.attrs['foo'] = bar``. Also note that `Tidy3D`` will raise a ``TypeError`` if ``attrs`` contain objects that can not be serialized. One can check if ``attrs`` are serializable by calling ``obj.json()``.\ncenter : Union[tuple[Union[float, autograd.tracer.Box], Union[float, autograd.tracer.Box], Union[float, autograd.tracer.Box]], Box] = (0.0, 0.0, 0.0)\n [units = um]. Center of object in x, y, and z.\nsize : Union[tuple[Union[pydantic.v1.types.NonNegativeFloat, autograd.tracer.Box], Union[pydantic.v1.types.NonNegativeFloat, autograd.tracer.Box], Union[pydantic.v1.types.NonNegativeFloat, autograd.tracer.Box]], Box]\n [units = um]. Size in x, y, and z directions.\nmedium : Union[Medium, AnisotropicMedium, PECMedium, PoleResidue, Sellmeier, Lorentz, Debye, Drude, FullyAnisotropicMedium, CustomMedium, CustomPoleResidue, CustomSellmeier, CustomLorentz, CustomDebye, CustomDrude, CustomAnisotropicMedium, PerturbationMedium, PerturbationPoleResidue] = Medium(attrs={}, name=None, frequency_range=None, allow_gain=False, nonlinear_spec=None, modulation_spec=None, heat_spec=None, type='Medium', permittivity=1.0, conductivity=0.0)\n Background medium of simulation, defaults to vacuum if not specified.\nstructures : Tuple[Structure, ...] = ()\n Tuple of structures present in simulation. Note: Structures defined later in this list override the simulation material properties in regions of spatial overlap.\nsymmetry : Tuple[Literal[0, -1, 1], Literal[0, -1, 1], Literal[0, -1, 1]] = (0, 0, 0)\n Tuple of integers defining reflection symmetry across a plane bisecting the simulation domain normal to the x-, y-, and z-axis at the simulation center of each axis, respectively. Each element can be ``0`` (no symmetry), ``1`` (even, i.e. 'PMC' symmetry) or ``-1`` (odd, i.e. 'PEC' symmetry). Note that the vectorial nature of the fields must be taken into account to correctly determine the symmetry value.\nsources : Tuple[Annotated[Union[tidy3d.components.source.UniformCurrentSource, tidy3d.components.source.PointDipole, tidy3d.components.source.GaussianBeam, tidy3d.components.source.AstigmaticGaussianBeam, tidy3d.components.source.ModeSource, tidy3d.components.source.PlaneWave, tidy3d.components.source.CustomFieldSource, tidy3d.components.source.CustomCurrentSource, tidy3d.components.source.TFSF], FieldInfo(default=PydanticUndefined, discriminator='type', extra={})], ...] = ()\n Tuple of electric current sources injecting fields into the simulation.\nboundary_spec : BoundarySpec = BoundarySpec(attrs={}, x=Boundary(attrs={},, plus=PML(attrs={},, name=None,, type='PML',, num_layers=12,, parameters=PMLParams(attrs={},, 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)),, minus=PML(attrs={},, name=None,, type='PML',, num_layers=12,, parameters=PMLParams(attrs={},, 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)),, type='Boundary'), y=Boundary(attrs={},, plus=PML(attrs={},, name=None,, type='PML',, num_layers=12,, parameters=PMLParams(attrs={},, 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)),, minus=PML(attrs={},, name=None,, type='PML',, num_layers=12,, parameters=PMLParams(attrs={},, 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)),, type='Boundary'), z=Boundary(attrs={},, plus=PML(attrs={},, name=None,, type='PML',, num_layers=12,, parameters=PMLParams(attrs={},, 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)),, minus=PML(attrs={},, name=None,, type='PML',, num_layers=12,, parameters=PMLParams(attrs={},, 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)),, type='Boundary'), type='BoundarySpec')\n Specification of boundary conditions along each dimension. If ``None``, PML boundary conditions are applied on all sides.\nmonitors : Tuple[Annotated[Union[tidy3d.components.monitor.FieldMonitor, tidy3d.components.monitor.FieldTimeMonitor, tidy3d.components.monitor.PermittivityMonitor, tidy3d.components.monitor.FluxMonitor, tidy3d.components.monitor.FluxTimeMonitor, tidy3d.components.monitor.ModeMonitor, tidy3d.components.monitor.ModeSolverMonitor, tidy3d.components.monitor.FieldProjectionAngleMonitor, tidy3d.components.monitor.FieldProjectionCartesianMonitor, tidy3d.components.monitor.FieldProjectionKSpaceMonitor, tidy3d.components.monitor.DiffractionMonitor], FieldInfo(default=PydanticUndefined, discriminator='type', extra={})], ...] = ()\n Tuple of monitors in the simulation. Note: monitor names are used to access data after simulation is run.\ngrid_spec : GridSpec = GridSpec(attrs={}, grid_x=AutoGrid(attrs={},, type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(attrs={},, type='GradedMesher')), grid_y=AutoGrid(attrs={},, type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(attrs={},, type='GradedMesher')), grid_z=AutoGrid(attrs={},, type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(attrs={},, type='GradedMesher')), wavelength=None, override_structures=(), snapping_points=(), type='GridSpec')\n Specifications for the simulation grid along each of the three directions.\nversion : str = 2.7.5\n String specifying the front end version number.\nlumped_elements : Tuple[Union[LumpedResistor, CoaxialLumpedResistor], ...] = ()\n Tuple of lumped elements in the simulation. Note: only :class:`tidy3d.LumpedResistor` is supported currently.\nsubpixel : Union[bool, SubpixelSpec] = SubpixelSpec(attrs={}, dielectric=PolarizedAveraging(attrs={},, type='PolarizedAveraging'), metal=Staircasing(attrs={},, type='Staircasing'), pec=PECConformal(attrs={},, type='PECConformal',, timestep_reduction=0.3), type='SubpixelSpec')\n Apply subpixel averaging methods of the permittivity on structure interfaces to result in much higher accuracy for a given grid size. Supply a :class:`SubpixelSpec` to this field to select subpixel averaging methods separately on dielectric, metal, and PEC material interfaces. Alternatively, user may supply a boolean value: ``True`` to apply the default subpixel averaging methods corresponding to ``SubpixelSpec()`` , or ``False`` to apply staircasing.\nsimulation_type : Optional[Literal['autograd_fwd', 'autograd_bwd', None]] = None\n Tag used internally to distinguish types of simulations for ``autograd`` gradient processing.\npost_norm : Union[float, FreqDataArray] = 1.0\n Factor to multiply the fields by after running, given the adjoint source pipeline used. Note: this is used internally only.\ncourant : ConstrainedFloatValue = 0.99\n Normalized Courant stability factor that is no larger than 1 when CFL stability condition is met. It controls time step to spatial step ratio. Lower values lead to more stable simulations for dispersive materials, but result in longer simulation times.\nnormalize_index : Optional[NonNegativeInt] = 0\n Index of the source in the tuple of sources whose spectrum will be used to normalize the frequency-dependent data. If ``None``, the raw field data is returned unnormalized.\nshutoff : NonNegativeFloat = 1e-05\n Ratio of the instantaneous integrated E-field intensity to the maximum value at which the simulation will automatically terminate time stepping. Used to prevent extraneous run time of simulations with fully decayed fields. Set to ``0`` to disable this feature.\nrun_time : Union[PositiveFloat, RunTimeSpec]\n [units = sec]. Total electromagnetic evolution time in seconds. Note: If simulation 'shutoff' is specified, simulation will terminate early when shutoff condition met. Alternatively, user may supply a :class:`RunTimeSpec` to this field, which will auto-compute the ``run_time`` based on the contents of the spec. If this option is used, the evaluated ``run_time`` value is available in the ``Simulation._run_time`` property.\n\nNotes\n-----\n\n A ``Simulation`` defines a custom implementation of Maxwell's equations which represents the physical model\n to be solved using `the Finite-Difference Time-Domain (FDTD) method\n `_. ``tidy3d`` simulations\n run very quickly in the cloud through GPU parallelization.\n\n .. image:: ../../_static/img/field_update_fdtd.png\n :width: 50%\n :align: left\n\n FDTD is a method for simulating the interaction of electromagnetic waves with structures and materials. It is\n the most widely used method in photonics design. The Maxwell's\n equations implemented in the ``Simulation`` are solved per time-step in the order shown in this image.\n\n The simplified input to FDTD solver consists of the permittivity distribution defined by :attr:`structures`\n which describe the device and :attr:`sources` of electromagnetic excitation. This information is used to\n computate the time dynamics of the electric and magnetic fields in this system. From these time-domain\n results, frequency-domain information of the simulation can also be extracted, and used for device design and\n optimization.\n\n If you are new to the FDTD method, we recommend you get started with the `FDTD 101 Lecture Series\n `_\n\n **Dimensions Selection**\n\n By default, simulations are defined as 3D. To make the simulation 2D, we can just set the simulation\n :attr:`size` in one of the dimensions to be 0. However, note that we still have to define a grid size (eg.\n ``tidy3d.Simulation(size=[size_x, size_y, 0])``) and specify a periodic boundary condition in that direction.\n\n .. TODO sort out inheritance problem https://aware-moon.cloudvent.net/tidy3d/examples/notebooks/RingResonator/\n\n See further parameter explanations below.\n\nExample\n-------\n>>> from tidy3d import Sphere, Cylinder, PolySlab\n>>> from tidy3d import UniformCurrentSource, GaussianPulse\n>>> from tidy3d import FieldMonitor, FluxMonitor\n>>> from tidy3d import GridSpec, AutoGrid\n>>> from tidy3d import BoundarySpec, Boundary\n>>> from tidy3d import Medium\n>>> sim = Simulation(\n... size=(3.0, 3.0, 3.0),\n... grid_spec=GridSpec(\n... grid_x = AutoGrid(min_steps_per_wvl = 20),\n... grid_y = AutoGrid(min_steps_per_wvl = 20),\n... grid_z = AutoGrid(min_steps_per_wvl = 20)\n... ),\n... run_time=40e-11,\n... structures=[\n... Structure(\n... geometry=Box(size=(1, 1, 1), center=(0, 0, 0)),\n... medium=Medium(permittivity=2.0),\n... ),\n... ],\n... sources=[\n... UniformCurrentSource(\n... size=(0, 0, 0),\n... center=(0, 0.5, 0),\n... polarization=\"Hx\",\n... source_time=GaussianPulse(\n... freq0=2e14,\n... fwidth=4e13,\n... ),\n... )\n... ],\n... monitors=[\n... FluxMonitor(size=(1, 1, 0), center=(0, 0, 0), freqs=[2e14, 2.5e14], name='flux'),\n... ],\n... symmetry=(0, 0, 0),\n... boundary_spec=BoundarySpec(\n... x = Boundary.pml(num_layers=20),\n... y = Boundary.pml(num_layers=30),\n... z = Boundary.periodic(),\n... ),\n... shutoff=1e-6,\n... courant=0.8,\n... subpixel=False,\n... )\n\nSee Also\n--------\n\n**Notebooks:**\n * `Quickstart <../../notebooks/StartHere.html>`_: Usage in a basic simulation flow.\n * `Using automatic nonuniform meshing <../../notebooks/AutoGrid.html>`_\n * See nearly all notebooks for :class:`Simulation` applications.\n\n**Lectures:**\n * `Introduction to FDTD Simulation `_: Usage in a basic simulation flow.\n * `Prelude to Integrated Photonics Simulation: Mode Injection `_\n\n**GUI:**\n * `FDTD Walkthrough `_", + "description": "Custom implementation of Maxwell\u2019s equations which represents the physical model to be solved using the FDTD\nmethod.\n\nParameters\n----------\nattrs : dict = {}\n Dictionary storing arbitrary metadata for a Tidy3D object. This dictionary can be freely used by the user for storing data without affecting the operation of Tidy3D as it is not used internally. Note that, unlike regular Tidy3D fields, ``attrs`` are mutable. For example, the following is allowed for setting an ``attr`` ``obj.attrs['foo'] = bar``. Also note that `Tidy3D`` will raise a ``TypeError`` if ``attrs`` contain objects that can not be serialized. One can check if ``attrs`` are serializable by calling ``obj.json()``.\ncenter : Union[tuple[Union[float, autograd.tracer.Box], Union[float, autograd.tracer.Box], Union[float, autograd.tracer.Box]], Box] = (0.0, 0.0, 0.0)\n [units = um]. Center of object in x, y, and z.\nsize : Union[tuple[Union[pydantic.v1.types.NonNegativeFloat, autograd.tracer.Box], Union[pydantic.v1.types.NonNegativeFloat, autograd.tracer.Box], Union[pydantic.v1.types.NonNegativeFloat, autograd.tracer.Box]], Box]\n [units = um]. Size in x, y, and z directions.\nmedium : Union[Medium, AnisotropicMedium, PECMedium, PoleResidue, Sellmeier, Lorentz, Debye, Drude, FullyAnisotropicMedium, CustomMedium, CustomPoleResidue, CustomSellmeier, CustomLorentz, CustomDebye, CustomDrude, CustomAnisotropicMedium, PerturbationMedium, PerturbationPoleResidue] = Medium(attrs={}, name=None, frequency_range=None, allow_gain=False, nonlinear_spec=None, modulation_spec=None, heat_spec=None, type='Medium', permittivity=1.0, conductivity=0.0)\n Background medium of simulation, defaults to vacuum if not specified.\nstructures : Tuple[Structure, ...] = ()\n Tuple of structures present in simulation. Note: Structures defined later in this list override the simulation material properties in regions of spatial overlap.\nsymmetry : Tuple[Literal[0, -1, 1], Literal[0, -1, 1], Literal[0, -1, 1]] = (0, 0, 0)\n Tuple of integers defining reflection symmetry across a plane bisecting the simulation domain normal to the x-, y-, and z-axis at the simulation center of each axis, respectively. Each element can be ``0`` (no symmetry), ``1`` (even, i.e. 'PMC' symmetry) or ``-1`` (odd, i.e. 'PEC' symmetry). Note that the vectorial nature of the fields must be taken into account to correctly determine the symmetry value.\nsources : Tuple[Annotated[Union[tidy3d.components.source.UniformCurrentSource, tidy3d.components.source.PointDipole, tidy3d.components.source.GaussianBeam, tidy3d.components.source.AstigmaticGaussianBeam, tidy3d.components.source.ModeSource, tidy3d.components.source.PlaneWave, tidy3d.components.source.CustomFieldSource, tidy3d.components.source.CustomCurrentSource, tidy3d.components.source.TFSF], FieldInfo(default=PydanticUndefined, discriminator='type', extra={})], ...] = ()\n Tuple of electric current sources injecting fields into the simulation.\nboundary_spec : BoundarySpec = BoundarySpec(attrs={}, x=Boundary(attrs={},, plus=PML(attrs={},, name=None,, type='PML',, num_layers=12,, parameters=PMLParams(attrs={},, 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)),, minus=PML(attrs={},, name=None,, type='PML',, num_layers=12,, parameters=PMLParams(attrs={},, 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)),, type='Boundary'), y=Boundary(attrs={},, plus=PML(attrs={},, name=None,, type='PML',, num_layers=12,, parameters=PMLParams(attrs={},, 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)),, minus=PML(attrs={},, name=None,, type='PML',, num_layers=12,, parameters=PMLParams(attrs={},, 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)),, type='Boundary'), z=Boundary(attrs={},, plus=PML(attrs={},, name=None,, type='PML',, num_layers=12,, parameters=PMLParams(attrs={},, 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)),, minus=PML(attrs={},, name=None,, type='PML',, num_layers=12,, parameters=PMLParams(attrs={},, 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)),, type='Boundary'), type='BoundarySpec')\n Specification of boundary conditions along each dimension. If ``None``, PML boundary conditions are applied on all sides.\nmonitors : Tuple[Annotated[Union[tidy3d.components.monitor.FieldMonitor, tidy3d.components.monitor.FieldTimeMonitor, tidy3d.components.monitor.PermittivityMonitor, tidy3d.components.monitor.FluxMonitor, tidy3d.components.monitor.FluxTimeMonitor, tidy3d.components.monitor.ModeMonitor, tidy3d.components.monitor.ModeSolverMonitor, tidy3d.components.monitor.FieldProjectionAngleMonitor, tidy3d.components.monitor.FieldProjectionCartesianMonitor, tidy3d.components.monitor.FieldProjectionKSpaceMonitor, tidy3d.components.monitor.DiffractionMonitor], FieldInfo(default=PydanticUndefined, discriminator='type', extra={})], ...] = ()\n Tuple of monitors in the simulation. Note: monitor names are used to access data after simulation is run.\ngrid_spec : GridSpec = GridSpec(attrs={}, grid_x=AutoGrid(attrs={},, type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(attrs={},, type='GradedMesher')), grid_y=AutoGrid(attrs={},, type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(attrs={},, type='GradedMesher')), grid_z=AutoGrid(attrs={},, type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(attrs={},, type='GradedMesher')), wavelength=None, override_structures=(), snapping_points=(), type='GridSpec')\n Specifications for the simulation grid along each of the three directions.\nversion : str = 2.7.6\n String specifying the front end version number.\nlumped_elements : Tuple[Union[LumpedResistor, CoaxialLumpedResistor], ...] = ()\n Tuple of lumped elements in the simulation. Note: only :class:`tidy3d.LumpedResistor` is supported currently.\nsubpixel : Union[bool, SubpixelSpec] = SubpixelSpec(attrs={}, dielectric=PolarizedAveraging(attrs={},, type='PolarizedAveraging'), metal=Staircasing(attrs={},, type='Staircasing'), pec=PECConformal(attrs={},, type='PECConformal',, timestep_reduction=0.3), type='SubpixelSpec')\n Apply subpixel averaging methods of the permittivity on structure interfaces to result in much higher accuracy for a given grid size. Supply a :class:`SubpixelSpec` to this field to select subpixel averaging methods separately on dielectric, metal, and PEC material interfaces. Alternatively, user may supply a boolean value: ``True`` to apply the default subpixel averaging methods corresponding to ``SubpixelSpec()`` , or ``False`` to apply staircasing.\nsimulation_type : Optional[Literal['autograd_fwd', 'autograd_bwd', None]] = None\n Tag used internally to distinguish types of simulations for ``autograd`` gradient processing.\npost_norm : Union[float, FreqDataArray] = 1.0\n Factor to multiply the fields by after running, given the adjoint source pipeline used. Note: this is used internally only.\ncourant : ConstrainedFloatValue = 0.99\n Normalized Courant stability factor that is no larger than 1 when CFL stability condition is met. It controls time step to spatial step ratio. Lower values lead to more stable simulations for dispersive materials, but result in longer simulation times.\nnormalize_index : Optional[NonNegativeInt] = 0\n Index of the source in the tuple of sources whose spectrum will be used to normalize the frequency-dependent data. If ``None``, the raw field data is returned unnormalized.\nshutoff : NonNegativeFloat = 1e-05\n Ratio of the instantaneous integrated E-field intensity to the maximum value at which the simulation will automatically terminate time stepping. Used to prevent extraneous run time of simulations with fully decayed fields. Set to ``0`` to disable this feature.\nrun_time : Union[PositiveFloat, RunTimeSpec]\n [units = sec]. Total electromagnetic evolution time in seconds. Note: If simulation 'shutoff' is specified, simulation will terminate early when shutoff condition met. Alternatively, user may supply a :class:`RunTimeSpec` to this field, which will auto-compute the ``run_time`` based on the contents of the spec. If this option is used, the evaluated ``run_time`` value is available in the ``Simulation._run_time`` property.\n\nNotes\n-----\n\n A ``Simulation`` defines a custom implementation of Maxwell's equations which represents the physical model\n to be solved using `the Finite-Difference Time-Domain (FDTD) method\n `_. ``tidy3d`` simulations\n run very quickly in the cloud through GPU parallelization.\n\n .. image:: ../../_static/img/field_update_fdtd.png\n :width: 50%\n :align: left\n\n FDTD is a method for simulating the interaction of electromagnetic waves with structures and materials. It is\n the most widely used method in photonics design. The Maxwell's\n equations implemented in the ``Simulation`` are solved per time-step in the order shown in this image.\n\n The simplified input to FDTD solver consists of the permittivity distribution defined by :attr:`structures`\n which describe the device and :attr:`sources` of electromagnetic excitation. This information is used to\n computate the time dynamics of the electric and magnetic fields in this system. From these time-domain\n results, frequency-domain information of the simulation can also be extracted, and used for device design and\n optimization.\n\n If you are new to the FDTD method, we recommend you get started with the `FDTD 101 Lecture Series\n `_\n\n **Dimensions Selection**\n\n By default, simulations are defined as 3D. To make the simulation 2D, we can just set the simulation\n :attr:`size` in one of the dimensions to be 0. However, note that we still have to define a grid size (eg.\n ``tidy3d.Simulation(size=[size_x, size_y, 0])``) and specify a periodic boundary condition in that direction.\n\n .. TODO sort out inheritance problem https://aware-moon.cloudvent.net/tidy3d/examples/notebooks/RingResonator/\n\n See further parameter explanations below.\n\nExample\n-------\n>>> from tidy3d import Sphere, Cylinder, PolySlab\n>>> from tidy3d import UniformCurrentSource, GaussianPulse\n>>> from tidy3d import FieldMonitor, FluxMonitor\n>>> from tidy3d import GridSpec, AutoGrid\n>>> from tidy3d import BoundarySpec, Boundary\n>>> from tidy3d import Medium\n>>> sim = Simulation(\n... size=(3.0, 3.0, 3.0),\n... grid_spec=GridSpec(\n... grid_x = AutoGrid(min_steps_per_wvl = 20),\n... grid_y = AutoGrid(min_steps_per_wvl = 20),\n... grid_z = AutoGrid(min_steps_per_wvl = 20)\n... ),\n... run_time=40e-11,\n... structures=[\n... Structure(\n... geometry=Box(size=(1, 1, 1), center=(0, 0, 0)),\n... medium=Medium(permittivity=2.0),\n... ),\n... ],\n... sources=[\n... UniformCurrentSource(\n... size=(0, 0, 0),\n... center=(0, 0.5, 0),\n... polarization=\"Hx\",\n... source_time=GaussianPulse(\n... freq0=2e14,\n... fwidth=4e13,\n... ),\n... )\n... ],\n... monitors=[\n... FluxMonitor(size=(1, 1, 0), center=(0, 0, 0), freqs=[2e14, 2.5e14], name='flux'),\n... ],\n... symmetry=(0, 0, 0),\n... boundary_spec=BoundarySpec(\n... x = Boundary.pml(num_layers=20),\n... y = Boundary.pml(num_layers=30),\n... z = Boundary.periodic(),\n... ),\n... shutoff=1e-6,\n... courant=0.8,\n... subpixel=False,\n... )\n\nSee Also\n--------\n\n**Notebooks:**\n * `Quickstart <../../notebooks/StartHere.html>`_: Usage in a basic simulation flow.\n * `Using automatic nonuniform meshing <../../notebooks/AutoGrid.html>`_\n * See nearly all notebooks for :class:`Simulation` applications.\n\n**Lectures:**\n * `Introduction to FDTD Simulation `_: Usage in a basic simulation flow.\n * `Prelude to Integrated Photonics Simulation: Mode Injection `_\n\n**GUI:**\n * `FDTD Walkthrough `_", "type": "object", "properties": { "attrs": { @@ -570,7 +570,7 @@ "version": { "title": "Version", "description": "String specifying the front end version number.", - "default": "2.7.5", + "default": "2.7.6", "type": "string" }, "lumped_elements": { @@ -6378,7 +6378,7 @@ }, "Structure": { "title": "Structure", - "description": "Defines a physical object that interacts with the electromagnetic fields.\nA :class:`Structure` is a combination of a material property (:class:`AbstractMedium`)\nand a :class:`Geometry`.\n\nParameters\n----------\nattrs : dict = {}\n Dictionary storing arbitrary metadata for a Tidy3D object. This dictionary can be freely used by the user for storing data without affecting the operation of Tidy3D as it is not used internally. Note that, unlike regular Tidy3D fields, ``attrs`` are mutable. For example, the following is allowed for setting an ``attr`` ``obj.attrs['foo'] = bar``. Also note that `Tidy3D`` will raise a ``TypeError`` if ``attrs`` contain objects that can not be serialized. One can check if ``attrs`` are serializable by calling ``obj.json()``.\ngeometry : Union[Box, Transformed, ClipOperation, GeometryGroup, Sphere, Cylinder, PolySlab, ComplexPolySlabBase, TriangleMesh]\n Defines geometric properties of the structure.\nname : Optional[str] = None\n Optional name for the structure.\nmedium : Union[Medium, AnisotropicMedium, PECMedium, PoleResidue, Sellmeier, Lorentz, Debye, Drude, FullyAnisotropicMedium, CustomMedium, CustomPoleResidue, CustomSellmeier, CustomLorentz, CustomDebye, CustomDrude, CustomAnisotropicMedium, PerturbationMedium, PerturbationPoleResidue, Medium2D, AnisotropicMediumFromMedium2D]\n Defines the electromagnetic properties of the structure's medium.\n\nNotes\n------\n\n Structures can indeed be larger than the simulation domain in ``tidy3d``. In such cases, ``tidy3d`` will\n automatically truncate the geometry that goes beyond the domain boundaries. For best results, structures that\n intersect with absorbing boundaries or simulation edges should extend all the way through. In many such\n cases, an \u201cinfinite\u201d size :class:`td.inf` can be used to define the size along that dimension.\n\nExample\n-------\n>>> from tidy3d import Box, Medium\n>>> box = Box(center=(0,0,1), size=(2, 2, 2))\n>>> glass = Medium(permittivity=3.9)\n>>> struct = Structure(geometry=box, medium=glass, name='glass_box')\n\nSee Also\n--------\n\n**Notebooks:**\n\n* `Quickstart <../../notebooks/StartHere.html>`_: Usage in a basic simulation flow.\n* `First walkthrough <../../notebooks/Simulation.html>`_: Usage in a basic simulation flow.\n* `Visualizing geometries in Tidy3D <../../notebooks/VizSimulation.html>`_\n\n**Lectures:**\n\n* `Using FDTD to Compute a Transmission Spectrum `_\n\n**GUI:**\n\n* `Structures `_", + "description": "Defines a physical object that interacts with the electromagnetic fields.\nA :class:`Structure` is a combination of a material property (:class:`AbstractMedium`)\nand a :class:`Geometry`.\n\nParameters\n----------\nattrs : dict = {}\n Dictionary storing arbitrary metadata for a Tidy3D object. This dictionary can be freely used by the user for storing data without affecting the operation of Tidy3D as it is not used internally. Note that, unlike regular Tidy3D fields, ``attrs`` are mutable. For example, the following is allowed for setting an ``attr`` ``obj.attrs['foo'] = bar``. Also note that `Tidy3D`` will raise a ``TypeError`` if ``attrs`` contain objects that can not be serialized. One can check if ``attrs`` are serializable by calling ``obj.json()``.\ngeometry : Union[Box, Transformed, ClipOperation, GeometryGroup, Sphere, Cylinder, PolySlab, ComplexPolySlabBase, TriangleMesh]\n Defines geometric properties of the structure.\nname : Optional[str] = None\n Optional name for the structure.\nbackground_permittivity : Optional[ConstrainedFloatValue] = None\n Relative permittivity used for the background of this structure when performing shape optimization with autograd.\nmedium : Union[Medium, AnisotropicMedium, PECMedium, PoleResidue, Sellmeier, Lorentz, Debye, Drude, FullyAnisotropicMedium, CustomMedium, CustomPoleResidue, CustomSellmeier, CustomLorentz, CustomDebye, CustomDrude, CustomAnisotropicMedium, PerturbationMedium, PerturbationPoleResidue, Medium2D, AnisotropicMediumFromMedium2D]\n Defines the electromagnetic properties of the structure's medium.\n\nNotes\n------\n\n Structures can indeed be larger than the simulation domain in ``tidy3d``. In such cases, ``tidy3d`` will\n automatically truncate the geometry that goes beyond the domain boundaries. For best results, structures that\n intersect with absorbing boundaries or simulation edges should extend all the way through. In many such\n cases, an \u201cinfinite\u201d size :class:`td.inf` can be used to define the size along that dimension.\n\nExample\n-------\n>>> from tidy3d import Box, Medium\n>>> box = Box(center=(0,0,1), size=(2, 2, 2))\n>>> glass = Medium(permittivity=3.9)\n>>> struct = Structure(geometry=box, medium=glass, name='glass_box')\n\nSee Also\n--------\n\n**Notebooks:**\n\n* `Quickstart <../../notebooks/StartHere.html>`_: Usage in a basic simulation flow.\n* `First walkthrough <../../notebooks/Simulation.html>`_: Usage in a basic simulation flow.\n* `Visualizing geometries in Tidy3D <../../notebooks/VizSimulation.html>`_\n\n**Lectures:**\n\n* `Using FDTD to Compute a Transmission Spectrum `_\n\n**GUI:**\n\n* `Structures `_", "type": "object", "properties": { "attrs": { @@ -6439,6 +6439,12 @@ "description": "Optional name for the structure.", "type": "string" }, + "background_permittivity": { + "title": "Background Permittivity", + "description": "Relative permittivity used for the background of this structure when performing shape optimization with autograd.", + "minimum": 1.0, + "type": "number" + }, "type": { "title": "Type", "default": "Structure", @@ -8611,7 +8617,7 @@ }, "TFSF": { "title": "TFSF", - "description": "Total-field scattered-field (TFSF) source that can inject a plane wave in a finite region.\n\nParameters\n----------\nattrs : dict = {}\n Dictionary storing arbitrary metadata for a Tidy3D object. This dictionary can be freely used by the user for storing data without affecting the operation of Tidy3D as it is not used internally. Note that, unlike regular Tidy3D fields, ``attrs`` are mutable. For example, the following is allowed for setting an ``attr`` ``obj.attrs['foo'] = bar``. Also note that `Tidy3D`` will raise a ``TypeError`` if ``attrs`` contain objects that can not be serialized. One can check if ``attrs`` are serializable by calling ``obj.json()``.\nname : Optional[str] = None\n Optional name for the source.\ncenter : Union[tuple[Union[float, autograd.tracer.Box], Union[float, autograd.tracer.Box], Union[float, autograd.tracer.Box]], Box] = (0.0, 0.0, 0.0)\n [units = um]. Center of object in x, y, and z.\nsize : Union[tuple[Union[pydantic.v1.types.NonNegativeFloat, autograd.tracer.Box], Union[pydantic.v1.types.NonNegativeFloat, autograd.tracer.Box], Union[pydantic.v1.types.NonNegativeFloat, autograd.tracer.Box]], Box]\n [units = um]. Size in x, y, and z directions.\nsource_time : Union[GaussianPulse, ContinuousWave, CustomSourceTime]\n Specification of the source time-dependence.\ndirection : Literal['+', '-']\n Specifies propagation in the positive or negative direction of the injection axis.\nangle_theta : float = 0.0\n [units = rad]. Polar angle of the propagation axis from the injection axis.\nangle_phi : float = 0.0\n [units = rad]. Azimuth angle of the propagation axis in the plane orthogonal to the injection axis.\npol_angle : float = 0\n [units = rad]. Specifies the angle between the electric field polarization of the source and the plane defined by the injection axis and the propagation axis (rad). ``pol_angle=0`` (default) specifies P polarization, while ``pol_angle=np.pi/2`` specifies S polarization. At normal incidence when S and P are undefined, ``pol_angle=0`` defines: - ``Ey`` polarization for propagation along ``x``.- ``Ex`` polarization for propagation along ``y``.- ``Ex`` polarization for propagation along ``z``.\ninjection_axis : Literal[0, 1, 2]\n Specifies the injection axis. The plane of incidence is defined via this ``injection_axis`` and the ``direction``. The popagation axis is defined with respect to the ``injection_axis`` by ``angle_theta`` and ``angle_phi``.\n\nNotes\n-----\n\n The TFSF source injects :math:`\\frac{1 W}{\\mu m^2}` of power along the :attr:`injection_axis`. Note that in the\n case of angled incidence, :math:`\\frac{1 W}{\\mu m^2}` is still injected along the source's :attr:`injection_axis`,\n and not the propagation direction, unlike a :class:`PlaneWave` source. This allows computing\n scattering and absorption cross-sections without the need for additional normalization.\n\n The TFSF source allows specifying a box region into which a plane wave is injected. Fields inside this region\n can be interpreted as the superposition of the incident field and the scattered field due to any scatterers\n present in the simulation domain. The fields at the edges of the TFSF box are modified at each time step such\n that the incident field is cancelled out, so that all fields outside the TFSF box are scattered fields only.\n This is useful in scenarios where one is interested in computing scattered fields only, for example when\n computing scattered cross-sections of various objects.\n\n It is important to note that when a non-uniform grid is used in the directions transverse to the\n :attr:`injection_axis` of the TFSF source, the suppression of the incident field outside the TFSF box may not be as\n close to zero as in the case of a uniform grid. Because of this, a warning may be issued when nonuniform grid\n TFSF setup is detected. In some cases, however, the accuracy may be only weakly affected, and the warnings\n can be ignored.\n\nSee Also\n--------\n\n**Notebooks**:\n * `Defining a total-field scattered-field (TFSF) plane wave source <../../notebooks/TFSF.html>`_\n * `Nanoparticle Scattering <../../notebooks/PlasmonicNanoparticle.html>`_: To force a uniform grid in the TFSF region and avoid the warnings, a mesh override structure can be used as illustrated here.", + "description": "Total-field scattered-field (TFSF) source that can inject a plane wave in a finite region.\n\nParameters\n----------\nattrs : dict = {}\n Dictionary storing arbitrary metadata for a Tidy3D object. This dictionary can be freely used by the user for storing data without affecting the operation of Tidy3D as it is not used internally. Note that, unlike regular Tidy3D fields, ``attrs`` are mutable. For example, the following is allowed for setting an ``attr`` ``obj.attrs['foo'] = bar``. Also note that `Tidy3D`` will raise a ``TypeError`` if ``attrs`` contain objects that can not be serialized. One can check if ``attrs`` are serializable by calling ``obj.json()``.\nname : Optional[str] = None\n Optional name for the source.\ncenter : Union[tuple[Union[float, autograd.tracer.Box], Union[float, autograd.tracer.Box], Union[float, autograd.tracer.Box]], Box] = (0.0, 0.0, 0.0)\n [units = um]. Center of object in x, y, and z.\nsize : Union[tuple[Union[pydantic.v1.types.NonNegativeFloat, autograd.tracer.Box], Union[pydantic.v1.types.NonNegativeFloat, autograd.tracer.Box], Union[pydantic.v1.types.NonNegativeFloat, autograd.tracer.Box]], Box]\n [units = um]. Size in x, y, and z directions.\nsource_time : Union[GaussianPulse, ContinuousWave, CustomSourceTime]\n Specification of the source time-dependence.\ndirection : Literal['+', '-']\n Specifies propagation in the positive or negative direction of the injection axis.\nangle_theta : float = 0.0\n [units = rad]. Polar angle of the propagation axis from the injection axis.\nangle_phi : float = 0.0\n [units = rad]. Azimuth angle of the propagation axis in the plane orthogonal to the injection axis.\npol_angle : float = 0\n [units = rad]. Specifies the angle between the electric field polarization of the source and the plane defined by the injection axis and the propagation axis (rad). ``pol_angle=0`` (default) specifies P polarization, while ``pol_angle=np.pi/2`` specifies S polarization. At normal incidence when S and P are undefined, ``pol_angle=0`` defines: - ``Ey`` polarization for propagation along ``x``.- ``Ex`` polarization for propagation along ``y``.- ``Ex`` polarization for propagation along ``z``.\ninjection_axis : Literal[0, 1, 2]\n Specifies the injection axis. The plane of incidence is defined via this ``injection_axis`` and the ``direction``. The popagation axis is defined with respect to the ``injection_axis`` by ``angle_theta`` and ``angle_phi``.\n\nNotes\n-----\n\n The TFSF source injects :math:`1 W` of power per :math:`\\mu m^2` of source area along the :attr:`injection_axis`.\n Hence, the normalization for the incident field is :math:`|E_0|^2 = \\frac{2}{c\\epsilon_0}`, for any source size.\n Note that in the case of angled incidence, the same power is injected along the source's :attr:`injection_axis`,\n and not the propagation direction. This allows computing scattering and absorption cross-sections\n without the need for additional normalization.\n\n The TFSF source allows specifying a box region into which a plane wave is injected. Fields inside this region\n can be interpreted as the superposition of the incident field and the scattered field due to any scatterers\n present in the simulation domain. The fields at the edges of the TFSF box are modified at each time step such\n that the incident field is cancelled out, so that all fields outside the TFSF box are scattered fields only.\n This is useful in scenarios where one is interested in computing scattered fields only, for example when\n computing scattered cross-sections of various objects.\n\n It is important to note that when a non-uniform grid is used in the directions transverse to the\n :attr:`injection_axis` of the TFSF source, the suppression of the incident field outside the TFSF box may not be as\n close to zero as in the case of a uniform grid. Because of this, a warning may be issued when nonuniform grid\n TFSF setup is detected. In some cases, however, the accuracy may be only weakly affected, and the warnings\n can be ignored.\n\nSee Also\n--------\n\n**Notebooks**:\n * `Defining a total-field scattered-field (TFSF) plane wave source <../../notebooks/TFSF.html>`_\n * `Nanoparticle Scattering <../../notebooks/PlasmonicNanoparticle.html>`_: To force a uniform grid in the TFSF region and avoid the warnings, a mesh override structure can be used as illustrated here.", "type": "object", "properties": { "attrs": { @@ -12784,7 +12790,7 @@ }, "MeshOverrideStructure": { "title": "MeshOverrideStructure", - "description": "Defines an object that is only used in the process of generating the mesh.\n\nParameters\n----------\nattrs : dict = {}\n Dictionary storing arbitrary metadata for a Tidy3D object. This dictionary can be freely used by the user for storing data without affecting the operation of Tidy3D as it is not used internally. Note that, unlike regular Tidy3D fields, ``attrs`` are mutable. For example, the following is allowed for setting an ``attr`` ``obj.attrs['foo'] = bar``. Also note that `Tidy3D`` will raise a ``TypeError`` if ``attrs`` contain objects that can not be serialized. One can check if ``attrs`` are serializable by calling ``obj.json()``.\ngeometry : Union[Box, Transformed, ClipOperation, GeometryGroup, Sphere, Cylinder, PolySlab, ComplexPolySlabBase, TriangleMesh]\n Defines geometric properties of the structure.\nname : Optional[str] = None\n Optional name for the structure.\ndl : Tuple[PositiveFloat, PositiveFloat, PositiveFloat]\n [units = um]. Grid size along x, y, z directions.\nenforce : bool = False\n If ``True``, enforce the grid size setup inside the structure even if the structure is inside a structure of smaller grid size. In the intersection region of multiple structures of ``enforce=True``, grid size is decided by the last added structure of ``enforce=True``.\n\nNotes\n-----\n\n A :class:`MeshOverrideStructure` is a combination of geometry :class:`Geometry`,\n grid size along ``x``, ``y``, ``z`` directions, and a boolean on whether the override\n will be enforced.\n\nExample\n-------\n>>> from tidy3d import Box\n>>> box = Box(center=(0,0,1), size=(2, 2, 2))\n>>> struct_override = MeshOverrideStructure(geometry=box, dl=(0.1,0.2,0.3), name='override_box')", + "description": "Defines an object that is only used in the process of generating the mesh.\n\nParameters\n----------\nattrs : dict = {}\n Dictionary storing arbitrary metadata for a Tidy3D object. This dictionary can be freely used by the user for storing data without affecting the operation of Tidy3D as it is not used internally. Note that, unlike regular Tidy3D fields, ``attrs`` are mutable. For example, the following is allowed for setting an ``attr`` ``obj.attrs['foo'] = bar``. Also note that `Tidy3D`` will raise a ``TypeError`` if ``attrs`` contain objects that can not be serialized. One can check if ``attrs`` are serializable by calling ``obj.json()``.\ngeometry : Union[Box, Transformed, ClipOperation, GeometryGroup, Sphere, Cylinder, PolySlab, ComplexPolySlabBase, TriangleMesh]\n Defines geometric properties of the structure.\nname : Optional[str] = None\n Optional name for the structure.\nbackground_permittivity : Optional[ConstrainedFloatValue] = None\n Relative permittivity used for the background of this structure when performing shape optimization with autograd.\ndl : Tuple[PositiveFloat, PositiveFloat, PositiveFloat]\n [units = um]. Grid size along x, y, z directions.\nenforce : bool = False\n If ``True``, enforce the grid size setup inside the structure even if the structure is inside a structure of smaller grid size. In the intersection region of multiple structures of ``enforce=True``, grid size is decided by the last added structure of ``enforce=True``.\n\nNotes\n-----\n\n A :class:`MeshOverrideStructure` is a combination of geometry :class:`Geometry`,\n grid size along ``x``, ``y``, ``z`` directions, and a boolean on whether the override\n will be enforced.\n\nExample\n-------\n>>> from tidy3d import Box\n>>> box = Box(center=(0,0,1), size=(2, 2, 2))\n>>> struct_override = MeshOverrideStructure(geometry=box, dl=(0.1,0.2,0.3), name='override_box')", "type": "object", "properties": { "attrs": { @@ -12845,6 +12851,12 @@ "description": "Optional name for the structure.", "type": "string" }, + "background_permittivity": { + "title": "Background Permittivity", + "description": "Relative permittivity used for the background of this structure when performing shape optimization with autograd.", + "minimum": 1.0, + "type": "number" + }, "type": { "title": "Type", "default": "MeshOverrideStructure",