Calculates the effective (relative) saturation S_e(h) at given matric potential values using the Van Genuchten (1980) model with the Mualem constraint (m = 1 − 1/n):
Arguments
- data
A data frame or tibble. Passed as the first argument so the function is compatible with
|>and%>%pipes.- alpha
Van Genuchten shape parameter (1/cm or 1/m, matching units of
h). Either a bare column name fromdataor a scalar numeric value. Must be strictly positive.- n
Van Genuchten shape parameter (dimensionless). Must be > 1 for the Mualem model. Either a bare column name or a scalar numeric value.
- h
Matric potential / pressure head (cm or m, must match units of
alpha). Either a bare column name or a scalar numeric value. Sign convention: absolute value is used internally.
Value
The input data as a tibble with an additional column .Se
containing effective saturation (dimensionless, 0–1).
Details
$$S_e(h) = \frac{1}{(1 + (\alpha |h|)^n)^m}$$
S_e ranges from 0 (completely dry) to 1 (saturated). It is related to volumetric water content by:
$$\theta(h) = \theta_r + (\theta_s - \theta_r) \cdot S_e(h)$$
Use this function when you need the dimensionless saturation state rather than the absolute water content (e.g. as an intermediate for K(h) or when comparing soils with different θ_r/θ_s).
References
Van Genuchten, M. Th. (1980). A closed-form equation for predicting the hydraulic conductivity of unsaturated soils. Soil Science Society of America Journal, 44(5), 892–898. https://doi.org/10.2136/sssaj1980.03615995004400050002x
See also
swrc_van_genuchten() for absolute water content θ(h),
hydraulic_conductivity() for K(h).
Examples
library(tibble)
soil <- tibble(h = c(0, 10, 100, 1000, 15000))
saturation_index(soil, alpha = 0.02, n = 1.5, h = h)
#> # A tibble: 5 × 2
#> h .Se
#> <dbl> <dbl>
#> 1 0 1
#> 2 10 0.972
#> 3 100 0.639
#> 4 1000 0.223
#> 5 15000 0.0577
# Confirm relationship to swrc_van_genuchten()
soil |>
saturation_index(alpha = 0.02, n = 1.5, h = h) |>
dplyr::mutate(.theta_check = 0.05 + (0.45 - 0.05) * .Se)
#> # A tibble: 5 × 3
#> h .Se .theta_check
#> <dbl> <dbl> <dbl>
#> 1 0 1 0.45
#> 2 10 0.972 0.439
#> 3 100 0.639 0.306
#> 4 1000 0.223 0.139
#> 5 15000 0.0577 0.0731
