Coupling direction
Research-grade — validation in progress.
Two-way *within the frac* (Newton-Raphson width↔pressure via `coupledNewtonStep`, default live-kernel path @ Phase 7 inc 16) **AND** two-way frac↔reservoir solved JOINTLY each timestep, **now default-ON @ Phase 16** via `reservoirCouplingStore` + `blackOil3PCouplingStore` (both flip from opt-in → default-on; explicit `setEnabled(false)` overrides persist so users who turned coupling off pre-promotion keep that choice). Single-phase path: `reservoirCoupling` field on `coupledNewtonStep` (Phase 9 inc 3) substeps the in-house transient single-phase Darcy grid (`src/lib/reservoir/singlePhaseGrid.ts`, backward-Euler TPFA + SPD CG via `src/lib/linalg/cg.ts`) INSIDE the Newton outer loop — after each accepted iterate, the kernel pushes per-DDM-cell q_leak as withdrawal sources (m/s × mesh.area, sign-flipped to flowback) via `subStepReservoir`, re-samples p_pore at every footprint cell, and feeds it back as the per-cell PDL threshold so the next residual evaluation sees the live drawdown Δp = p_face − p_pore. Δt amortised across `maxIter` substeps so a converged Newton solve consumes the full outer Δt with self-consistent (w, p_frac, p_pore). The outer-loop driver `runFracReservoirCoupling` (Phase 9 inc 2) remains for callers that want the closed-form PKN/KGD path. **Phase 14 — 3-phase black-oil IMPES kernel** via `src/lib/reservoir/compositionalBlackOil3P.ts` lifts the reservoir physics from single-phase to oil/gas/water on the same voxel grid: sequentially-implicit IMPES (pressure solved implicitly with total-mobility-weighted transmissibilities + backward-Euler CG, saturations updated explicitly with upstream-weighted phase fluxes), Brooks-Corey Stone-I-lite 3-phase rel-perms (`relPerm`), Standing/Vasquez-Beggs oil PVT, water reference `B_w` + linear compressibility, and a pluggable `GasFvfCallback` gas FVF. **Energized-CO₂ gas bridge** via `withEnergizedCo2Gas` adapter wires the existing PR-EOS `energizedCo2Pvt` density engine into the gas-phase FVF so honest gas-condensate dropout and energized-CO₂ flowback solve on the same grid as the Phase 9 T-M-H stepper. Builder Fluid-model panel exposes a third '3-phase BO (oil/gas/water)' kind alongside the existing black-oil / compositional toggles (initial Sw / Sg / connate-Sw + 'Bridge gas FVF to PR-EOS energized CO₂' checkbox). Internal sandbox only — no ECLIPSE/tNavigator/INTERSECT bridge. **Phase 15 — Carreau-Yasuda + multi-mode rheology + shear-history crosslinker breakdown** via `src/lib/rheologyPreview.ts` (opt-in `aTransition` + Maxwell `modes[]` → `carreauYasudaMuCp` + `firstNormalStressPa` + `weissenbergNumber`; a=2 + no modes ≡ legacy Carreau byte-identical) and `src/lib/crosslinkerShearHistory.ts` (`accumulateShearHistory` integrates D(t) = 1 − exp(−∫ (γ̇/γ̇c)^m dt) over the pump schedule with optional first-order recovery τ between low-shear steps; 4-entry gel catalog: borate-guar / zirconate-cmhpg / hpg-cmhpg / slickwater-hvfr; `applyShearDamageToBreaker` shortens breaker T½ proportionally to (1 − D), floor 0.1×). Drift-guards: `rheologyPreviewCarreauYasuda.test.ts` (7) + `crosslinkerShearHistory.test.ts` (8) + `couplingDefaultOnPromotion.test.ts` (5 — Phase 16 default-on contract + explicit-off persistence); legacy `rheologyPreviewHb.test.ts` (9) still green.
Phase 16 promotion CLOSED — both `reservoirCoupling` and `blackOil3PCoupling` now default-on via dedicated localStorage stores (`reservoirCouplingStore` / `blackOil3PCouplingStore`), surfaced as a 2-row Switch group on `SolverPreferencesCard`. Explicit-off overrides persist (drift-guarded). With this row promoted, the same `coupledNewtonStep` outer-loop seam is the canonical promotion path for the remaining rows (`thermo-mechanical-hydraulic` wired LAST in the coupling chain; `parent-child-interference` / `non-planar-3d` / `ufm-fully-3d` wiring PRs SHIPPED @ solver-spec status flip; **`perf-erosion-clearance` wiring PR SHIPPED via `perfErosionCoupling` on `coupledNewtonStep` — the erosion loop now runs INSIDE Newton with an eroded-Δp splice into the wellbore BHP Dirichlet BC**). **Moat M4 (live DAS/DTS closed-loop cluster BC) primitive + kernel wiring LIVE end-to-end** — pure `src/lib/planar3d/liveClusterBoundaryCondition.ts` Tier-2 primer + opt-in `liveClusterBcPolicy` field on `coupledNewtonStep`. When `clusterXY[]` (per-cluster mesh coords aligned with the DAS `observations[]`) is supplied, `allocateLiveClusterRates` runs BEFORE the Newton loop and rebuilds `qInj` as a superposition of per-cluster point sources (1 bpm = 0.00264979 m³/s) — closing the M4 same-step RHS mutation loop so the first Newton residual sees the DAS/DTS-informed injection distribution. Without `clusterXY` the allocation is post-hoc advisory (byte-identical iterates). Either way the result surfaces on `CoupledNewtonResult.liveClusterAllocation`. Undefined ≡ `null` ≡ byte-identical kernel. Drift-guards: `liveClusterBoundaryCondition.test.ts` (14) + `newtonStepLiveClusterBcPolicy.test.ts` (4 — 2 post-hoc + 2 same-step RHS).
- Phase 7 inc 16shipped
NewtonStep`, default live-kernel path @ Phase 7 inc 16) **AND** two-way frac↔reservoir solved JOINTLY each timestep, **now default-ON @ Phase 16** via `reservoirCouplingStore` + `blackOil3PCouplingStore` (both flip from opt-in → default-on…
- Phase 9shipped
flowback solve on the same grid as the Phase 9 T-M-H stepper. Builder Fluid-model panel exposes a third '3-phase BO (oil/gas/water)' kind alongside the existing black-oil / compositional toggles (initial Sw / Sg / connate-Sw + 'Bridge gas …
- Phase 9 inc 2shipped
loop driver `runFracReservoirCoupling` (Phase 9 inc 2) remains for callers that want the closed-form PKN/KGD path. **Phase 14 — 3-phase black-oil IMPES kernel** via `src/lib/reservoir/compositionalBlackOil3P.ts` lifts the reservoir physics…
- Phase 9 inc 3shipped
Coupling` field on `coupledNewtonStep` (Phase 9 inc 3) substeps the in-house transient single-phase Darcy grid (`src/lib/reservoir/singlePhaseGrid.ts`, backward-Euler TPFA + SPD CG via `src/lib/linalg/cg.ts`) INSIDE the Newton outer loop —…
- Phase 14shipped
at want the closed-form PKN/KGD path. **Phase 14 — 3-phase black-oil IMPES kernel** via `src/lib/reservoir/compositionalBlackOil3P.ts` lifts the reservoir physics from single-phase to oil/gas/water on the same voxel grid: sequentially-impl…
- Phase 15shipped
ECLIPSE/tNavigator/INTERSECT bridge. **Phase 15 — Carreau-Yasuda + multi-mode rheology + shear-history crosslinker breakdown** via `src/lib/rheologyPreview.ts` (opt-in `aTransition` + Maxwell `modes[]` → `carreauYasudaMuCp` + `firstNormalS…
- Phase 16shipped
INTLY each timestep, **now default-ON @ Phase 16** via `reservoirCouplingStore` + `blackOil3PCouplingStore` (both flip from opt-in → default-on; explicit `setEnabled(false)` overrides persist so users who turned coupling off pre-promotion …
- Phase 16planned
Phase 16 promotion CLOSED — both `reservoirCoupling` and `blackOil3PCoupling` now default-on via dedicated localStorage stores (`reservoirCouplingStore` / `blackOil3PCouplingStore`), surfaced as a 2-row Switc
- No published error band yet — use with engineering judgment.