Spatial discretisation and time integration#
Finite Integration Technique (FIT)#
Magnelio discretises Maxwell’s equations with the Finite Integration Technique on a pair of staggered, axis-aligned Cartesian grids (primal grid for electric grid voltages \(\hat e = \int \mathbf E \cdot \mathrm d\mathbf l\), dual grid for magnetic grid voltages \(\hat h\)). FIT is the integral-form reformulation of Maxwell’s equations introduced by Weiland [1]; the mature formulation with the discrete topological operators (curl matrix \(\mathbf C\), exact \(\mathbf S \mathbf C = 0\) identities) and diagonal material mass matrices is summarised in [2] and [3].
On a Cartesian dual-orthogonal grid the FIT time-domain update is algebraically identical to the finite-difference time-domain (FDTD) scheme of Yee [4] — the source code refers to the staggered grid as the “Yee grid” throughout. Magnelio keeps the FIT viewpoint because the material matrices, sub-cell conformal corrections and port-mode restrictions are all expressed as modifications of the diagonal mass matrices \(\mathbf M_\varepsilon, \mathbf M_\mu, \mathbf M_\sigma\) rather than of the stencil.
Implementation: operators/curl.py (sparse primal curl \(\mathbf C\);
the dual curl is \(\mathbf C^{\mathsf T}\)), operators/material_matrices.py
(diagonal mass matrices \(M_\varepsilon = \varepsilon_0\varepsilon_r
A_{\text{dual}}/l_{\text{primal}}\), \(M_\mu = \mu_0\mu_r
A_{\text{primal}}/l_{\text{dual}}\), plus \(M_\sigma\) and the magnetic
\(M_{\sigma^*}\)), fields/field_arrays.py (structure-of-arrays field
storage, DD-002).
Leapfrog time integration#
The time-domain solver (solver/fit_td.py) marches the fields with
the standard second-order leapfrog scheme, staggered by half a time
step:
Ohmic loss (\(\sigma\), and the magnetic \(\sigma^*\) on the H side) is folded into \(\alpha,\beta\) with the semi-implicit (time-averaged) conductor update, the standard exponential-free treatment of lossy media in FDTD/FIT; the scheme and its properties are textbook material [5]. The leapfrog scheme itself goes back to Yee [4].
Stability (CFL condition)#
The explicit leapfrog scheme is conditionally stable under the Courant–Friedrichs–Lewy criterion [6], in the FDTD form
(solver/stability.py, safety factors 0.90/0.95/0.99). The FDTD form
of the criterion is standard [5], but as a
worst-case product over per-axis minima it is loose on conformal
meshes, where partially filled sub-cells reduce the local mass-matrix
entries. The production time step is therefore taken from the sharp
algebraic criterion instead: the leapfrog is stable iff
with the spectral radius measured at solver setup by a matrix-free Lanczos iteration on the symmetrised operator (restricted to the degrees of freedom the update actually advances) and cached on the mesh. If the iteration does not converge, a row-sum (Gershgorin) upper bound on the same operator — strictly safe, typically within 20 % — takes its place. Partially filled cells therefore cannot destabilise the run, and they no longer throttle it either: the worst-case product under-estimates the stable step by an order of magnitude and more on curved conformal walls, while the measured limit stays near the geometric value.
Sub-cell corrections that scale \(M_\varepsilon\) and \(M_\mu\) in opposite directions (the thin-wire pair correction, the LC-consistent conformal coupling) are constructed to leave the pair product — and with it the local wave speed entering the CFL bound — unchanged; see the conformal geometry chapter.
Selectable precision#
The whole time-loop state (fields, update coefficients, CPML and
auxiliary ADE/SIBC states) can run in IEEE-754 single precision
(precision="single", the production default) or double precision
(DD-094). Accumulating quantities (energy reduction, DFT
accumulators, port arithmetic, geometry and mode solves) always stay
in double precision. This mixed-precision layout is engineering
practice in production FDTD/FIT codes, not a research method; the
observed error floor (\(\sim 10^{-6}\) relative on S-parameters)
corresponds to float32 rounding. Stability of the reduced-precision
auxiliary recursions follows from their contractive form
(\(|k| < 1\) for every decaying IIR branch); this is analysed per
operator in the repository (DD-094), not taken from the literature.
Simulation duration and energy stopping#
Runs are terminated either after a fixed number of steps or by an energy criterion: the total discrete field energy \(\tfrac12(\hat e^{\mathsf T} \mathbf M_\varepsilon \hat e + \hat h^{\mathsf T} \mathbf M_\mu \hat h)\) must decay a configurable number of dB below its peak (DD-019). Energy-based stopping is common engineering practice in time-domain S-parameter extraction; no specific publication is claimed.