[fdtd] reject zero and invalid CPML attenuation

Require a finite negative ln_R_per_layer before coefficient evaluation. Document None entries as the supported way to disable a face, and cover zero, signed zero, positive, and nonfinite targets with and without frequency shift.

Validation: 209 focused tests passed; Ruff passed.
This commit is contained in:
Forgejo Actions 2026-10-18 23:10:36 -07:00
commit 7b01ddd789
3 changed files with 17 additions and 1 deletions

View file

@ -18,3 +18,7 @@ CPML derivatives use electric widths for forward differences and magnetic
widths for backward differences. `cpml_params(..., dx=1.0)` specifies the uniform
physical cell width normal to a face; arbitrary nonuniform PML grading is not
implemented by this constructor. Scale the timestep consistently with the grid.
`ln_R_per_layer` must be finite and strictly negative. Zero attenuation raises
`ValueError`; disable individual CPML faces with `None` in the parameter table
passed to `updates_with_cpml`.