UFM / Fully-3D DFN
Research-grade — validation in progress.
UFM-class discrete fracture network (DFN) shipped — a true mutable topology engine + literature-grade HF↔NF crossing criteria layered on top of the non-planar 3D DDM solver. `src/lib/dfn/dfnGraph.ts` owns the persistent `DfnFractureGraph` (fractures, junctions, segment splits, T-junction merges); `src/lib/dfn/renshawPollard.ts` (Renshaw–Pollard 1995) and `src/lib/dfn/guWeng.ts` (Gu–Weng 2012) return closed-form `cross | arrest | divert` decisions from the local σ-tensor + approach angle; `src/lib/dfn/nfSetLibrary.ts` ingests pre-existing natural-fracture sets from three sources (explicit list, microseismic discs via `momentTensorInversion.ts`, stochastic Baecher discs with Fisher-distributed orientations and P32 intensity targeting); `src/lib/dfn/tipDispatcher.ts` is the per-step orchestrator that queries nearby NFs at every newly advanced tip vertex, evaluates the chosen criterion, mutates the graph, and emits a `DfnEncounterLog` for audit. K_I / K_II / K_III at each tip are extracted from the DDM displacement-discontinuity profile via `src/lib/nonPlanar3D/tipAsymptoticK.ts` (Schultz 1988 / Olson 2004 tip-asymptotic relations — the same approach ResFrac, GOHFER, and XSite use in production; NOT XFEM). Wired into `runNonPlanar3DPipeline` via opt-in `dfn?: { nfSet, criterion: "rp" | "gw", encounterRadiusFt?, stressAt?, sigmaHmaxPsi?, sigmaHminPsi? }`; omitted ≡ legacy byte-identical (existing 49 pipeline tests stay green). Per-step `TimeStepRecord.dfnEncounters` + final `pipelineResult.dfnGraph` snapshot + flat `dfnLog`. UI surfaces: `/dfn-network` viewer route (graph stats, decision counts, encounter log table), `DfnNetworkResultsCard` in the per-simulation Results tab, and a Builder `DfnTopologySection` on `FractureOptionsPanel` writing through `dfnConfigStore`. **In-Newton wiring LIVE (transitive)** — the DFN dispatcher runs inside `runNonPlanar3DPipeline`, which is invoked per accepted Newton iterate via the Phase 8 inc 6 `nonPlanarCoupling` on `coupledNewtonStep`; caller passes `nonPlanarCoupling.pipelineConfig.dfn = { nfSet, criterion, encounterRadiusFt, stressAt, … }` and per-iter graph mutations accumulate on the same persistent mesh state consumed by the planar-3D pressure/opening substep. Drift-guards: `renshawPollard.test.ts` + `guWeng.test.ts` (lab-data crossing decisions) + `dfnGraph.test.ts` (topology mutation + connectivity) + `nfSetLibrary.test.ts` (stochastic P32 convergence + Fisher orientation) + `tipDispatcher.test.ts` (12 — cross preserves planar parity, arrest stops growth, divert turns tip onto NF strike) + `pipeline.dfn.test.ts` (omit ≡ byte-identical legacy, single-cross/arrest/divert, encounter-log shape) + `tipAsymptoticK.test.ts` (Mode I/II/III + mixed-mode K_eq) + `dfnConfigStore.test.ts` + `coupledStepNonPlanar.test.ts` (transitive Newton-loop invocation contract).
In-Newton wiring shipped transitively via `nonPlanarCoupling.pipelineConfig.dfn` on `coupledNewtonStep` (see today). Honest scope: DDM-based tip-asymptotic K-extraction, NOT full 3D XFEM with volumetric FE assembly + level-set tip tracking. Out of scope today: external FE-engine bridges (Abaqus / COMSOL), coupled THM on the DFN graph (`thermo-mechanical-hydraulic` row already covers matrix; DFN couples via the existing channels), and a true T-junction reconvergence weld between independent DFN fractures (mesh-level weld in `non-planar-3d` row is the analogue). Remaining: bridge the encounter log into the `/projects/$p/workspaces/$w/field-validation` ingest path so microseismic-derived NF sets can be validated against observed decision rates.
- Full 3-D XFEM with volumetric FE assembly + Abaqus / COMSOL bridge
- Coupled THM on the DFN graph itself
- Phase 8 inc 6shipped
ked per accepted Newton iterate via the Phase 8 inc 6 `nonPlanarCoupling` on `coupledNewtonStep`; caller passes `nonPlanarCoupling.pipelineConfig.dfn = { nfSet, criterion, encounterRadiusFt, stressAt, … }` and per-iter graph mutations accu…
- No published error band yet — use with engineering judgment.