OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
SubsurfaceSolver.hpp File Reference

G-steps 3, 6-12, 16 — the two-zone groundwater kernel: saturated FV update, lateral Darcy, closure dispatch, node exchange, Dunne transfer, ET, and the LTS tier hooks the surface marcher calls. More...

Include dependency graph for SubsurfaceSolver.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  openswmm::twoD::RowLayoutLite
 
class  openswmm::twoD::SubsurfaceSolver
 The two-zone kernel. Owned by SurfaceRouter2D; driven by the marcher's tier hooks. More...
 
struct  openswmm::twoD::SubsurfaceSolver::NodeWaterBudget
 
struct  openswmm::twoD::SubsurfaceSolver::PendingLidBed
 
struct  openswmm::twoD::SubsurfaceSolver::LidBedDiagnostic
 
struct  openswmm::twoD::NodeData
 Structure-of-Arrays storage for all nodes. More...
 

Namespaces

namespace  openswmm
 
namespace  openswmm::detail
 
namespace  openswmm::twoD
 

Detailed Description

G-steps 3, 6-12, 16 — the two-zone groundwater kernel: saturated FV update, lateral Darcy, closure dispatch, node exchange, Dunne transfer, ET, and the LTS tier hooks the surface marcher calls.

How this joins the marcher (§3, guarantees G-A and G-B)

The subsurface does not get a loop of its own. ExplicitInertialSolver calls four hooks, mirroring what it already does for the surface:

Hook When What
assignTiers every syncAndRebuild Δt_g / Δt_u per cell → tier lists
fireGwFaces(tier, dt) face phase of a due tier lateral Darcy → ±ΔV side accumulators
fireGwCells(tier, dt) cell phase of a due tier gather, closure, node/deep/ET/Dunne
settle() before any re-tier flush every accumulator

G-A — a GW cell's tier comes only from min(Δt_g, Δt_u). The surface's pin-to-tier-0 rule for coupling cells is deliberately NOT applied here: a GW cell with node exchange or infiltration keeps its own tier and the exchange accumulates until it fires. Only the surface twin is ever pinned.

G-B — every new flux channel books ±Δ into a side accumulator at the producer's cadence and is gathered by the owner at its own firing, exactly like facc_L_/facc_R_. Cross-tier conservation is inherited, not re-proved.

Operator split within one cell firing

  1. Gather completed lateral, node, link, source, infiltration and ET water.
  2. Compute physical Darcy recharge and a specific-yield table predictor.
  3. CLOSED_FORM and ENSLAVED retain their bulk/equilibrium updates. SIGMA trials the existing explicit column sweep from one original snapshot while bracketing the table on [0, z_s]. Saturated storage change must equal external saturated exchanges plus actual bottom transfer, compression surplus and residual support from that same sweep.
  4. Commit one settled column/table pair. Only water outside the physical bracket becomes saturation excess or an unavailable-withdrawal refund.
  5. Pair the accepted water with species and completed atmospheric ledgers.
Note
Specific yield. The predictor uses θ_s − θ_bot. SIGMA's final consistency equation uses saturated storage θ_s·h_g and the actual bottom flux including handover; it never treats the predictor or a floored storage derivative as completed water.
Author
Caleb Buahin caleb.nosp@m..bua.nosp@m.hin@g.nosp@m.mail.nosp@m..com
License
Apache-2.0