Poroelastic depletion (full tensor)
Geertsma 2-D + 3-D Mindlin layered + thermo-poroelastic + runtime stress-coupled propagation.
Geertsma-style 2D poroelastic kernel via `poroelasticDepletion.ts` — each producing parent treated as a circular drained patch (radius = drainageRadiusFt) with stress-path coefficient A = α·(1−2ν)/(1−ν); per-stage Δσ_xx/Δσ_yy/Δσ_xy superposed across parents and added to the Cartesian far-field tensor (built from σh_far, σH_far, SHmax azimuth). Eigen-decomposition of the 2×2 horizontal tensor returns rotated principal stresses (σh_total, σH_total) AND the rotated SHmax azimuth (frac reorientation toward depleted zones). Severity classifier `classifyAzimuthShift` (≤5° info / ≤15° watch / >15° critical) drives the workspace summary chip; per-stage Δσ_h, Δσ_H, and azimuth-shift columns ship in the table + CSV export. Δσ_v ≈ 0 in this model (laterally-extensive depletion under uniaxial-strain BC). **3D Mindlin / multi-bench layered extension** via `mindlin3D.ts` (`analyzeMindlinPoroelastic`) — each parent declares a `benchIndex` into a shared `BenchLayer[]` (top TVD · thickness · per-bench ν, α); child stage TVD drives a Mindlin point-source vertical-decay kernel `f(Δz, a, h) = (a/√(a²+Δz²))^(3/2) · min(1, h/a)` that attenuates the 2-D polar Δσ AND uses per-bench moduli to recompute A_p per parent. Same `PoroelasticResult` shape so the existing UI / CSV are drop-in compatible; collapses byte-identically to the 2-D engine when no layers are configured. Gated by `downhole.parentChild.mindlin.v1:{p}:{w}` (off by default). **Thermo-poroelastic coupling** via the same module — per-`ThermalCoolingPatch` (center · radius_T · ΔT) cold-water injection contribution superposed on top of the depletion kernel using the same Lamé / pressurized-hole math (`patchPolar`) with coefficient B = α_T·E/(2·(1−ν)); enabled when `youngsModulusPsi` AND `thermalExpansion1F` are both supplied on the reservoir (otherwise B = 0 and patches are silently ignored, so legacy callers / tests are byte-identical). Thermal-only Cartesian Δ-tensor surfaced on each `PoroelasticStageResult` (`dSigmaXxThermalPsi` etc.) for downstream attribution; Mindlin engine wires the same kernel. **Runtime stress-coupled propagation** — `computeChildFractureGeometry`'s optional `runtimeCoupling.evaluateSigmaHMinAt` callback re-queries the same kernel at each wing tip so per-wing half-length responds live to the local σh field (L_side = L · (1 + k_prop · (σh_ref − σh_side)/σh_ref), clamped to [0.25 L, 4 L]). Wired in the `/parent-child` route via a checkbox + k_prop slider next to the bend-coupling field; CSV adds 5 cols (`wing_half_length_a/b_ft`, `wing_asymmetry_pct`, `sigma_h_tip_a/b_psi`) — em-dash when toggle is off so legacy callers stay byte-identical. Pure module, no coupled simulator dependency.
Self-contained kernel work closed: 2-D Geertsma → 3D Mindlin layered → thermo-poroelastic → runtime stress-coupled propagation all shipped. Remaining work is field validation against parent-pad microseismic + offset DFITs (shared with `parent-child-interference` row).
No phase markers extracted from this row's prose yet.
| Drawdown | ≤ 3,000 psi (2-D closed form); unbounded for 3-D Mindlin |
| Biot α | 0.5 – 0.9 (default 0.7 unconventionals) |
| Geometry | Parent treated as oblate disc |
- Highly anisotropic E_h / E_v (TIV) — use bench-aware per-layer ν, α
- Time-varying thermal patches without diffusivity calibration