v2.12.0.dev1
Pre-release
Pre-release
What's Changed
Added
TFSFsource now exposes anangular_specfield (FixedInPlaneKSpecorFixedAngleSpec) mirroringPlaneWave, enabling fixed-angle (frequency-independent propagation direction) TFSF setups for isolated scatterers. Fixed-angle TFSF rejectsPeriodicandBlochBoundarytransverse boundaries and is intended to be used with absorbing (PML/Absorber/StablePML) transverse boundaries; 2D simulations may keep the conventionalPeriodicon the zero-width out-of-plane axis as long as the wave's k-vector has no component along it.- Added
PointCloudFieldMonitorandPointCloudFieldDatafor frequency-domain E/H field sampling at custom point-cloud coordinates.PointCloudFieldDatais indexed by point, so structured-grid field plotting helpers such asSimulationData.plot_field()do not support it. - Added
SteadyChargeResidualMonitor, a debug-grade Charge-simulation monitor that records the per-node signed residual of each governing equation (residual_potentialfor the Poisson equation,residual_electronsfor the electron continuity equation,residual_holesfor the hole continuity equation, plusresidual_temperaturefor the heat equation when the thermal solver is active). The values are dimensionless and on the same scale as the simulation's convergence tolerance, so the nodes with the largest magnitude are where the solution least satisfies the equations, helping locate the least-converged regions. Available only through the accelerated solver. - Added the dipole emission study plugin, including
DipoleEmissionMonitor, coreDipoleEmissionDatamonitor outputs, pluginDipoleEmissionStudyDataresults,SphericalAngleDataArray, compact storedradiation_intensityoutputs, study-level derivedradiation_intensity_transferproperties, optional position- and axis-dependent integration weights, and optional selected-position radiation-intensity samples.
Changed
TFSFnow rejectsPeriodicandBlochBoundaryalong its injection axis at simulation construction time. The wave reaching such a boundary would be re-injected into the scattered-field region, breaking the TFSF formulation; previously this misconfiguration was accepted and produced silently incorrect results.- EME overlap and flux calculations now use the Yee-staggered integration convention used by mode normalization. This improves modal orthogonality and interface S-matrix reciprocity. EME scattering matrices may differ slightly from earlier versions, with the difference decreasing at higher grid resolution.
EMESimulationData.smatrix_in_basis, the local-solverEMESimulation.smatrix_in_basis, andEMESimulationData.field_in_basisre-express the scattering matrix (or field) in this same Yee convention by default (matching how it was computed), switching to colocated integration when a target basis stores its fields colocated (colocate=True) or sits on a different grid than the port modes, where native-Yee integration is impossible; if such a target cannot provide colocated integration (e.g. acolocate=FalseEMEModeSolverMonitor), the call raises rather than silently mixing conventions. Note thatEMEModeSolverMonitor— the usual way to provide a target basis — and field monitors default tocolocate=True, so monitor-based rebasing uses the colocated path unlesscolocate=Falseis set on the target monitor. A target basis's ownuse_colocated_integrationis not honored — the rebasing convention is otherwise fixed by the (Yee) port modes. - Improved runtime and memory usage for local single-precision mode solver runs with lossless materials and
num_pml=(0, 0).
Fixed
TFSFinjection in a lossy source-side medium now normalises the user-specified unit amplitude at the injection plane (the TFSF box face) for both the legacy constant-in-plane-k path and the new fixed-angle path; previously the legacy aux PlaneWave's unit reference sat two cells outside the box, so the wave reaching the box face was decayed byexp(-Im(kz)·2·dz)in lossy media.EMESimulationData.smatrix_in_basis,EMESimulation.smatrix_in_basis, andEMESimulationData.field_in_basisnow correctly handle modal bases that are not orthonormal in their overlap inner product — non-orthogonal combinations of port modes, modes on a different grid, or a custom field such as a Gaussian beam — and are exact for the same-modes round-trip. As a result, existing calls generally return a (corrected) different result; passskip_gram_normalization=Trueto skip the normalization and recover the previous behavior, which is exact only when the bases are already orthonormal in this overlap convention. Incomplete mode or field data now raisesSetupErrorrather than returning an incorrect S-matrix or field.EMESimulationData.field_in_basisrebases through the same trial-basis port modes assmatrix_in_basis(those kept on the S-matrix diagonal), so increasing-/ModeSortSpec-filtered and sweep-truncated modes are dropped consistently instead of leaking into the rebased field or being mis-rejected as incomplete data.- Endpoint extrapolation in
AxisAlignedPathIntegralandAxisAlignedVoltageIntegral(extrapolate_to_endpoints=True) no longer silently returns the un-extrapolated value with xarray >= 2025.11. - Fixed a divergence issue in WavePort simulations where port edges are exactly aligned to the simulation grid.
- Updated CHARGE documentation to reflect the accelerated solver, including convergence and tolerance guidance.
Full Changelog: v2.12.0.dev0...v2.12.0.dev1