Skip to content

feat(biot): 2-D Biot poroelastic waves (eager) + notebooks 38–40 - #126

Merged
GeophyAI merged 6 commits into
devfrom
feat/biot
Oct 24, 2026
Merged

GeophyAI merged 6 commits into
devfrom
feat/biot

Conversation

@GeophyAI

Copy link
Copy Markdown
Collaborator

Adds Biot: 2-D low-frequency Biot poroelastic waves (solid velocity, Darcy flux, total stress, pore pressure), eager only.

  • Viscous drag integrated exactly: any permeability runs at the fast-P time step; b → ∞ reduces to Elastic (undrained).
  • Open-pore top free surface; boundary saving refused (dissipative), gradients via checkpointing.
  • biot_from_rock / biot_from_biot_constants build the eight coefficients.
  • test/test_biot.py: Dai et al. (1995) speeds, viscous analytic solution, discrete-wavenumber half-space, FD gradients, refusals.
  • Docs: API page and notebooks 38 (Morency et al. 2009 kernels), 39 (Yang et al. 2019 radiation patterns), 40 (Biot wavefields); gate/golden_equations_api.json registers Biot.

CPU suite: same results as dev plus the new Biot tests.

🤖 Generated with Claude Code

First-order velocity-stress-pressure form with the Darcy flux (Biot 1962) on
the Virieux staggered grid with CPML, as Elastic. The stiff viscous coupling
is integrated exactly, so any permeability is stable and b -> inf gives the
undrained elastic medium. Models are Biot's eight coefficients; helpers
build them from rock properties or Biot's P, Q, R, N. No free surface yet.
Checked against Elastic, Dai et al. (1995) velocities and their Fig. 1, and
an analytic viscous line-source solution from inviscid to the Darcy limit.
Traction-free total stress and p = 0 on the top row with Elastic's image
method (p mirrored like szz, qz evenly). The surface sxx eliminates d vz/dz
with sigma_zz = 0 and extrapolates d qz/dz from below, so the surface is as
drained as the grid resolves; b -> inf reproduces Elastic's free surface.
Checked against a discrete-wavenumber half-space solution from the inviscid
to the Darcy limit, a pressure-release image solution and FD gradients.
The viscous drag is dissipative at every node, so stepping back in time
multiplies round-off by exp(gamma dt) per step and the reverse-time
reconstruction boundary saving needs does not exist (as for the visco
equations). A boundary-saving request now raises with that reason instead
of asking for an interior_substeps hook.
Notebook 38 reproduces the poroelastic traveltime kernels of Morency
et al. (2009) by autograd through Biot (primary, density-normalised and
wave-speed families; FD check 1e-4). Notebook 39 compares the first-order
Born radiation patterns of Yang et al. (2019)'s rock, four
parameterizations, with Biot simulations (corr >= 0.988). Biot gets an API
page, an equations-table row and CHANGELOG entries.
Fast P, slow P and S in one snapshot; four viscous regimes against the
analytic line-source solution (rel. L2 1e-3); Dai et al. (1995)'s two
layers under an open-pore free surface; b -> inf against Elastic (6e-6).
@GeophyAI
GeophyAI merged commit e43bb74 into dev Oct 24, 2026
1 check passed
@GeophyAI
GeophyAI deleted the feat/biot branch October 24, 2026 07:15
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