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

G-steps 2 and 13 — the four production soil-characteristic laws and the closure-A quasi-steady recharge q₀(hᵤ, h_g). More...

#include "SubsurfaceData.hpp"
Include dependency graph for SoilCharacteristic.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  openswmm::twoD::soil::Params
 

Namespaces

namespace  openswmm
 
namespace  openswmm::twoD
 
namespace  openswmm::twoD::soil
 

Functions

double openswmm::twoD::soil::effectiveSaturation (const Params &p, double psi) noexcept
 Effective saturation at suction head psi (m, ≥ 0). Se ∈ (0, 1].
 
double openswmm::twoD::soil::waterContent (const Params &p, double psi) noexcept
 Water content θ(ψ) = θ_r + Se·(θ_s − θ_r).
 
double openswmm::twoD::soil::relativeConductivity (const Params &p, double psi) noexcept
 Relative conductivity Kr(ψ) ∈ (0, 1].
 
double openswmm::twoD::soil::conductivity (const Params &p, double psi) noexcept
 Unsaturated conductivity K(ψ) = Ks·Kr(ψ) (m/s).
 
double openswmm::twoD::soil::suctionAtSaturation (const Params &p, double Se) noexcept
 
double openswmm::twoD::soil::diffusivity (const Params &p, double psi) noexcept
 
double openswmm::twoD::soil::equilibriumStorage (const Params &p, double L) noexcept
 
double openswmm::twoD::soil::rechargeQ0 (const Params &p, double L, double hu) noexcept
 
double openswmm::twoD::soil::enslavedStorage (const Params &p, double L) noexcept
 
double openswmm::twoD::soil::alphaL (const Params &p, double L) noexcept
 
double openswmm::twoD::soil::feddesStress (double psi, double psi_w) noexcept
 

Detailed Description

G-steps 2 and 13 — the four production soil-characteristic laws and the closure-A quasi-steady recharge q₀(hᵤ, h_g).

The laws

Each law supplies effective saturation Se(ψ), water content θ(ψ) and relative conductivity Kr(ψ), with suction head ψ ≥ 0 measured upward from the water table (so ψ = 0 at the table and ψ = L at the surface):

Law Kr(ψ)
Gardner (1958) e^(−αψ)
Russo (1988) [(1 + ½αψ)·e^(−½αψ)]²
Brooks–Corey (1964) 1 for ψ ≤ ψ_b, else (ψ_b/ψ)^(2+3λ)
van Genuchten (1980) Se^L·[1 − (1 − Se^(1/m))^m]², Se = [1+(αψ)^n]^(−m)

How q₀ is computed — read this before trusting a number

For Gardner, Qu & Duffy's eq. 22 is used verbatim:

q₀ = Ks · [ 1 − e^(−αL) − α·hᵤ ] / [ αL · (1 − e^(−αL)) ] , L = z_s − h_g

That expression is algebraically identical to

q₀ = C(L) · [ hᵤ*(L) − hᵤ ] ,
hᵤ*(L) = (1 − e^(−αL)) / α <- exactly eq. 39, the enslaved form
C(L) = Ks / ( L · (1 − e^(−αL)) )
@ C
Definition culvert.c:28

— a relaxation of the column's stored water toward its hydrostatic equilibrium, at a conductivity-set rate. The equivalence is a genuine identity, not an approximation, and it is worth stating because it makes the sign convention obvious (hᵤ < hᵤ*q₀ > 0, downward recharge; hᵤ > hᵤ* ⇒ capillary rise) and because it is the form that generalises.

The other three laws use that generalised form, with hᵤ*(L) the hydrostatic-equilibrium storage ∫₀ᴸ θ(ψ) dψ of that law (closed form for Brooks–Corey, Gauss–Legendre for van Genuchten and Russo) and C(L) the same conductivity/length scale evaluated with the law's own Kr.

Warning
This generalisation is ours, not the literature's. Gardner reproduces the published closed form exactly and is verified against it. Russo, Brooks–Corey and van Genuchten reproduce the correct equilibrium (q₀ = 0 at hydrostatic storage) and the correct sign, but their relaxation rate is a modelling choice this file makes explicit rather than a published closed form. Plan step 18's closure-ladder benchmark and step 4's HYDRUS-1D comparison are what license them; until those run, prefer Gardner or Russo for anything quantitative, and prefer closure B (the σ column, which integrates the real Richards flux and needs none of this) where the answer matters. Recorded for the migration guide.
Author
Caleb Buahin caleb.nosp@m..bua.nosp@m.hin@g.nosp@m.mail.nosp@m..com
License\n Apache-2.0