Skip to content

sem: Biot poroelastic waves (2-D) - #129

Merged
GeophyAI merged 5 commits into
feat/semfrom
feat/sem-biot
Oct 26, 2026
Merged

GeophyAI merged 5 commits into
feat/semfrom
feat/sem-biot

Conversation

@GeophyAI

@GeophyAI GeophyAI commented Oct 25, 2026 •

Copy link
Copy Markdown
Collaborator

BiotVSSEM2DDeformed: 2-D Biot poroelastic waves on the SEM, the FD Biot's velocity-stress-pressure form with a continuous pore pressure, an element-local Darcy flux and the drag integrated exactly per node; C-PML and an open-pore free surface. With SPECFEM2D's poroelastic features: a point force (fx / fz) and flux sources, an anisotropic permeability (BiotAnisoPermSEM2DDeformed), the viscous attenuation (equation_options={"viscous_q": (Q0, f0)}), and fluid (rho = 0) and dry elastic (M = 0) regions in one model, coupled as in SPECFEM2D. sweep.equations.biot_params: the drag tensor, the fluid and dry-solid coefficients, and the parameter families of Morency, Luo & Tromp (2009) with their kernels. PropSEM(equation_options=...). sweep show prints the Biot classes' source_type names, and the API reference lists both classes.

Checked against analytic line sources and an open-pore half-space, the FD Biot, ElasticVSSEM2DDeformed (dry solid) and AcousticElasticSEM2D (water over a dry solid) to round-off, reciprocity across the interfaces to 1e-15, finite-difference gradients, and SPECFEM2D runs of its poroelastic examples and of each feature (test/sem/specfem_compare/, 0.01-0.2 %). 2-D, eager only.

Stacked on #128: once that merges, change this PR's base to dev.

🤖 Generated with Claude Code

BiotVSSEM2DDeformed solves the FD Biot's velocity-stress-pressure form on the
Quad9 mesh, with its eight coefficients and source/receiver names via PropSEM.
The pore pressure is continuous and the Darcy flux element-local, so the fluid
is the acoustic pressure SEM: with a continuous flux, as in SPECFEM2D, a point
source excites grid-line modes (p up to 14x on the source's row, growing like
1/dh). The drag is integrated exactly per node over the flux copies; C-PML;
open-pore surface, topography included; boundary saving refused. Receivers
read element-local fields. Checked against analytic and wavenumber-integration
solutions, FD Biot, SPECFEM2D (4e-4) and finite-difference gradients.
Point force fx/fz and flux sources qx/qz; BiotAnisoPermSEM2DDeformed (drag
tensor); viscous attenuation via equation_options viscous_q (standard linear
solid). Fluid (rho = 0) and dry elastic (M = 0) regions in one model: open
pores to a fluid, sealed to a dry solid, the interface terms exact transposes;
sources load only their medium's fields; absent coefficients get no gradient.
sweep.equations.biot_params: drag tensor, fluid/dry coefficients, Morency 2009
families and kernels. PropSEM(equation_options=...). Checked against analytic
solutions, AcousticElasticSEM2D / ElasticVS (round-off), reciprocity and
SPECFEM2D (features 0.02-0.2%, couplings 0.01-0.08%).
The FD gradient checks passed through pytest.approx's default abs=1e-12
(|J' dm| ~ 1e-17): now rel 1e-6 with abs 0, a 1e-5 step, the C-PML speed
held and the bump off the edge cells (measured 1e-10 - 1e-7). The
batch-vs-loop receiver check is to rounding (2e-6 of the peak on CPU torch
2.14). Thinner C-PML where it is not under test, cached and merged runs, a
compact open-pore case, the FD match uncompiled: 235 -> 111 s.
`sweep show` prints the source_type names an equation declares for PropSEM
(Biot's force, moment and injections) instead of its source fields, and
docs/api/sem/equations.md documents the two Biot classes.
@GeophyAI
GeophyAI merged commit b256aff into feat/sem Oct 26, 2026
@GeophyAI
GeophyAI deleted the feat/sem-biot branch October 27, 2026 16:39
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