All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.8.2 - 2023-1-12
- warning if users install via
tidy3d-beta
on pip, from now on, best to usetidy3d
directly. - support for non-dispersive media in
AnisotropicMedium
- Support shapely version >=2.0 for all python versions.
- Internally refactor
Simulation.epsilon
and moveeps_diagonal
toStructure
in 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.
1.8.1 - 2022-12-30
- Environment variable
TIDY3D_SSL_VERIFY
to optionally disable SSL authentication (default isTrue
). - Billed FlexUnit cost displayed at the end of
web.monitor
.
- Bug on Windows systems with submitting
CustomFieldSource
data to the server. - Fix to
FieldData.symmetry_expanded_copy
for monitors withcolocate=True
.
- The
Simulation
version updater is called every time aSimulation
object is loaded, not justfrom_file
. - Boundary specifications that rely on the default
Periodic
boundary now print a deprecation warning, as the default boundaries will change toPML
in Tidy3D 2.0.
1.8.0 - 2022-12-14
CustomFieldSource
that can inject arbitrary source fields.ElectromagneticFieldData.flux
property for data corresponding to 2D monitors, andElectromagneticFieldData.dot
method for computing the overlap integral over two sets of frequency-domain field data.- Data corresponding to 2D
FieldMonitor
andFieldTimeMonitor
, as well as toModeSolverMonitor
, now also storesgrid_correction
data 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 theflux
anddot
methods. - Resonance finding plugin for estimating resonance frequency and Q-factor of multiple resonances from time-domain data.
Accessed through
tidy3d.plugins.ResonanceFinder
. - New
.updated_copy(**kwargs)
method to all tidy3d objects to add a more convenient shortcut to copying an instance with updated fields, i.e.med.copy(update=dict(permittivity=3.0))
becomesmed.updated_copy(permittivity=3.0)
. - Test support for python 3.11.
sidewall_angle
option forCylinder
that allows aCylinder
to be tuned into a conical frustum or a cone.reference_plane
forPolySlab
that provides options to define the vertices at the bottom, middle, or top of thePolySlab
.- Automesh generation:
MeshOverrideStructure
that allows for a direct grid size specification in override structures, anddl_min
that bounds the minimal grid size. - More material models to the material database such as gold from Olman2012.
- In
AdvancedFitterParam
forStableDispersionFitter
,random_seed
option to set the random seed, andbound_f_lower
to 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
AbstractFieldProjectionMonitor
by settingfar_field_approx=False
. A tutorial notebook as a comprehensive reference for field projections was added to the documentation. - Tracking of modes in
ModeSolverData
based on overlap values, controlled throughModeSpec.track_freq
. - Native broadband support for
GassuainBeam
AstigmaticGaussianBeam
, andModeSource
through thenum_freqs
argument. - 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
0.1
to0.025
. - Default courant factor was changed from
0.9
to0.99
. - 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.
FluxMonitor
andFluxTimeMonitor
no 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
Dataset
components that do not depend on otherTidy3D
components and may therefore be used to define custom data inTidy3D
models. - Speed and memory usage improvement when writing and reading Tidy3d models to and from
.hdf5
files. - Writing
Tidy3D
models containing custom data to.json
file 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.
- The name
Near2Far
has been replaced withFieldProjection
. For example,Near2FarAngleMonitor
is nowFieldProjectionAngleMonitor
. - 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
.radar_cross_section
, not.radar_cross_section()
. - Added a method
renormalize_fields
toAbstractFieldProjectionData
to re-project far fields to different projection distances. - The API for
DiffractionData
was refactored to unify it with the API forAbstractFieldProjectionData
. - The user no longer needs to supply
orders_x
andorders_y
when creating aDiffractionMonitor
; all allowed orders are automatically generated and returned in the resultingDiffractionData
. - The user no longer needs to supply a
medium
when creating aDiffractionMonitor
or anyAbstractFieldProjectionMonitor
; 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
AbstractFieldProjectionMonitor
are now properties rather than methods:fields_spherical
,fields_cartesian
,power
,radar_cross_section
.
- Some issues in
DiffractionMonitor
that is notz
-normal that could lead to solver errors or wrong results. - Bug leading to solver error when
Absorber
boundaries withnum_layers = 0
are used. - Bug leading to solver error when a
FieldMonitor
crosses aBlochBoundary
and not all field components are recorded. - When running a
Batch
,path_dir
is created if not existing. - Ignore shapely
STRtree
deprecation warning. - Ignore x axis when plotting 1D
Simulation
cross sections to avoid plot irregularities. - Local web api tests.
- Use Tidy3D logger for some warnings that used to use default python logging.
- Replaced
gdspy
dependency withgdstk
.
1.7.1 - 2022-10-10
medium
field inDiffractionMonitor
for 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
PermittivityMonitor
is present in the list of monitors and is not at the end of the list.
1.7.0 - 2022-10-03
DiffractionMonitor
to compute the power amplitude distribution in all diffraction orders in simulations of periodic structures.PolySlab
can be oriented alongx
ory
, not justz
.
- 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.
1.6.3 - 2022-9-13
- Type field for
DataArray
subclasses written tohdf5
.
- Docstring for
FluxMonitor
andFluxTimeMonitor
.
- Explicit error message about
grid_size
deprecation.
1.6.2 - 2022-9-6
- Support for
Near2Far
monitors in the presence of simulation symmetries.
- Bug in 3D
Near2Far
monitors where surfaces defined inexclude_surfaces
will no actually be excluded. - Bug in getting angles from
k
-space values inNear2FarKSpaceMonitor
. - Bug in
SimulationData.plot_field
when getting the position along the normal axis for a 2D plot.
1.6.1 - 2022-8-31
- Bug in new simulation upload on Windows machines.
1.6.0 - 2022-8-29
- New classes of near-to-far monitors for server-side computation of the near field to far field projection.
- Option to exlude
DataArray
Fields from aTidy3dBaseModel
json. - Option to save/load all models to/from
hdf5
format. - Option to load base models without validation.
- Support negative sidewall angle for slanted
PolySlab
-s. - 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
MAX_ATTEMPTS
. - 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.
ModeFieldMonitor
->ModeSolerMonitor
with associatedModeSolverData
.ModeSolverData
is now also stored internally inModeSolver
, and theplot_field
method can be called directly fromModeSolver
instead ofModeSolverData
.- Field data for monitors that have a zero size along a given dimension is now interpolated to the exact
monitor.center
along that dimension. - Removed
nlopt
from requirements, user-side material fitting now usesscipy
. - New Field
normalize_index
inSimulation
- used to be input parameter when loading simulation data. A givenSimulationData
can still be renormalized to a different source later on using the newSimulationData.renormalize
. FluxMonitor
andFluxTimeMonitor
-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
0.1
. - 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.
1.5.0 - 2022-7-21
- Bug in computing the
bounds
ofGeometryGroup
. - 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
k
data provided) will now return a lossless medium. sort_by
changed tofilter_pol
inModeSpec
.center
no longer a field of allGeometry
components, instead only present when needed, removed inPolySlab
andGeometryGroup
.Planar
geometries no longer have a mandatorylength
field, but havecenter_axis
andlengt_axis
properties for the center and length along the extrusion axis.PolySlab
now defined exclusively throughslab_bounds
, whileCylinder
throughcenter
andlength
.- 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
1.4.1 - 2022-6-13
- Bug in plotting polarization of a nomral incidence source for some
angle_phi
. - Bloch vector values required to be real rather than complex.
- Web security mitigation.
1.4.0 - 2022-6-3
- 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
yaml
orjson
format. - 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.
GeometryGroup
object to associate severalGeometry
intances in a singleStructure
leading to improved performance for many objects.- Ability to uniquely specify boundary conditions on all 6
Simulation
boundaries. - 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
Simulation
objects from old versions ofTidy3d
to current version. - Explicit
web.
functions for downloading onlysimulation.json
andtidy3d.log
files.
Batch
objects automatically download their json file upondownload
andload
.- Uses
shapely
instead ofgdspy
to merge polygons from a gds cell. ComponentModeler
(S matrix tool) stores theBatch
rather than theBatchData
.- Custom caching of properties to speed up subsequent calculations.
- Tidy3d configuration now done through setting attributes of
tidy3d.config
object.
1.3.3 - 2022-5-18
- Bug in
Cylinder.inside
whenaxis != 2
.
AstigmaticGaussianBeam
source.
- Internal functions that may require hashing the simulation many times now use a
make_static
decorator. 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
PolySlab
when there is no dilation or slant angle. - Allow customizing data range that colormap covers in
plot_field
. - Speeding up of the automatic grid generation using Rtree and other improvements.
- Better handling of http response errors.
- In
web.monitor
, the estimated cost is only displayed when available; avoid "Unable to get cost" warning. - In
PolySlab.from_gds
, the selected polygons are first merged if possible, before thePolySlab
-s are made. This avoids bugs e.g. in the case of slanted walls.
1.3.2 - 2022-4-30
- Bug in nonuniform mesh where the simulation background medium may be taken into account if higher than other structures overriding it.
1.3.1 - 2022-4-29
- The
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.
1.3.0 - 2022-4-26
- New
grid_spec
Field inSimulation
that allows more flexibility in defining the mesh. GridSpec1d
class defining how the meshing along each dimension should be done, with sublcassesUniformGrid
andCustomGrid
that cover the functionality previously offered by supplying a float or a list of floats toSimulation.grid_size
. New functionality offered byAutoGrid
subclass, with the mesh automatically generated based on the minimum required steps per wavelength.- New
PointDipole
source. - Opacity kwargs for monitor and source in
sim.plot
. - Separated
plotly
-based requirements from core requrements file, can be added with"pip install tidy3d-beta[plotly]"
.
Simulation.grid_spec
uses the defaultGridSpec
, which hasAutoGrid(min_steps_per_wvl=10)
in each direction. To initialize aSimulation
then 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.VolumeSource
is now calledUniformCurrentSource
.- 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
PolySlab
visualization with sidewalls. - Inheritance structure of
Source
reorganized. - Better handling of only one
td.inf
inBox.from_bounds
. - Added proper label to intensity plots.
- Made all attributes
Field()
objects indata.py
to clean up docs. - Proper handling of
Medium.eps_model
at frequency oftd.inf
andNone
.
Simulation.grid_size
is removed in favor ofSimulation.grid_spec
.
1.2.2 - 2022-4-16
SimulationDataApp
GUI for visualizing contents ofSimulationData
intidy3d.plugings
.SimulationPlotly
interface for generatingSimulation.plot()
figures usingplotly
instead ofmatplotlib
.- New
PermittivityMonitor
andPermittivityData
to 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 duringweb.upload
.
- Faster plotting for matplotlib and plotly.
SimulationData
normalization 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
dl
is provided as agrid_size
along a given direction, the grid is placed such that the total sizenp.sum(dl)
is centered at the simulation center. Previously, a grid boundary was always placed at the simulation center.
1.2.1 - 2022-3-30
webapi
functions 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.
1.2.0 - 2022-3-28
PolySlab
geometries support dilation and angled sidewalls.- Percent done monitoring of jobs running longer than 10 seconds.
- Can use vectorized spherical coordinates in
tidy3d.plugins.Near2Far
. ModeSolver
returns aModeSolverData
object similar toSimulationData
, containing all the information about the modes.ModeFieldMonitor
andModeFieldData
allow the results of a mode solve run server-side to be stored.- Plotting of
ModeFieldData
fields inSimulationData.plot_field
andModeSolverData.plot_field
. - Ordering of modes by polarization fraction can be specified in
ModeSpec
. - Angled mode sources.
- Significant speed improvement for
Near2Far
calculations. freq
no longer passed toModeSolver
upon init, instead a list offreqs
passed toModeSolver.solve
.- Mode solver now returns
ModeSolverData
object containing information about the mode fields and propagation constants as data arrays over frequency and mode index. - Reorganized some of the internal
Source
classes. - Major improvements to
Batch
objects.Batch.run()
returns aBatchData
object that mapstask_name
toSimulationData
. - Infinity stored as
str
in json outputs, conforming to json file specifications. - No longer need to specify one of
x/y/z
inSimulationData.plot_field
if the monitor has a zero-sized dimension. Simulation.run_time
but must be > 0 to upload to server.
1.1.1 - 2022-3-2
- Fixed issue where smatrix was not uploaded to pyPI.
1.1.0 - 2022-3-1
Simulation
symmetries 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.Near2Far
. tidy3d.plugins.ComponentModeler
tool 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.
1.0.2 - 2022-2-24
- 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.
1.0.1 - 2022-2-16
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_gds
returns a list ofPolySlab
objects 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.
1.0.0 - 2022-1-31
- Stable dispersive material fits via webservice.
- Refined and updated documentation.
0.2.0 - 2022-1-29
FieldMonitor.surface()
to split volume monitors into their surfaces.- Units and annotation to data.
- Faster preprocessing.
- Web authentication using environment variables
TIDY3D_USER
andTIDY3D_PASS
. callback_url
in 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.
0.1.1 - 2021-11-09
- PML parameters and padding Grid with pml pixels by @momchil-flex in #64
- Documentation by @tylerflex in #63
- Gds import from @tylerflex in #69
- Loggin by @tylerflex in #70
- Multi-pole Drude medium by @weiliangjin2021 in #73
- Mode Solver: from @tylerflex in #74
- Near2Far from @tylerflex in #77
- Separated docs from @tylerflex in #78
0.1.0 - 2021-10-21
- Web API implemented by converting simulations to old tidy3D
- 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
TIDY3D_USER
andTIDY3D_PASS
.
- Bugfix when running simulation with zero
run_time
. - More internal logging.
- Fixed unstable
'Li1993_293K'
variant ofcSi
in 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 <examples/GratingCoupler.html>
__. - Modal sources and monitors in bent and in angled waveguides with
tutorial <examples/Modes_bent_angled.html>
__. - 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
interpolate=False
. - 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
'E'
nor'H'
. - Fixed some backwards compatibility issues introduced in 21.3.1.5.
- 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 toTrue
and reproduces the behavior of previous versions. If set toFalse
, 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 21.3.1.4.
- Reorganized plotting:
- 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.
- Added
tidy3d.__version__
. - 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 <examples/Fitting.html>
__. - (
beta
) Non-uniform Cartesian meshing now supported. The grid coordinates are provided by hand toSimulation
. Next step is implementing auto-meshing. DispersionModel
objects can now be directly used as materials.- Fixed bug to
Cylinder
subpixel averaging. - 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.