All notable changes to this project will be documented in this file.
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 far fields server-side on GPUs.
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.