All notable changes to this project will be documented in this file.
ModeSolverData.pol_fraction_waveguideproperties to compute polarization fraction of modes using two different definitions.
ModeSolverData.modes_infofor a convenient summary of various modal properties of the computed modes.
Loss upper bound estimation in
Output task URL before and after simulation run and make URLs blue underline formatting.
Support to load and save compressed HDF5 files (
.hdf5.gz) directly from
Line numbers no longer printed in webapi log output.
Empty list returned if the folder cannot be queried in
Filtering based on
ModeSpec.filter_polnow uses the user-exposed
ModeSolverData.pol_fractionproperty. This also fixes the previous internal handling which was not taking the nonuniform grid, as well as and the propagation axis direction for modes in angled waveguides. In practice, the results should be similar in most cases.
Bug with truly anisotropic
JaxCustomMediumin adjoint plugin.
Bug in adjoint plugin when
JaxBoxis less than 1 grid cell thick.
JaxSimulation.structuresdid not accept structures containing
config.log_suppressioncan be used to control the suppression of log messages.
Job.abort()methods allowing user to abort running tasks without deleting them. If a task is aborted, it cannot be restarted later, a new one needs to be created and submitted.
FastDispersionFitterfor fast fitting of material dispersion data.
Simulation.monitors_data_sizeproperty mapping monitor name to its data size in bytes.
Source with arbitrary user-specified time dependence through
Interface for specifying material heat and charge perturbation models. Specifically, non-dispersive and dispersive mediums with heat and/or charge perturbation models can be defined through classes
PerturbationPoleResidue, where perturbations to each parameter is specified using class
ParameterPerturbation. A convenience function
Simulation.perturbed_mediums_copyis added to class
Simulationwhich applies heat and/or charge fields to mediums containing perturbation models.
Simulation.plot_eps()for setting horizontal and veritcal plot limits.
Added support for chi3 nonlinearity via
Spatial downsampling allowed in
ClipOperationgeometry type allows the construction of complex geometries through boolean operations.
Operations on geometry (
^) will create the appropriate
Geometry.from_shapelyto extrude shapely primitives into Tidy3D geometry.
Geometry.from_gdsto extrude GDS cells into geometry groups with support for holes.
components.geometry.utils.traverse_geometryused internally to traverse geometry trees.
components.geometry.utils.flatten_groupsused internally to validate large geometry trees.
sim_with_mode_solver_monitor()methods allowing the
ModeSolverto create a copy of its
Simulationwith an added
nyquist_stepalso taking the frequency range of frequency-domain monitors into account.
Added option to allow DC component in
GaussianPulsespectrum, by setting
Jax installation from
pip install "tidy3d[jax]"handled same way on windows as other OS if python >= 3.9.
colocateintroduced as an argument to
ModeSolverand a Field in
ModeSolverMonitor, set to True by default.
FieldMonitor-s that have
colocate=Truereturn fields colocated to the grid boundaries rather than centers. This matches better user expectations for example when the simulation has a symmetry (explicitly defined, or implicit) w.r.t. a given axis. When colocating to centers, fields would be
dl / 2away from that symmetry plane, and components that are expected to go to zero do not (of course, they still do if interpolated to the symmetry plane). Another convenient use case is that it is easier to place a 2D monitor exactly on a grid boundary in the automatically generated grid, by simply passing an override structure with the monitor geometry.
In these monitors,
colocateis now set to
Trueby default. This is to avoid a lot of potential confusion coming from returning non-colocated fields by default, when colocated fields need to be used when computing quantities that depend on more than one field component, like flux or field intensity.
Field colocation for computations like flux, Poynting, and modal overlap also happen to cell boundaries rather than centers. The effect on final results should be close to imperceptible as verified by a large number of backend tests and our online examples. Any difference can be at most on the scale of the difference that can be observed when slightly modifying the grid resolution.
GeometryGroupinstances as group elements.
FDTD and mode solver tasks always upload
hdf5.gzfile instead of
simulation.hdf5.gzand unzip it, then load the json from the hdf5 file.
SimulationTask.get_simulation_hdf5()will download simulation.hdf5.gz and unzip it to hdf5 file.
The width of Tidy3D logging output is changed to 80 characters.
rufffor linting instead of
Added lower bound validator to
freqsin mode solver.
Added lower bound validator to
FreqArray, so it can be initialized from numpy, list or tuple.
TIDY3D_ENVproperly when set to
Redundant phase compensation for shifted source in smatrix plugin.
Bug in angled mode solver with negative
Numerically stable sigmoid function in radius of curvature constraint.
Spatial monitor downsampling when the monitor is crossing a symmetry plane or Bloch boundary conditions.
jnp.array, reducing conversions needed in objective functions.
Correct color and zorder for line segments when plotting 2D geometries.
Simulation.eps_boundsthat was always setting the lower bound to 1.
Extended lower limit of frequency range for
Improved warnings for
Improved mode solver handling of 1D problem to avoid singular matrix issue.
colocate=Falseautomatically in output
FieldMonitorobjects in adjoint plugin, warning instead of erroring for backwards compatibility.
ModeSpec.group_index_stepworking incorrectly if the value was set to 1.
Adjoint plugin import failures after
jax.Arrayin jax 0.4.14.
Fixed definition of shapely box bounds in Geometry.intersections_2dbox()
Surface integration monitor validator changed to error only if all integration surfaces are outside of the simulation domain.
Inverse design convenience utilities in
plugins.adjoint.utilsfor image filtering (
ConicFilter), projection (
BinaryProjector), and radius of curvature penalization (
Properly handle sign flip in
direction="-"in adjoint plugin.
CustomMedium.grids, which was giving incorrect grid boundaries at edges.
Out of date endpoint in
migrateoption of webapi.
Support for differentiating with respect to
Validating that every surface (unless excluded in
exclude_surfaces) of a 3D
SurfaceIntegrationMonitor(flux monitor or field projection monitor) is not completely outside the simulation domain.
Source validation happens before simulation upload and raises an error if no source is present.
Warning instead of error if structure out of simulation bounds.
Internal refactor of
ComponentModelerto simplify logic.
(Changed effective 2.3.0) Backward-direction mode amplitudes from
ModeMonitorshave a flipped sign compared to previous versions. Previously, the amplitudes were computed directly through the dot product
amp = (mode, field), while, since 2.3.0, we use
amp = (mode, field) / (mode, mode)instead. The modes are already normalized to unit directed flux, such that
(mode, mode) = 1for forward modes, and
(mode, mode) = -1for backward modes (the dot product of a mode with itself is equal to the flux through the mode plane). Therefore, the change in the
ampformula is equivalent to a sign change for backward modes. This makes their interpretation more intuitive, since the amplitude is now
1if the recorded field and a mode match exactly. A
-1amplitude means that the fields match exactly except for a
piphase shift. This interpretation is also now independent of forward/backward direction.
Point-like objects correctly appear as single points using
Cleaner display of
ArrayLikevalidation properly fails with
Apply finite grid correction to the fields when calculating the Poynting vector from 2D monitors.
JaxCustomMediumproperly handles complex-valued permittivity.
Specification of spatial permittivity distribution of dispersive material using user-supplied data through
CustomAnisotropicMediumwhere each component can take user-supplied data to define spatial permittivity distribution of non-dispersive or dispersive material.
Coords.spatial_interpto interpolate spatial data avoiding pitfalls of
xarray.interpin directions where there is a single data point.
All medium types accept
Falseby default, but allows the medium to be active if
Causality validation in
Group index calculation added to mode monitors and available through
JaxGeometryGroupin adjoint plugin.
Support for gradients w.r.t.
output_monitorsin adjoint plugin.
s3utils.get_s3_sts_tokenaccepts extra query parameters.
plugins.mode.webto control the server-side mode solver.
JaxDataArray.interp, allowing differentiable linear interpolation.
JaxSimulationData.get_intensity(), allowing intensity distribution to be differentiated in
JaxFieldData.fluxto compute differentiable flux value from
All custom medium types accept
Falseby default, but applies subpixel averaging of the permittivity on the interfaces of the structure (including exterior boundary and intersection interfaces with other structures) if
Medium2Dto full simulation in tests.
StableDispersionFitterunified in a single
StableDispersionFitterdeprecated, with stable fitter now being run instead through
Removed validator from
CustomFieldSourcethat ensured data spanned the source geometry. Now the current values are extrapolated outside of the supplied data ranges.
CustomMediumnow take fields
eps_datasetwill be deprecated in v3.0.
Coords.spatial_interpto be used by custom current sources.
Adjoint simulations no longer contain unused gradient permittivity monitors, reducing processing time.
Batchprints total estimated cost if
Unified config and authentication.
Remove restriction that
JaxCustomMediummust not be a 3D pixelated array.
Limit total number of input structures in adjoint plugin for performance reasons.
directionfield that explicitly specifies the mode propagation direction (default is “+”).
UniformCurrentSource, which uses linear interpolation to emulate exact placement of the source along directions where the source has zero size, rather than snapping to the nearest grid location, similar to the behavior for
Plotting 2D materials in
SimulationData.plot_fieldand other circumstances.
More segments in plotting of large cylinder and sphere cross-sections.
Proper handling of nested list of custom data components in IO, needed for custom dispersive medium coefficients.
ElectromagneticFieldData.outer_dotnow works correctly for
FieldData, not only
Fix to the setting of the mode solver PML parameters that produces better results for modes which do not decay in the PML, and fewer spurious modes.
Fix to single-precision mode solver to do the type conversion on the final matrix only rather than at intermediate steps, which improves accuracy in some cases.
Improvements to graphene medium fit.
Schema titles in
web.estimate_costerror/time-out for large simulations, it should now always work but may take some time for complex cases.
A more accurate injection and decomposition of backward propagating waveguide modes in lossy and gyrotropic systems.
Callback URL: “call_back_url” replaced with proper “callbackUrl”.
.from_hdf5()now accept custom encoder and decoder functions for more flexible IO.
JaxDataArraysare properly handled when reading and writing to file, dramatically reducing the VJP simulation download size in server-side adjoint.
A bug in a total-field scattered-field (TFSF) validator which was causing unnecessary errors when a TFSF surface intersected with 2D materials.
CI tests working with binary installation of gdstk instead of compiling from source.
<=4.5.0to avoid bug with pydantic for python <= 3.9.
ModeSolverwhich was causing a preconditioner to be applied even when it is not needed.
Fully anisotropic medium class (
FullyAnisotropicMedium) that allows to simulate materials with permittivity and conductivity tensors oriented arbitrary with respect to simulation grid.
Adjoint processing is done server side by default, to avoid unnecessary downloading of data.
adjointplugin, which can track derivatives through its
tidy3d.plugins.adjoint.webto provide way to run adjoint processing locally.
web.test()to simply test if the authentication is configured correctly and raise exception otherwise.
SimulationTask.get_running_tasks()to get a list of running tasks from the server.
Retry for set number of seconds in web functions if internet connection errors.
ModeSolver.plot_fieldto control plot scaling.
Simulation.plot_3d()method to make 3D rendering of simulation.
Perfect electric conductors (PECs) are now modeled as high-conductivity media in both the frontend and backend mode solvers, and their presence triggers the use of a preconditioner to improve numerical stability and robustness. Consequently, the mode solver provides more accurate eigenvectors and field distributions when PEC structures are present.
Include source amplitude in
Increased the maximum allowed estimated simulation data storage to 50GB. Individual monitors with projected data larger than 10GB will trigger a warning.
matplotlib.path.contains_pointsfor better performance.
JaxCustomMediumaccepts a maximum of 250,000 grid cells to avoid slow server-side processing.
JaxCustomMediumaccepts a maximum of 250,000 grid cells.
Logging messages are supressed and summarized to avoid repetitions.
Log messages provide the correct caller origin (file name and line number).
Medium2Dis removed from the list of allowed options for
Simulation.mediumin the documentation.
Symmetry works properly in
adjointplugin now filters out adjoint sources that are below a threshold in amplitude relative to the maximum amplitude of the monitor data, reducing unnecessary processing by eliminating sources that won’t contribute to the gradient.
Batchunder the hood instead of
More helpful error messages from HTTP responses.
_validate_no_structures_pml, which was using wrong pml thicknesses.
Group index calculation added to ModeSpec.
Waveguide plugin for quickly calculating modes in dielectric waveguides.
ElectromagneticFieldData.dot_intepto calculate mode overlap integrals between modes with different discretizations.
ElectromagneticFieldData.mode_areato calculate the effective mode area.
ElectromagneticFieldData.intensityreturns the sum of the squared components of the electric field.
Group index calculation added to ModeSolver.
Web interface prints clickable link to task on Tidy3D web interface.
Allow configuration through API key in python via
adjointplugin now filters out adjoint sources that are below a threshold in amplitude relative to the maximum amplitude of the monitor data, reducing unnecessary processing by eliminating sources that won’t contribute to the gradient.
np.ndarrayinternally instead of
TidyNDArraysubclass. Tidy3D objects are no longer hashable, instead, hash the
web.Batchmonitoring is more robust, will not raise exception if a job errors or diverges. In this case, the progressbar text will render in red.
More robust handling for 2D structure validator.
Times logged in
tidy3d.logduring solver run now split into
Solver time(time-stepping only),
Field projection time(after the time stepping if any field projection monitors present) and
Data write time(when the raw data is packaged to disk). Previously,
Solver timeused to include the
Field projection timeand not
Data write time.
Port name duplication in smatrix plugin for multimode ports.
Web functions create the leading directories for the supplied filename if they don’t exist.
Some docstring examples that were giving warnings.
web.monitor()only prints message when condition met.
PML boxes have non-zero extent along any dimensions where the simulation has 0 size, to fix plotting issues for 2D simulations.
Improved PEC handling around curved interfaces and structure intersections. Old handling accessible with
subpixel=False(previously, it was independent of the subpixel setting).
Fix to field projections sometimes containing
Bug in web interface when
Simulationupload was not putting quotes around
Default Tidy3D logging level is now set to
Tidy3D is no longer pip installable from
Plugins must be imported from their respective directories, eg.
from tidy3d.plugins.mode import ModeSolver.
Log level only accepts upper case strings.
Boundary conditions are now
PointDipolesources now have a continuous dependence on the source position, as opposed to snapping to Yee grid locations. Behavior is controlled by the
interpolateargument, set to
smatrixplugin accepts list of frequencies and returns data as an
xarray.DataArrayinstead of a nested
importlib-metadataversion set to
Helpful error message if user has insufficient credits.
TriangleMeshclass for modeling geometries specified by triangle surface meshes, with support for STL file import.
Total-field scattered-field (TFSF) source which allows angled plane waves to be injected into a finite region of space (the total-field region), such that only scattered fields exist outside this region (scattered-field region).
Medium2Dclass for surface conductivity model of a 2D material.
material_libraryfor graphene and some common TMDs.
Ability to create a 2D representation of a thin 3D material.
SimulationData.plot_fieldaccepts new field components and values, including the Poynting vector.
SimulationData.get_poynting_vectorfor calculating the 3D Poynting vector at the Yee cell centers.
Post-init validation of Tidy3D components.
Validate post-Simulation init to error if any structures have bounds that terminate inside of the PML.
Tidy3D account authentication done solely through API key. Migration option offered for useres with old username / password authentication.
material_libraryexports material’s full name in addition to abbreviation.
Simpler progress bars for
n_cfladded to adjust time step size according to CFL condition.
In the mode solver plugin, regular methods in
solver.pytransformed into classmethods.
ArrayLiketypes are stored internally as
np.ndarrayand written to json as lists.
constrained_array()provides way to validate
ArrayLikevalues based on
Pip installing tidy3d automatically creates
~/.tidy3ddirectory in home directory.
Percentage done and field decay determined through http request.
valkwarg, which selects which part of the data (
'abs') to plot, rather than plotting all at once.
Bug in remote file transfer when client environment has no correct certificate authority pem file install locally.
Tidy3D exceptions inherit from
ValueErrorso they are handled properly by pydantic.
Two unstable materials in
TiOx_HoribStableadded for improved stability.
Bug in infinite long cylinder when the
reference_planeis not at the bottom or the cylinder is slanted.
tidy3d.config.logging_levelto accept lower case for backwards compatibility.
set_logging_consoleallows redirection of console messages to stderr.
Use custom logger to avoid changing global logging state when importing tidy3d.
Separate logging configuration from custom exception definitions.
Avoiding shapely warning in some cases when checking intersection with an empty shape.
Medium.eps_modelerror when supplied a list of frequencies rather than a numpy array.
Set install requirement
rich<12.6.0to fix double output in webapi functions.
Specification of relative permittivity distribution using raw, user-supplied data through a
Automatic differentiation through
New Drude model variants for Gold and Silver in the
ComplexPolySlabfor supporting complex polyslabs containing self-intersecting polygons during extrusion.
Asynchronous running of multiple simulations concurrently using
adjointplugin for efficiently running multi-simulation objectives concurrently and differentiating result.
Simulation.epsilonif many grid cells and structures provided and slow run time expected as a result.
tidy3d.webfunctions and containers. If
False, there will be no non-essential output when running simulations over web api.
Warning if PML or absorbing boundaries are used along a simulation dimension with zero size.
Saving and loading of
.hdf5files is made orders of magnitude faster due to an internal refactor.
gdstk, both packages are made optional requirements.
JaxCustomMediumis made faster and can handle several thousand pixels without significant overhead.
Jax is made an optional requirement. The adjoint plugin supports jax versions 0.3 and 0.4 for windows and non-windows users, respectively.
Issue a deprecation warning that
Geometry.intersectionswill be renamed to
Limit some warnings to only show for the first structure for which they are encountered.
Billed flex unit no longer shown at the end of
web.runas it may take a few seconds until it is available. Instead, added a
web.real_cost(task_id)function to get the cost after a task run.
tidy3d.webfor more robustness and test coverage.
Progressbars always set to 100% when webapi functions are finished.
Faster handling of
Geometry.insideby taking into account geometry bounds.
Numpy divide by zero warning in mode solver fixed by initializing jacobians as real instead of complex.
Bug in validators for 2D objects being in homogeneous media which were looking at the infinite plane in which the objects lie. This can also significantly speed up some validators in the case of many structures.
Sources and monitors with bend radii are displayed with curved arrows.
Axestype with most recent
coord_key="centers"in which structures were not rendered.
medium.pycausing incorrect docstrings.
Warning if users install via
tidy3d-betaon pip, from now on, best to use
Support for dispersive media in
Support shapely version >=2.0 for all python versions.
Structurein preparation for future changes.
Readme displays updated instructions for installing tidy3d (remove beta version mention).
Field decay warning in mode solver when symmetry present.
Formatting bug in Tidy3d custom exceptions.
TIDY3D_SSL_VERIFYto optionally disable SSL authentication (default is
Billed FlexUnit cost displayed at the end of
Bug on Windows systems with submitting
CustomFieldSourcedata to the server.
FieldData.symmetry_expanded_copyfor monitors with
Simulationversion updater is called every time a
Simulationobject is loaded, not just
Boundary specifications that rely on the default
Periodicboundary now print a deprecation warning, as the default boundaries will change to
PMLin Tidy3D 2.0.
CustomFieldSourcethat can inject arbitrary source fields.
ElectromagneticFieldData.fluxproperty for data corresponding to 2D monitors, and
ElectromagneticFieldData.dotmethod for computing the overlap integral over two sets of frequency-domain field data.
Data corresponding to 2D
FieldTimeMonitor, as well as to
ModeSolverMonitor, now also stores
grid_correctiondata related to the finite grid along the normal direction. This needs to be taken into account to avoid e.g. numerical oscillations of the flux with the exact position of the monitor that is due to the interpolation from the grid cell boundaries. These corrections are automatically applied when using the
Resonance finding plugin for estimating resonance frequency and Q-factor of multiple resonances from time-domain data. Accessed through
.updated_copy(**kwargs)method to all tidy3d objects to add a more convenient shortcut to copying an instance with updated fields, i.e.
Test support for python 3.11.
Cylinderthat allows a
Cylinderto be tuned into a conical frustum or a cone.
PolySlabthat provides options to define the vertices at the bottom, middle, or top of the
MeshOverrideStructurethat allows for a direct grid size specification in override structures, and
dl_minthat bounds the minimal grid size.
More material models to the material database such as gold from Olman2012.
random_seedoption to set the random seed, and
bound_f_lowerto set the lower bound of pole frequency.
Introduced the option to project fields at near, intermediate, and far distances using an exact Green’s function formalism which does not make far-field approximations. This can be enabled in any
far_field_approx=False. A tutorial notebook as a comprehensive reference for field projections was added to the documentation.
Tracking of modes in
ModeSolverDatabased on overlap values, controlled through
Native broadband support for
Apodization option for frequency-domain monitors to ignore temporal data in the beginning and/or end of a simulation
Minimum flex unit charge reduced from
Default courant factor was changed from
A point dipole source placed on a symmetry plane now always has twice the amplitude of the same source in a simulation without the symmetry plane, as expected by continuity with the case when the dipole is slightly off the symmetry plane, in which case there are effectively two dipoles, the original one and its mirror image. Previously, the amplitude was only doubled for dipoles polarized normal to the plane, because of Yee grid specifics.
FluxTimeMonitorno longer snap fields to centers, but instead provide continuous interpolation of the flux over the exact geometry of the monitor.
Major refactor to internal handling of data structures, including pure
Datasetcomponents that do not depend on other
Tidy3Dcomponents and may therefore be used to define custom data in
Speed and memory usage improvement when writing and reading Tidy3d models to and from
Tidy3Dmodels containing custom data to
.jsonfile will log a warning and exclude the raw data from the file for performance reasons.
Material database reorganization and fixing a few references to the dispersion data.
Near2Farhas been replaced with
FieldProjection. For example,
The API for far field projections has been simplified and several methods have now become properties. For example, the radar cross section is now accessed as
Added a method
AbstractFieldProjectionDatato re-project far fields to different projection distances.
The API for
DiffractionDatawas refactored to unify it with the API for
The user no longer needs to supply
orders_ywhen creating a
DiffractionMonitor; all allowed orders are automatically generated and returned in the resulting
The user no longer needs to supply a
mediumwhen creating a
AbstractFieldProjectionMonitor; the medium through which fields are to be projected is now determined automatically based on the medium in which the monitor is placed.
The following attributes of
AbstractFieldProjectionMonitorare now properties rather than methods:
Some issues in
DiffractionMonitorthat is not
z-normal that could lead to solver errors or wrong results.
Bug leading to solver error when
num_layers = 0are used.
Bug leading to solver error when a
BlochBoundaryand not all field components are recorded.
When running a
path_diris created if not existing.
Ignore x axis when plotting 1D
Simulationcross sections to avoid plot irregularities.
Local web api tests.
Use Tidy3D logger for some warnings that used to use default python logging.
DiffractionMonitorfor decomposition of fields that are not in vacuum.
Bug in meshing an empty simulation with zero size along one dimension.
Bug causing error in the solver when a
PermittivityMonitoris present in the list of monitors and is not at the end of the list.
DiffractionMonitorto compute the power amplitude distribution in all diffraction orders in simulations of periodic structures.
PolySlabcan be oriented along
y, not just
Loading components without validation no longer supported as it is too unpredictable.
Webplots plugin was removed as it was cumbersome to maintain and no longer used in web UI.
Type field for
DataArraysubclasses written to
Explicit error message about
Near2Farmonitors in the presence of simulation symmetries.
Bug in 3D
Near2Farmonitors where surfaces defined in
exclude_surfaceswill no actually be excluded.
Bug in getting angles from
k-space values in
SimulationData.plot_fieldwhen getting the position along the normal axis for a 2D plot.
Bug in new simulation upload on Windows machines.
New classes of near-to-far monitors for server-side computation of the near field to far field projection.
Option to exlude
DataArrayFields from a
Option to save/load all models to/from
Option to load base models without validation.
Support negative sidewall angle for slanted
Option to specify only a subset of the S-matrix to compute in the S-matrix plugin, as well as to provide mapping between elements (due to symmetries).
More Lorentz-Drude material models to the material database.
Raise a more meaningful error if login failed after
Environment login credentials set to
""are now ignored and credentials stored to file are still looked for.
Improved subpixel coefficients computation around sharp edges, cornes, and three-structure intersections.
Major refactor of the way data structures are used internally.
ModeSolverDatais now also stored internally in
ModeSolver, and the
plot_fieldmethod can be called directly from
Field data for monitors that have a zero size along a given dimension is now interpolated to the exact
monitor.centeralong that dimension.
nloptfrom requirements, user-side material fitting now uses
Simulation- used to be input parameter when loading simulation data. A given
SimulationDatacan still be renormalized to a different source later on using the new
FluxTimeMonitor-s can now have a 3D box geometry, in which case the flux going out of all box surfaces is computed (optionally, some surfaces can be excluded).
Frequency-domain monitors require a non-empty list of frequencies.
Reduced the minimum flex unit cost to run a simulation to
Reduced the premium cost for dispersive materials in typical cases.
Added a cost for monitors that should be negligible in typical cases but affects large monitors that significantly slow down the simulation.
Bug in computing the
Bug in auto-mesh generation.
Ability to compute field projections server-side.
All Tidy3D components apart from data structures are now fully immutable.
Stopped support for python 3.6, improved support for python 3.10.
Web material fitter for lossless input data (no
kdata provided) will now return a lossless medium.
centerno longer a field of all
Geometrycomponents, instead only present when needed, removed in
Planargeometries no longer have a mandatory
lengthfield, but have
lengt_axisproperties for the center and length along the extrusion axis.
PolySlabnow defined exclusively through
In mode solver, allow precision to switch between double and single precision.
Near-to-far transformation tool is no longer a plugin, but is now part of Tidy3D’s new core data structures
Bug in plotting polarization of a nomral incidence source for some
Bloch vector values required to be real rather than complex.
Web security mitigation.
Bug in plotting when alpha is turned off in permittivity overlay.
Bug in plotting polarization of an angled incidence source (S,P -> P,S).
Throw warning if user tries to download data instances in
Arrow length plotting issues for infinite sources.
Issues with nonuniform mesh not extending exactly to simulation boundaries.
Bloch periodic boundary conditions, enabling modeling of angled plane wave.
GeometryGroupobject to associate several
Geometryintances in a single
Structureleading to improved performance for many objects.
Ability to uniquely specify boundary conditions on all 6
Options in field montitors for spatial downsampling and evaluation at yee grid centers.
BatchData.load()can load the data for a batch directly from a directory.
Utility for updating
Simulationobjects from old versions of
Tidy3dto current version.
web.functions for downloading only
Batchobjects automatically download their json file upon
gdspyto merge polygons from a gds cell.
ComponentModeler(S matrix tool) stores the
Batchrather than the
Custom caching of properties to speed up subsequent calculations.
Tidy3d configuration now done through setting attributes of
axis != 2.
Internal functions that may require hashing the simulation many times now use a
make_staticdecorator. This pre-computes the simulation hash and stores it, and makes sure that the simulation has not changed at the beginning and end of the function execution.
Speeding up initialization of
PolySlabwhen there is no dilation or slant angle.
Allow customizing data range that colormap covers in
Speeding up of the automatic grid generation using Rtree and other improvements.
Better handling of http response errors.
web.monitor, the estimated cost is only displayed when available; avoid “Unable to get cost” warning.
PolySlab.from_gds, the selected polygons are first merged if possible, before the
PolySlab-s are made. This avoids bugs e.g. in the case of slanted walls.
Bug in nonuniform mesh where the simulation background medium may be taken into account if higher than other structures overriding it.
copy()method of Tidy3d components is deep by default.
Maximum allowed number of distinct materials is now 65530.
Monitor/source opacity values also applied to associated arrows.
Auto meshing in the presence of symmetries ignores anything outside of the main symmetry quadrant.
If an interface is completely covered by another structure, it is ignored by the mesher.
Simulationthat allows more flexibility in defining the mesh.
GridSpec1dclass defining how the meshing along each dimension should be done, with sublcasses
CustomGridthat cover the functionality previously offered by supplying a float or a list of floats to
Simulation.grid_size. New functionality offered by
AutoGridsubclass, with the mesh automatically generated based on the minimum required steps per wavelength.
Opacity kwargs for monitor and source in
plotly-based requirements from core requrements file, can be added with
"pip install tidy3d-beta[plotly]".
Simulation.grid_specuses the default
GridSpec, which has
AutoGrid(min_steps_per_wvl=10)in each direction. To initialize a
Simulationthen it is no longer needed to provide grid information, if sources are added to the simulation. Otherwise an error will be raised asking to provide a wavelength for the auto mesh.
VolumeSourceis now called
S-matrix module now places the monitors exactly at the port locations and offsets the source slightly for numerical reasons (more accurate).
Fixed bug in
PolySlabvisualization with sidewalls.
Inheritance structure of
Better handling of only one
Added proper label to intensity plots.
Made all attributes
data.pyto clean up docs.
Proper handling of
Medium.eps_modelat frequency of
Simulation.grid_sizeis removed in favor of
SimulationDataAppGUI for visualizing contents of
SimulationPlotlyinterface for generating
PermittivityDatato store the complex relative permittivity as used in the simulation.
The maximum credit cost for a simulation can now be queried using
web.estimate_cost. It is also displayed by default during
Faster plotting for matplotlib and plotly.
SimulationDatanormalization keeps track of source index and can be normalized when loading directly from .hdf5 file.
Monitor data with symmetries now store the minimum required data to file and expands the symmetries on the fly.
Significant speedup in plotting complicated simulations without patch transparency.
When a list of
dlis provided as a
grid_sizealong a given direction, the grid is placed such that the total size
np.sum(dl)is centered at the simulation center. Previously, a grid boundary was always placed at the simulation center.
webapifunctions now only authenticate when needed.
Credentials storing folder only created when needed.
Added maximum number of attemtps in authentication.
Made plotly plotting faster.
Cached Simulation.medium and Simulation.medium_map computation.
PolySlabgeometries support dilation and angled sidewalls.
Percent done monitoring of jobs running longer than 10 seconds.
Can use vectorized spherical coordinates in
ModeSolverDataobject similar to
SimulationData, containing all the information about the modes.
ModeFieldDataallow the results of a mode solve run server-side to be stored.
Ordering of modes by polarization fraction can be specified in
Angled mode sources.
Significant speed improvement for
freqno longer passed to
ModeSolverupon init, instead a list of
Mode solver now returns
ModeSolverDataobject containing information about the mode fields and propagation constants as data arrays over frequency and mode index.
Reorganized some of the internal
Major improvements to
BatchDataobject that maps
Infinity stored as
strin json outputs, conforming to json file specifications.
No longer need to specify one of
SimulationData.plot_fieldif the monitor has a zero-sized dimension.
Simulation.run_timebut must be > 0 to upload to server.
Fixed issue where smatrix was not uploaded to pyPI.
Simulationsymmetries now fully functional.
Ability to perform near-to-far transformations from multiple surface monitors oriented along the x, y or z directions using
tidy3d.plugins.ComponentModelertool for scattering matrix calculations.
Major enhancements to near field to far field transformation tool: multiple monitors supported with arbitrary configuration, user control over sampling point density.
Fixed visualization bug in symmetry.
Clarified license terms to not include scripts written using the tidy3d python API.
Simulation symmetries are now enabled but currently only affect the mode solver, if the mode plane lies on the simulation center and there’s a symmetry.
Validator that mode objects with symmetries are either entirely in the main quadrant, or lie on the symmetry axis.
Simulation.plotly()makes a plotly figure of the cross section.
Dispersion fitter can parse urls from refractiveindex.info
Clarified license terms to not include scripts written using the tidy3d python API.
Fixed a bug in python 3.6 where polyslab vertices loaded differently from file.
Selmeier.from_dispersion()method to quickly make a single-pole fit for lossless weakly dispersive materials.
Stable dispersive material fits via webservice.
Allow to load dispersive data directly by providing URL to txt or csv file
Validates simulation based on discretized size.
Polyslab.from_gdsreturns a list of
PolySlabobjects imported from all polygons in given layer and dtype, can optionally specify single dtype.
Warning about structure close to PML disabled if Absorber type.
Source dft now ignores insignificant time amplitudes for speed.
New color schemes for plots.
Stable dispersive material fits via webservice.
Refined and updated documentation.
FieldMonitor.surface()to split volume monitors into their surfaces.
Units and annotation to data.
Web authentication using environment variables
callback_urlin web API to put job metadata when a job is finished.
Support for non uniform grid size definition.
Gaussian beam source.
Automated testing through tox and github actions.
Separated docs from @tylerflex in #78
Web API implemented by converting simulations to old tidy3D
Alpha Release Changes#
Solver speed improvement (gain depending on simulation + hardware details).
Bringing the speed of the non-angled mode solver back to pre-21.4.2 levels.
Improvements to subpixel averaging for dispersive materials.
Enabled web login using environment variables
Bugfix when running simulation with zero
More internal logging.
cSiin the material library.
Bugfix when downloading data on Windows.
Bugfix in material fitting tool when target tolerance is not reached.
New Gaussian beam source and example usage.
Modal sources and monitors in bent and in angled waveguides with tutorial.
Nyquist-limit sampling in frequency-domain monitors (much faster without loss of accuracy).
Support for Drude model of material dispersion.
Small bugfixes to some of the other dispersion models.
- PEC boundaries applied by default at the truncation of any boundary with PML, avoiding potential
issues with using periodic boundaries under the PML instead.
Source normalization no longer adding a spurious frequency-dependent phase to the fields.
Fixed bug in unpacking monitor fields with symmetries and
Lots of streamlining on the backend side.
Fixed bug with zero-size monitor plotting.
Fixed bug with empty simulation run introduced in 21.4.0.
A few small fixes.
Fixed nonlinear constraint in dispersive material fitting tool.
Fixed potential issue when a monitor stores neither
Fixed some backwards compatibility issues introduced in 184.108.40.206.
Frequency monitors can now optionally store the complex permittivity at the same locations where the E-fields are recorded, at the monitor frequencies.
Frequency monitors now also have an
'interpolate'keyword, which defaults to
Trueand reproduces the behavior of previous versions. If set to
False, however, the raw fields evaluated at their corresponding Yee grid locations are returned, instead of the fields interpolated to the Yee cell centers. This also affects the returned permittivity, if requested.
Reorganized internal source time dependence handling, enabling more complicated functionality in the future, like custom source time.
Total field in the simulation now sampled at the time step of the peak of the source time dependence, for better estimation of the shutoff factor.
A number of bug fixes, especially in the new plotting introduced in 220.127.116.11.
Speeding up structure visualizations.
- Structures now shown based on primitive definitions rather than grid discretization. This
then shows the physical structures but not what the simulation “sees”. Will add an option to display the grid lines in next version.
Bumped down matplotlib version requirement to 3.2 and python version requirement to 3.6.
Improved handling of PEC interfaces.- Reorganized and extended internal logging.
A number of fixes to the example notebooks and the colab integration.
Bumping back python version requirement from 3.8 to 3.7.
Hotfix to an internal bug in some simulation runs.
New dispersion fitting tool for material data and accompanying tutorial.
beta) Non-uniform Cartesian meshing now supported. The grid coordinates are provided
by hand to
Simulation. Next step is implementing auto-meshing.
DispersionModelobjects can now be directly used as materials.
Fixed bug to
Small bugs fixes/added checks for some edge cases.
Rehash of symmetries and support for mode sources and monitors with symmetries.
Anisotropic materials (diagonal epsilon tensor).
Rehashed error handling to output more runtime errors to tidy3d.log.
Job and Batch classes for better simulation handling (eventually to fully replace webapi functions).
A large number of small improvements and bug fixes.