Analytical flow
Gardner relations and the analytical unsaturated-flow response.
Analytical unsaturated infiltration response.
This module provides the analytical unsaturated-zone response associated with Gardner and Srivastava–Yeh formulations.
gardner_water_content
gardner_water_content(pressure_head: ndarray | float, *, alpha: float, theta_s: float, theta_r: float) -> np.ndarray
Return the intrinsic Gardner retention curve.
This is the soil-water characteristic relation used for Figure 4 in Baum
et al. (2010), Eq. (4e), with psi_0 = 0; also Baum et al. (2008),
Eq. (4C): theta = theta_r + (theta_s - theta_r) exp(alpha psi)
for non-positive pressure head. It deliberately uses the intrinsic
alpha (not the slope-transformed value used by the 1D flow solution).
initial_conductivity
initial_conductivity(z: ndarray | float, *, hydro: HydraulicProperties, depth: float | None = None) -> np.ndarray | float
Initial hydraulic-conductivity profile.
K_0(z) = I_ZLT - (I_ZLT - K_s) * exp[-a * (z_w0 - z)]
Baum et al. (2010), Eq. (5c), corrected by Baum and Godt (2013), with psi_0 = 0 and renamed depth/slope parameters.
pressure_from_conductivity
pressure_from_conductivity(conductivity: ndarray, *, hydro: HydraulicProperties) -> np.ndarray
Convert conductivity to pressure head with psi_0 = 0.
The TRIGRS set uses Baum et al. (2010), Eq. (9). The Srivastava-Yeh set inverts the intrinsic Gardner law, psi=log(K/Ks)/alpha.
water_content_from_pressure
water_content_from_pressure(pressure_head: ndarray, *, hydro: HydraulicProperties) -> np.ndarray
Compute flow-profile water content from pressure head.
The TRIGRS set uses slope-transformed alpha in its reconstructed retention curve. The Srivastava-Yeh set uses intrinsic alpha, preserving theta=theta_r+(theta_s-theta_r)*K/Ks in the unsaturated flow domain.
initial_profile
initial_profile(hydro: HydraulicProperties) -> dict[str, np.ndarray]
Return the initial unsaturated profile down to the initial water table.
basal_flux_at_time
basal_flux_at_time(time: float, hydro: HydraulicProperties, rainfall: RainfallSeries, *, depth: float | None = None, roots: ndarray | None = None) -> float
Compute basal flux at a time in hours by step superposition.
profile_at_time
profile_at_time(time: float, hydro: HydraulicProperties, rainfall: RainfallSeries, *, depth: float | None = None, roots: ndarray | None = None, evaluation_depths: ndarray | None = None) -> dict[str, np.ndarray]
Compute the fixed-domain unsaturated response at time in hours.
Optional evaluation_depths are vertical depths within [0, initial NF]. The column solver constructs saturated depths separately up to maximum_depth.