Eigenmode analysis#
3D cavity eigenmode solver#
Resonant modes are computed from the discrete curl-curl generalised eigenvalue problem
(solver/eigenmode_3d.py), the standard FIT eigenformulation
[2, 3]. PEC walls
are imposed by degree-of-freedom elimination, which also removes the
gradient null space for all-PEC cavities (DD-009); PMC walls are the
natural boundary condition (DD-065).
The default backend is ARPACK shift-invert Lanczos
(scipy.sparse.linalg.eigsh with a SuperLU factorisation of
\(A - \sigma B\); DD-007), i.e. the implicitly restarted Arnoldi/Lanczos
method of Lehoucq, Sorensen and Yang [56].
The shift \(\sigma\) is auto-estimated
boundary-condition-aware, an in-house heuristic (DD-010).
Two experimental backends exist (DD-033):
a CHOLMOD Cholesky path with tree-cotree gauging to eliminate the gradient null space; tree-cotree/spanning-tree gauging of curl-curl systems is established FEM practice, e.g. Albanese and Rubinacci [57] and Manges and Cendes [58]; CHOLMOD is [59];
an AMG-preconditioned path via pyamg [60], documented as not recommended (scalar smoothed-aggregation AMG does not achieve mesh-independent convergence on the vector curl-curl operator — a known limitation in the literature on AMG for Maxwell problems).
Periodic structures: Bloch boundaries and the dispersion diagram#
A face pair declared "Periodic" turns the cavity problem into a
unit-cell problem of an infinite periodic structure. The field in
one period leads the next by a phase advance \(\varphi\) (Floquet’s
theorem, in the periodic-waveguide form given by Collin
[17]): on the far plane of the period the tangential
electric edge voltages are those of the near plane times
\(e^{-\mathrm j\varphi}\). The solver imposes this by a congruence
transformation — a projector \(\mathbf P\) identifies every far-plane
edge with its near-plane image (times the phase factor), and the
reduced operators \(\mathbf P^{\mathsf H} \mathbf A \mathbf P\),
\(\mathbf P^{\mathsf H} \mathbf B \mathbf P\) are solved with the
same shift-invert machinery. The far plane contributes no material
metric of its own: the FIT material matrices book a full dual cell on
every domain face, and that full cell stands for the identified pair.
For \(\varphi = 0\) and \(\varphi = \pi\) the projector is real and the
problem stays real symmetric; in between it is complex Hermitian and
the eigenvectors are travelling Bloch modes, which only the SuperLU
backend solves. Sweeping \(\varphi\) from \(0\) to \(\pi\) traces the
dispersion (Brillouin) diagram \(f(\varphi)\) of the structure; the
band edges \(\varphi = 0\) and \(\varphi = \pi\) coincide with the classic
wall-type calculations (electric or magnetic wall at the cell
boundary), which is the check the implementation is held to, and for
a chain of electrically coupled cells the curve follows
\(f^2 = f_{\pi/2}^2 (1 - k\cos\varphi)\) with \(k\) the cell-to-cell
coupling [61].
Verified against the discrete dispersion relation of the empty
periodic box (exact to solver tolerance for \(\varphi\) between 0 and
180 degrees, tests/integration/test_floquet_eigenmode.py).
Quality factors of eigenmodes are evaluated with the perturbative wall-loss route (see conductor losses) [16, 39].
From a mode into the time domain#
EigenmodeResult.field(n) hands mode n over as a
magnelio.fields.FieldState — the same container the monitors and the
field sources speak. Fed to SourceFieldInitial, it becomes the
starting state of a transient march, which rings down at the mode’s
frequency and decays at its loaded Q. The eigenmode solver and the
time-domain march discretise the same curl-curl operator, so the two
frequencies agree to the accuracy of the time-step-dependent
dispersion; the ring-down adds the loss information the lossless
eigenproblem does not carry.
2D mode solver#
The port-plane 2D eigenmode machinery (curl-curl restriction, TEM/QTEM Laplace) is described in the ports chapter; it shares the matrices and the ARPACK backend with the 3D solver.