Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,28 @@ and this project adheres to
local-window FWI and an x-strip domain decomposition (`SEMModelParallel`).
User guide: `docs/user-guide/sem.md`; examples: the SEM section (notebooks
41-44).
- **`BiotVSSEM2DDeformed`: Biot poroelastic waves on the SEM.** The FD `Biot`'s
velocity-stress-pressure form with the Darcy flux on the Quad9 mesh, its eight
coefficients and its `source_type` / `receiver_type` names through `PropSEM`. The
pore pressure is continuous and the flux element-local, so the pore fluid is the
acoustic pressure SEM (with the flux continuous, as in SPECFEM2D, a point source
excites grid-scale modes along its grid lines); the viscous drag integrated
exactly per node, C-PML, an open-pore free surface (`p = 0`) that a `topography`
carries too. Checked against analytic and wavenumber-integration solutions, the
FD records and SPECFEM2D's `poroelastic_semi_infinite_homogeneous` example. 2-D,
eager, no boundary saving. The receiver gather now also reads element-local
fields (the flux and the stresses). With SPECFEM2D's other poroelastic
features: a point force `fx` / `fz` and flux sources `qx` / `qz`; an anisotropic
permeability (`BiotAnisoPermSEM2DDeformed`, the drag a tensor); the viscous
attenuation (`equation_options={"viscous_q": (Q0, f0)}`, a standard linear
solid); fluid (`rho = 0`) and dry elastic (`M = 0`) regions in one model, coupled
as in SPECFEM2D (open pores to a fluid, sealed to a dry solid), sources loading
only the fields of their medium. `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 by the exact chain rule. Checked against
SPECFEM2D runs of each and its `poroelastic_acoustic` example.
- **`PropSEM(equation_options=...)`**: an equation's own `build` keywords; a name the
equation does not take is refused.
- **`impl='c'` for `sweep.sem`.** The SEM CUDA kernels are 43 entries of the
core (kind 3 of the C API, called through `sweep_sem_call`), their input
structs generated from `cuda/equations/sem{2,3}d/*_types.h` like the FD ones.
Expand Down
2 changes: 1 addition & 1 deletion docs/api/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@
</a>
<a class="sweep-api__card" href="sem/equations/">
<div class="sweep-api__card-hd"><code>SEM equations</code><div class="sweep-api__card-tags"><span>2D + 3D</span></div></div>
<p>Acoustic, elastic (displacement and velocity-stress, VTI) and coupled fluid-solid, on flat and curved meshes.</p>
<p>Acoustic, elastic (displacement and velocity-stress, VTI), coupled fluid-solid and poroelastic (Biot), on flat and curved meshes.</p>
<div class="sweep-api__card-models">registry: <span class="sweep-api__chip teal">equation_classes</span> <span class="sweep-api__chip teal">describe</span></div>
</a>
<a class="sweep-api__card" href="sem/mesh/">
Expand Down
22 changes: 22 additions & 0 deletions docs/api/sem/equations.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,3 +159,25 @@ each; records `chi`, `u_x`, `u_z` and the derived `p`, `vx`, `vz`.
members: [build]
inherited_members: true
show_if_no_docstring: true

## Poroelastic (Biot)

The FD `sweep.equations.Biot` on the spectral-element mesh: solid velocity
and pore pressure on the continuous nodes, Darcy flux and total stress in the
elements, with the same eight coefficients `[H, mu, C, M, rho, rho_f, m, b]`
and the same source and receiver names. See
[Poroelastic waves (Biot)](../../user-guide/sem.md#poroelastic-waves-biot).

::: sweep.sem.BiotVSSEM2DDeformed
options:
heading_level: 3
members: [build]
inherited_members: true
show_if_no_docstring: true

::: sweep.sem.BiotAnisoPermSEM2DDeformed
options:
heading_level: 3
members: [build]
inherited_members: true
show_if_no_docstring: true
48 changes: 29 additions & 19 deletions docs/user-guide/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,22 +75,24 @@ Finite difference (sweep.equations, run with PropTorch):

Spectral element (sweep.sem, run with PropSEM):

Equation Mesh Models Torch Binding Binding Ready
----------------------- --------------------- --------------------------------------- ------------- -------------
AcousticElasticSEM2D quad9 2-D, topography ['vp', 'vs', 'rho'] yes yes
AcousticPotentialSEM2D quad9 2-D, topography ['vp'] yes yes
AcousticSEM2D quad4 2-D ['vp'] no no
AcousticSEM2DDeformed quad9 2-D, topography ['vp'] no no
AcousticSEM3D hex8 3-D ['vp'] yes yes
AcousticSEM3DDeformed hex27 3-D, topography ['vp'] yes yes
ElasticSEM2D quad4 2-D ['vp', 'vs', 'rho'] no no
ElasticSEM2DDeformed quad9 2-D, topography ['vp', 'vs', 'rho'] yes yes
ElasticSEM3D hex8 3-D ['vp', 'vs', 'rho'] yes yes
ElasticSEM3DDeformed hex27 3-D, topography ['vp', 'vs', 'rho'] yes yes
ElasticVSSEM2DDeformed quad9 2-D, topography ['vp', 'vs', 'rho'] no no
ElasticVSSEM3D hex8 3-D ['vp', 'vs', 'rho'] yes yes
ElasticVSSEM3DDeformed hex27 3-D, topography ['vp', 'vs', 'rho'] no no
ElasticVTISEM2DDeformed quad9 2-D, topography ['vp', 'vs', 'rho', 'epsilon', 'delta'] no no
Equation Mesh Models Torch Binding Binding Ready
-------------------------- --------------------- ------------------------------------------------------------------ ------------- -------------
AcousticElasticSEM2D quad9 2-D, topography ['vp', 'vs', 'rho'] yes yes
AcousticPotentialSEM2D quad9 2-D, topography ['vp'] yes yes
AcousticSEM2D quad4 2-D ['vp'] no no
AcousticSEM2DDeformed quad9 2-D, topography ['vp'] no no
AcousticSEM3D hex8 3-D ['vp'] yes yes
AcousticSEM3DDeformed hex27 3-D, topography ['vp'] yes yes
BiotAnisoPermSEM2DDeformed quad9 2-D, topography ['H', 'mu', 'C', 'M', 'rho', 'rho_f', 'm', 'b_xx', 'b_xz', 'b_zz'] no no
BiotVSSEM2DDeformed quad9 2-D, topography ['H', 'mu', 'C', 'M', 'rho', 'rho_f', 'm', 'b'] no no
ElasticSEM2D quad4 2-D ['vp', 'vs', 'rho'] no no
ElasticSEM2DDeformed quad9 2-D, topography ['vp', 'vs', 'rho'] yes yes
ElasticSEM3D hex8 3-D ['vp', 'vs', 'rho'] yes yes
ElasticSEM3DDeformed hex27 3-D, topography ['vp', 'vs', 'rho'] yes yes
ElasticVSSEM2DDeformed quad9 2-D, topography ['vp', 'vs', 'rho'] no no
ElasticVSSEM3D hex8 3-D ['vp', 'vs', 'rho'] yes yes
ElasticVSSEM3DDeformed hex27 3-D, topography ['vp', 'vs', 'rho'] no no
ElasticVTISEM2DDeformed quad9 2-D, topography ['vp', 'vs', 'rho', 'epsilon', 'delta'] no no
```

The unified facades `DAS` (formerly `DASModeler`) and `AcousticAniso` are
Expand Down Expand Up @@ -172,8 +174,16 @@ sweep show AcousticPotentialSEM2D

On the elastic SEM classes `source_type` also takes `PropTorch`'s names: `vx`,
`vz` (and `vy`) for a force and, in 2-D, `sxx`, `szz`, `sxz` for a moment
tensor (see [SEM · Source types](sem.md#source-types)). A class without an
absorbing layer says so, as `ElasticSEM2D` does:
tensor (see [SEM · Source types](sem.md#source-types)). The Biot classes
name the `source_type` values `PropSEM` takes for them (a force, a moment, a
pore-pressure or flux injection), so `show` prints those instead of their
source fields:

```text
Source types: ['vx', 'vz', 'qx', 'qz', 'v_x', 'v_z', 'q_x', 'q_z', 'fx', 'fz', 'p', 'sxx', 'szz', 'sxz']
```

A class without an absorbing layer says so, as `ElasticSEM2D` does:

```text
C-PML: no -- a reflecting box, abcn=0 only
Expand All @@ -193,7 +203,7 @@ sweep show Acoustic3d ; echo "exit=$?"
```text
No such wave equation: Acoustic3d
Did you mean: Acoustic3D, Acoustic, AcousticVRZ3D?
`sweep list equations` names all 43 finite-difference and 14 spectral-element equations.
`sweep list equations` names all 43 finite-difference and 16 spectral-element equations.
exit=1
```

Expand Down
6 changes: 4 additions & 2 deletions docs/user-guide/equations.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ The `impl="c"` column says whether `PropSEM(impl='c')` can route the class to
the CUDA kernels; every class runs on `impl="eager"`. The
`BoundarySaving()` column is the CUDA-side coverage of
[boundary saving](sem.md#boundary-saving) -- on `impl="eager"` it works for
every class; ✅ = both backends, "eager" = eager only, and the C-PML is
required wherever the ring IS the C-PML band.
every class but the dissipative Biot one; ✅ = both backends, "eager" = eager
only, and the C-PML is required wherever the ring IS the C-PML band.

| Equation | Models | Mesh | Dim | Notes | `impl="c"` | `BoundarySaving()` |
| --- | --- | --- | --- | --- | --- | --- |
Expand All @@ -105,6 +105,8 @@ required wherever the ring IS the C-PML band.
| `ElasticVSSEM3DDeformed` | `['vp', 'vs', 'rho']` | hex27 | 3D | 3-D elastic with **both** topography and absorbing boundaries (the velocity–stress family is where 3-D C-PML exists) | ❌ | eager |
| `ElasticVTISEM2DDeformed` | `['vp', 'vs', 'rho', 'epsilon', 'delta']` | quad9 | 2D | VTI anisotropic velocity–stress: topography + C-PML | ❌ | eager |
| `AcousticElasticSEM2D` | `['vp', 'vs', 'rho']` | quad9 | 2D | Coupled fluid–solid (ocean over seabed): split acoustic + elastic C-PML, records `chi, u_x, u_z` (+ derived `p, vx, vz`) | ✅ | ✅ (C-PML; fp32; +anchors) |
| `BiotVSSEM2DDeformed` | `['H', 'mu', 'C', 'M', 'rho', 'rho_f', 'm', 'b']` | quad9 | 2D | [Biot poroelastic](sem.md#poroelastic-waves-biot) velocity–stress with Darcy flux, the FD `Biot`'s equations and names (pore pressure continuous, flux element-local): topography + C-PML, open-pore surface, fluid (`rho = 0`) and dry elastic (`M = 0`) regions, viscous attenuation (`viscous_q`), records `vx, vz, p, qx, qz, sxx, szz, sxz` | ❌ | ❌ (dissipative) |
| `BiotAnisoPermSEM2DDeformed` | `['H', 'mu', 'C', 'M', 'rho', 'rho_f', 'm', 'b_xx', 'b_xz', 'b_zz']` | quad9 | 2D | `BiotVSSEM2DDeformed` with an [anisotropic permeability](sem.md#anisotropic-permeability-and-viscous-attenuation) (drag tensor) | ❌ | ❌ (dissipative) |

For the authoritative list of equations exported by your installation,
with their models and compiled-binding support, use the CLI:
Expand Down
Loading