Skip to content

fix(fd): refuse a PML between two free faces for solids - #154

Merged
GeophyAI merged 1 commit into
devfrom
fix/fs-pml-plate-refusal
Nov 4, 2026
Merged

GeophyAI merged 1 commit into
devfrom
fix/fs-pml-plate-refusal

Conversation

@GeophyAI

@GeophyAI GeophyAI commented Nov 4, 2026

Copy link
Copy Markdown
Collaborator

A PML that runs between two faces of the other axis that have none, one of them free
(free_surface=["top", "bottom"], ["top", "left", "right"] and the four other such layouts, or a
free face opposite an abcn 0 face), bounds a plate whose backward-propagating Lamb modes a PML
amplifies. On eager and impl='c' these runs grew 1e2-1e4 times every 1.25 s from about 2 s on;
the growth converges under grid refinement at the plate's S1 zero-group-velocity frequency, and no
PML width, CFS shift or damping stops it. 2-D Elastic, ElasticBorn and ViscoElastic now raise
a ValueError naming the faces (the equations declare free_plate_unstable, as the SEM ones do);
Acoustic and ViscoAcoustic accept every layout. Keep one face of the pair absorbing, or free
all four.

Tests: test/test_boundary_spec_resolution.py (the 16 layouts for solids and fluids, abcn 0),
test/test_free_surface_per_edge.py (real equations refuse or accept; a 10 s eager control),
test/test_free_surface_per_edge_cuda.py (impl='c' refusal and a 10 s control);
test/test_compiled_stencil_slices.py moves its ["bottom", "left", "right"] case to all four
faces free.

Verified on an A100 together with the other two PRs (fix/sem-cpml-bands, test/sem-stale-checks): the four test files above with --runslow, 160 passed; test/sem 1140 passed.

A PML that runs between two faces of the other axis with no PML, one of
them free (free_surface=["top", "bottom"], ["top", "left", "right"], ...,
or free + abcn 0), bounds a plate whose backward Lamb modes the PML
amplifies: on eager and impl='c' these runs grew 1e2-1e4x per 1.25 s, and
the growth converges under refinement at the plate's S1 ZGV frequency.
Elastic, ElasticBorn and ViscoElastic now raise ValueError for it
(free_plate_unstable); fluids accept every layout. Tests pin the layout
rule, the solid/fluid split and the 10 s growth (eager and c).
@GeophyAI
GeophyAI force-pushed the fix/fs-pml-plate-refusal branch from 0267db4 to 042399c Compare November 4, 2026 09:29
@GeophyAI
GeophyAI merged commit d47693d into dev Nov 4, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant