![]() |
OpenSWMM Engine
6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
|
G-X4 (2026-09-20) — the signed conduit ⇄ two-zone-aquifer conductance law, shared by the two places that compute a conduit's seepage rate (DynamicWave's fused kernel and routing::computeConduitLosses for KINWAVE / STEADY / FV). More...
Go to the source code of this file.
Namespaces | |
| namespace | openswmm |
| namespace | openswmm::hydraulics |
Functions | |
| double | openswmm::hydraulics::aquiferSeepFactor (double depth, double gw_head_rel, double d_c) noexcept |
| Compute the signed conductance multiplier for conduit-to-aquifer seepage. | |
| double | openswmm::hydraulics::capAquiferGain (double seep_rate, double gain_max) noexcept |
| Limit the gaining direction of a signed conduit seepage rate. | |
| void | openswmm::hydraulics::applySeepageForcing (const SimulationContext &ctx, std::size_t link, double &seep_rate) noexcept |
| Apply the registered host seepage override or addition to a conduit rate. | |
G-X4 (2026-09-20) — the signed conduit ⇄ two-zone-aquifer conductance law, shared by the two places that compute a conduit's seepage rate (DynamicWave's fused kernel and routing::computeConduitLosses for KINWAVE / STEADY / FV).
Legacy SWMM gives a conduit a one-way seepage LOSS at a fixed rate: q = K · W · L, an assumed unit gradient, whatever the groundwater does. With a [2D_AQUIFER] under the conduit and LINK_SEEPAGE TWO_WAY, that becomes a MODFLOW-River exchange about the conduit's own invert:
h_link = z_inv + depth (water surface) h_eff = max(h_gw, z_inv) (bottom clamp) Q = K · W · L · min((h_link − h_eff)/d_c, 1)
+ is out of the pipe, the sign the whole engine already uses for seep_loss_rate, so a gaining reach is simply a negative seepage. The three properties that matter:
depth ≥ d_c, whose default IS the conduit's full depth), the factor is 1 and the rate is the legacy K · W · L to the bit. This is MODFLOW's disconnected-stream limit: once the aquifer head falls below the bed, the leakage saturates.gw_gain_max is the aquifer's frozen per-step share of the drainable water in the cells the conduit crosses, so the 1D can never take water the 2D does not have — the same budget-then-deliver rule the node exchange uses (G-X1).The publisher (SurfaceRouter2D, before routing) owns the datum: it hands over the table elevation already relative to the conduit's mid invert, so neither loss site needs node inverts or the mesh datum.