v2.12.0.dev2
Pre-releaseWhat's Changed
Added
- Added
Dx,Dy, andDzoutput support toPointCloudFieldMonitor, reconstructingD / epsilon_0from raw E-field samples and diagonal Yee permittivity; sampled off-diagonal Yee permittivity emits a warning and uses diagonal components only. - Added
gds_precisiontoGeometry.to_gds_file(),Structure.to_gds_file(), andSimulation.to_gds_file()to control the coordinate precision written to GDS exports. - Added
merge_adjacenttoGeometry.from_gds(); setmerge_adjacent=Trueto merge fractured same-layer GDS polygons during import for roundtrip reconstruction. - HeatSimulation and HeatChargeSimulation cloud runs now create a volume mesh before running the solver; use web.run(), run_async(), Job.run(), Job.step(), Batch.run(), or Batch.step() instead of separate upload/start/monitor calls for these simulations. Uniform Heat/HeatCharge batches advance the mesh and solver workflow automatically, with Batch.run() starting each solver step as soon as that simulation's mesh step completes. Batch.estimate_cost() reports the summed cost of the shared next workflow step for supported uniform batches; after estimating the mesh step, run it first before estimating the solver step. Batch.estimate_cost() raises for mixed or non-uniform multi-step batches; use Job.estimate_cost() per job in those cases. Cache-only batch results may record
NoneinBatchData.task_idsbecause no server task ID exists. Mixed batches containing both regular simulations and Heat/HeatCharge simulations run those groups separately; split them into separate batches for maximum parallelism. - Added thermionic Schottky contacts to the accelerated charge solver (DC and small-signal AC). Schottky physics is an opt-in on
VoltageBCviamodel="schottky_mott"; the Mott rulephi_Bn = W - chi,phi_Bp = E_g - phi_Bnis built from per-medium material properties —work_functionon the adjacentChargeConductorMediumandelectron_affinity/richardson_electron/richardson_holeon the adjacentSemiconductorMedium. Defaultmodel="ohmic"is the standard ohmic contact. Schottky contacts compose withSSACAnalysis/IsothermalSSACAnalysis, enabling Mott-Schottky1/C^2extraction on Schottky diodes. - Native autograd support for
FluxMonitorusing hidden forward field storage in autograd runs. Setenable_adjoint=TrueonFluxMonitorobjects whose.fluxoutput is used in an autograd objective; this stores hidden surface field data for all requested flux-monitor frequencies. - Added
PalankovskiQuayApproxCarrierLifetime: doping- and temperature-dependent SRH lifetime in the Palankovski–Quay empirical Scharfetter form. Supported by the accelerated charge solver only. - Added faster adjoint source construction for
ModeMonitor,GaussianOverlapMonitor,AstigmaticGaussianOverlapMonitor, andDiffractionMonitordata with many active amplitudes. - Improved polygon triangulation performance using Shapely constrained Delaunay triangulation.
LayerRefinementSpecnow refines axis-unaligned in-plane metal edges (in_plane_edge_refinement, default"mirror_corner") and resolves small disjoint metal geometries such as vias (min_steps_per_geometry, default2), with a tunableCornerFinderSpec.axis_aligned_angle_threshold; both are on by default and give existing setups a finer mesh, set them toNoneto keep the previous mesh.ModeTimeMonitorrecords time-domain modal amplitudes at a waveguide
cross-section, projecting the running Yee-grid fields onto the mode profiles
solved at a single frequency (freq_spec, defaulting to the first source's
central frequency).SolidMediumnow accepts an optionalvelocityvector (inum/s;from_si_unitstakesm/sand converts), enabling a convective transport term in heat simulations for structures using that medium (bothcapacityanddensityare required whenvelocityis nonzero).FluxMonitorandFluxTimeMonitornow support staggered Yee-grid surface integration viause_colocated_integration=False, computed on the server with the same scheme asFieldMonitor(colocate=False, use_colocated_integration=False)flux, keeping tangential fields at their native Yee positions to avoid interpolation across material discontinuities.ThermalContactResistanceboundary condition for heat simulations: an interfacial thermal resistance (thermal contact / Kapitza resistance, inK*um^2/W;from_si_unitstakesm^2*K/W) placed on aStructureStructureInterfaceorMediumMediumInterfaceallows a temperature jump proportional to the heat flux across the interface between two touching solids.- Added
tidy3d.web.refresh_licenses()andtidy3d configure --refresh-licensesto clear cached local license entitlements so the next local license check fetches current server state. Successful API key or API endpoint configuration updates now refresh local license state automatically. Rejected configuration updates do not refresh local license state; when combined with explicit refresh, the command or call reports that the cache was not refreshed. If automatic refresh fails after configuration is saved,tidy3d configureexits nonzero andweb.configure(...)raises while leaving the saved configuration in place. - Schottky contacts (
VoltageBCwithmodel="schottky_mott") now support Fermi-Dirac carrier statistics (fermi_dirac=Truein the charge analysis spec), enabling Schottky devices with degenerately doped semiconductor regions in DC and small-signal AC analyses. - Added
PointCloudPermittivityMonitorfor recording diagonal permittivity components for requested point clouds by sampling each component from its nearest nativeEx/Ey/EzYee-grid location. MeshOverrideStructureaccepts amin_steps_per_sizefield to set the grid size relative to the structure's bounding box (bounding box size divided by the requested number of steps, ignored on axes whose bounding box size is zero or infinite); when bothdlandmin_steps_per_sizeare set along a dimension, the finer grid size is used.dlis now optional (defaults to no override) so an override can be specified withmin_steps_per_sizealone.- Added
tidy3d.web.diagnose_connection()and thetidy3d diagnose-connectionCLI for measuring Tidy3D API reachability and storage download throughput. - Added
penetrabletoLossyMetalMedium: whenTrue, the metal is solved as a regular conductive medium with subpixel averagingSimulation.subpixel.dielectric, instead of the lossy-metal-specific handling selected bySimulation.subpixel.lossy_metal.
Changed
- Changed the default
cSimaterial-library variant fromGreen2008toPalik_LowLoss. Accessing thecSidefault medium implicitly now emits a migration warning. Callers that need pre-change results should requestGreen2008explicitly, including in the 1.2 to 1.45 um overlap where both variants are valid.Palik_LowLossis valid from 1.2 to 250 um.Green2008covers pre-change results from 0.25 to 1.2 um, andPalik_Lossyis available from 0.1 to 1.4 um when the lossy Palik model is desired. - Changed the
cSimaterial-librarySi_MultiPhysicsoptical model fromGreen2008toPalik_LowLoss, aligning it with the newcSidefault optical model. - Updated tidy3d MCP startup for FastMCP 3.2.4 compatibility and documented exact remote MCP endpoint URLs for custom deployments.
- Mesh override structures with
shadow=Falsenow reuse a nearby existing grid line instead of always inserting a new one at their bounding box, so refined regions add fewer grid lines; affected setups may see slightly fewer or shifted grid lines around such overrides. - Changed adjoint gradients to skip sources whose effective magnitude underflows solver precision and treat those contributions as zero.
HeatChargeSimulationnow raises a setup error when heat-solver features are requested in a non-isothermal charge analysis: solid-medium advection (SolidMedium.velocity) and resistive interfaces (ThermalContactResistance) are applied by the heat solver (including heat coupled with electrical conduction) but were previously ignored silently in non-isothermal charge (coupled charge+heat) runs. Heat, conduction+heat, and isothermal charge analyses are unaffected.ThermalContactResistanceis now also listed in the heat boundary-conditions API reference.- Path integrals with
extrapolate_to_endpoints=False(the default for current integrals) now use a centered box-rule treatment at the endpoints instead of linear extrapolation, slightly changing coarse-mesh results forAxisAlignedCurrentIntegral,path_integrals_from_lumped_element,CustomImpedanceSpec.from_bounding_box(used byTerminalWavePort), lumped ports, andTerminalComponentModeler. Voltage integrals (defaultextrapolate_to_endpoints=True) are unchanged. - Made
Geometry.to_gds_file(),Structure.to_gds_file(), andSimulation.to_gds_file()raiseSetupErrorwhen the requested precision is too fine for the exported coordinates or when exported coordinates are non-finite. - EMEModeSpec.precision now defaults to "double"; set precision="auto" to resolve precision per EME cell -- double where that cell's mode solve contains a good conductor, single otherwise.
EME monitor storage-size estimates now account for the double-precision (complex128) data EME writes (previously about 2x low); simulations near the storage limit may now report a larger size or exceed it. - Heat and HeatCharge solver tasks are now billed based on their associated computational cost, like other solvers. For Heat and HeatCharge workflow jobs,
Job.estimate_cost()andBatch.estimate_cost()now explicitly state when an estimate is for the mesh step only and thatJob.step()orBatch.step()should be run before estimating the solver step. For variable-cost charge solves, estimates now show a typical FlexCredit cost separately from the maximum cost when the server provides one. The billed charge-solver cost depends on the solver iterations run to convergence; this is usually much smaller than the maximum allowed iterations, but hard-to-converge cases can reach the maximum cost.
Fixed
-
Fixed
ModeSimulation.epsilon()whenconfig.simulation.use_local_subpixelenables local subpixel averaging. -
Fixed
SimulationGDS exports so vacuum/background cutouts are preserved more reliably, including when exporting holes on the default layer and when mixing mapped and unmapped media in the same layout. -
Corrected the
convergence_dvdescription inSteadyChargeDCAnalysis: the accelerated charge solver applies it only to multi-voltage sweeps (inserting intermediate warm-start bias points), while the from-zero bias ramp it previously described applies to the legacy solver.Validation now rejects providing more than one multi-voltage sweep array across
VoltageBCsources of any type; previously a sweptSSACVoltageSourcealongside a sweptDCVoltageSourcewas silently accepted with ambiguous sweep selection. -
Fixed EME coefficient normalization to use absolute real mode flux and leave zero-flux
modes unscaled. All four interface S-matrix blocks are renormalized with the
same absolute-real-flux rule, using flux data for both EME cells adjacent to
each interface. DownsampledEMECoefficientMonitordata must use
eme_cell_interval_space=1when requesting normalized interface S matrices.
Repeated-grid coefficient data must provide flux on the same virtual-cell
eme_cell_indexcoordinates before normalizing A/B fields. -
Fixed
FieldMonitorandFieldTimeMonitorflux over-counting under periodic and Bloch boundaries for monitors that span or exceed the simulation domain when using the experimental optionuse_colocated_integration=False; default and colocated monitors were not affected. -
Fixed nonzero diffraction-order adjoint plane waves to use single-frequency injection and avoid broadband grazing-angle artifacts.
-
PolySlabnow accepts polygons with arc segments (bulges) that enclose a finite area even when theirverticesare collinear; previously such polygons were rejected with "The polygon almost collapses to a 1D curve." -
Fixed repeated autograd gradient evaluations so matching cached adjoint results are reused.
-
Fixed component modeler FlexCredit cost estimates that could be lower than the real cost when the simulation
run_timeis aRunTimeSpec; the estimate now resolves the run time from the modeler's port excitation instead of the source-less base simulation. -
Fixed excessive memory retention during
DesignSpace.run(fn_pre, fn_post)workflows that run batched simulations. -
A non-penetrable
LossyMetalMediumis now rejected as a component of anAnisotropicMediumat construction time. -
Fixed
structure_priority_modebeing ignored when aWavePortis converted to a mode solver viato_mode_solver/to_mode_simulation.
Full Changelog: v2.12.0.dev1...v2.12.0.dev2