Repository navigation
fix(fd): refuse a PML between two free faces for solids - #154
Merged
Merged
Conversation
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
force-pushed
the
fix/fs-pml-plate-refusal
branch
from
November 4, 2026 09:29
0267db4 to
042399c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 afree face opposite an
abcn0 face), bounds a plate whose backward-propagating Lamb modes a PMLamplifies. 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,ElasticBornandViscoElasticnow raisea
ValueErrornaming the faces (the equations declarefree_plate_unstable, as the SEM ones do);AcousticandViscoAcousticaccept every layout. Keep one face of the pair absorbing, or freeall four.
Tests:
test/test_boundary_spec_resolution.py(the 16 layouts for solids and fluids,abcn0),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.pymoves its["bottom", "left", "right"]case to all fourfaces 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/sem1140 passed.