Seepage & flow¶
Five functions covering Darcy's law, the conditions for piping, and flow-net based seepage estimation.
Quick example¶
import geoeq as ge
# Darcy's law: Q = k * i * A
ge.darcy_flow(k=1e-4, i=0.1, A=1.0) # 1e-5 m^3/s
# Hydraulic gradient
ge.hydraulic_gradient(dh=2.0, L=10.0) # 0.20
# Critical (boiling/heave) gradient
ge.critical_gradient(Gs=2.65, e=0.65) # 1.0
# Equivalent permeability of a layered system
ge.equivalent_k([1e-3, 1e-5], [5, 5], direction="horizontal")
ge.equivalent_k([1e-3, 1e-5], [5, 5], direction="vertical")
# Seepage from a flow net
ge.flow_net(Nf=4, Nd=8, k=1e-5, dh=10) # 5e-5 m^3/s per m
Critical gradient — when quicksand happens¶
When the upward seepage gradient reaches \(i_{\text{cr}}\), effective stress vanishes and the soil "boils". For a typical sand (\(G_s = 2.65\), \(e = 0.65\)), \(i_{\text{cr}} = 1.0\) — the classic textbook answer.
Anisotropy in layered ground
Horizontal and vertical permeabilities can differ by orders of magnitude in a stratified profile. With \(k_1 = 10^{-3}\) and \(k_2 = 10^{-5}\) in equal-thickness layers:
- \(k_{\text{eq}}^{H} \approx 5 \times 10^{-4}\) — the high-k layer dominates
- \(k_{\text{eq}}^{V} \approx 2 \times 10^{-5}\) — the low-k layer dominates
This 25× ratio is the engineering argument for filter drains (horizontal flow allowed) and impermeable cores (vertical flow blocked).
API reference¶
darcy_flow
¶
Darcy's law: Q = k * i * A (m^3/s).
| PARAMETER | DESCRIPTION |
|---|---|
k
|
Hydraulic conductivity (m/s).
TYPE:
|
i
|
Hydraulic gradient (-, dimensionless).
TYPE:
|
A
|
Cross-sectional area (m^2).
TYPE:
|
Reference
Darcy (1856); Das (2010) Eq. 5.11.
Source code in geoeq/design/seepage.py
hydraulic_gradient
¶
Hydraulic gradient i = delta h / L.
| PARAMETER | DESCRIPTION |
|---|---|
dh
|
Head loss (m).
TYPE:
|
L
|
Flow-path length (m).
TYPE:
|
Reference
Das (2010) Eq. 5.10.
Source code in geoeq/design/seepage.py
| Python | |
|---|---|
critical_gradient
¶
Critical (boiling) hydraulic gradient i_cr = (Gs - 1)/(1 + e).
When i >= i_cr in upward flow, effective stress vanishes and quicksand (heave) develops.
Reference
Das (2010) Eq. 5.18; Terzaghi & Peck (1948).
Source code in geoeq/design/seepage.py
equivalent_k
¶
equivalent_k(k_layers: Sequence[float], H_layers: Sequence[float], direction: str = 'horizontal') -> float
Equivalent permeability of a layered system.
horizontal: k_eq = sum(k_i * H_i) / sum(H_i) (parallel flow) vertical: k_eq = sum(H_i) / sum(H_i / k_i) (series flow)
Reference
Das (2010) Eq. 5.14 (horizontal), 5.15 (vertical).
Source code in geoeq/design/seepage.py
flow_net
¶
Seepage discharge from a flow net.
Q = k * dh * (Nf / Nd) * L (m^3/s per metre length normal to plane)
| PARAMETER | DESCRIPTION |
|---|---|
Nf
|
Number of flow channels.
TYPE:
|
Nd
|
Number of equipotential drops.
TYPE:
|
k
|
Hydraulic conductivity (m/s).
TYPE:
|
dh
|
Total head loss across the system (m).
TYPE:
|
L
|
Length perpendicular to the flow plane (m). Default 1 m.
TYPE:
|
Reference
Das (2010) Eq. 5.20.