Skip to content

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.