Skip to contents

Calculates the soil water capacity C(h) = −dθ/dh at given matric potential values using the analytical derivative of the Van Genuchten (1980) model with the Mualem constraint (m = 1 − 1/n).

Usage

soil_water_capacity(data, theta_r, theta_s, alpha, n, h)

Arguments

data

A data frame or tibble. Passed as the first argument so the function is compatible with |> and %>% pipes.

theta_r

Residual water content (m³/m³). Either a bare column name from data or a scalar numeric value.

theta_s

Saturated water content (m³/m³). Either a bare column name from data or a scalar numeric value.

alpha

Van Genuchten shape parameter (1/cm or 1/m, matching units of h). Either a bare column name or 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 .C containing soil water capacity in units of 1/cm (or 1/m, matching the units of h and alpha). At h = 0, .C is 0.

Details

The soil water capacity is the slope of the soil water retention curve: $$C(h) = -\frac{d\theta}{dh} = \frac{(\theta_s - \theta_r) \cdot m \cdot n \cdot \alpha^n \cdot |h|^{n-1}} {(1 + (\alpha |h|)^n)^{m+1}}$$

C(h) is zero at saturation (h = 0) and at very high suction (h → ∞), and reaches a maximum at the inflection point of the retention curve.

C(h) is needed for computing soil water diffusivity D(h) = K(h)/C(h) and appears in the Richards equation for unsaturated flow.

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

Examples

library(tibble)

soil <- tibble(h = c(0, 10, 100, 1000, 15000))

soil_water_capacity(soil, theta_r = 0.05, theta_s = 0.45,
                    alpha = 0.02, n = 1.5, h = h)
#> # A tibble: 5 × 2
#>       h          .C
#>   <dbl>       <dbl>
#> 1     0 0          
#> 2    10 0.00160    
#> 3   100 0.000945   
#> 4  1000 0.0000441  
#> 5 15000 0.000000770

# Pipeline with swrc_van_genuchten()
soil |>
  swrc_van_genuchten(theta_r = 0.05, theta_s = 0.45,
                     alpha = 0.02, n = 1.5, h = h) |>
  soil_water_capacity(theta_r = 0.05, theta_s = 0.45,
                      alpha = 0.02, n = 1.5, h = h)
#> # A tibble: 5 × 3
#>       h .theta          .C
#>   <dbl>  <dbl>       <dbl>
#> 1     0 0.45   0          
#> 2    10 0.439  0.00160    
#> 3   100 0.306  0.000945   
#> 4  1000 0.139  0.0000441  
#> 5 15000 0.0731 0.000000770