meanas/docs/api/fdfd.md

77 lines
3.5 KiB
Markdown

# fdfd
::: meanas.fdfd
## Core operator layers
::: meanas.fdfd.functional
::: meanas.fdfd.operators
::: meanas.fdfd.solvers
::: meanas.fdfd.scpml
::: meanas.fdfd.farfield
## Bloch magnetic materials
Bloch state vectors store the transverse Fourier coefficients of magnetic flux
`B = mu * H`. They equal `H` when permeability is omitted. Pass the same `mu`
to `bloch.hmn_2_hxyz(...)` and `bloch.hmn_2_exyz(...)` when converting solved
vectors to fields. The eigensolver uses the projected `mu**-1` energy metric
for finite positive real permeability, including anisotropic and spatially
varying profiles. Its preconditioner remains finite at the Gamma point.
## Far-field normalization
The near-to-far transform includes the cell area `dx * dy`, so normalized
far-field amplitudes describe a Fourier integral and converge under spatial
refinement. This changes amplitudes previously returned as unweighted FFT sums.
The inverse applies the matching Fourier quadrature and returns spacings for
the requested output shape. Both transforms center their origins at index
`size // 2`; padding and cropping preserve that sample. The inverse does not
modify input spectra.
Transforms use the library's `exp(+i omega t)` time convention: outgoing plane
waves vary as `exp(-i k dot r)`, so the angular projection uses a positive
Fourier phase. The inverse uses a negative phase. Far-field vector pairs are
ordered as polar and azimuthal components; near-field pairs are Cartesian.
## Solver and port calibration
The default QMR wrapper raises `RuntimeError` on breakdown or failure to
converge. PEC rows impose zero electric fields with unit diagonal entries;
`solvers.generic` zeroes the corresponding source and initial-guess entries.
H-only and EH operators impose analogous constraints for PMC locations.
FDFD port calibration uses the complete incoming-amplitude matrix from all
excitations, solving `S @ incoming_amplitudes = raw_outgoing_amplitudes`.
Diagnostics include these matrices and the incoming/outgoing flux Gram
matrices. Guided powers retain cross terms between nonorthogonal modes.
Lossless modes at or above the propagation-grid band edge require a finer
mesh for power normalization. Lorentz-normalized evanescent modes use the
decaying spatial branch. Expansion on graded grids uses each electric
component's own Yee intervals.
## SCPML conventions
`stretch_with_scpml` now uses `-1` for the low-index face and `+1` for the
high-index face, matching CPML and propagation conventions. It returns copied
widths by default; pass `copy=False` to request mutation explicitly.
Both SCPML builders accept `kappa_function(depth)` for real stretching and
`max_imag_ratio` to limit the final dimensionless `abs(Im(s))/Re(s)`. Start a
mode-solver convergence study with `max_imag_ratio=1.0`: overly strong imaginary
stretching can produce above-light-line PML artifacts. The cap is not a general
spectral guarantee, and weaker absorption can increase boundary reflections.
Check domain size, PML thickness, strength, mode localization, and residuals.
The general scattering profile remains uncapped by default.
`uniform_grid_scpml` builds unit widths by applying `stretch_with_scpml` to
both faces of each enabled axis. Both builders divide imaginary grading by
physical layer thickness and sample electric widths at cell centers and
magnetic widths at cell edges. This corrects the uniform builder's previous
thickness-independent strength and reversed E/H sample offsets; retune existing
uniform-builder profiles using domain/PML convergence checks.