Compute unsaturated hydraulic conductivity from Minidisk data
Source:R/minidisk_conductivity.R
minidisk_conductivity.RdA convenience wrapper that combines infiltration_vg_params() and
hydraulic_conductivity_minidisk() (and optionally parameter_A_zhang())
into a single pipeline step. Given a data frame containing a Philip
\(C_1\) coefficient (typically from fit_infiltration()), it looks up or
computes the Van Genuchten A-parameter and returns \(K(h)\).
Usage
minidisk_conductivity(
data,
texture,
suction,
C1,
method = c("tabulated", "zhang"),
radius = 2.25
)Arguments
- data
A data frame or tibble, typically the output of
fit_infiltration()joined with sample metadata.- texture
Bare column name or character scalar; USDA texture class (e.g.
"sandy loam"). Must match the names in minidisk_vg_params.- suction
Bare column name or numeric scalar; applied suction in cm (e.g.
2). Must be one of the tabulated levels (0.5, 1, 2, 3, 4, 5, 6, 7) whenmethod = "tabulated".- C1
Bare column name; the Philip \(C_1\) coefficient (cm/s). Defaults to
.C1(the column produced byfit_infiltration()).- method
"tabulated"(default) uses the Decagon lookup table;"zhang"computes A analytically from Zhang (1997).- radius
Disc radius in cm. Only used when
method = "zhang". Defaults to2.25.
Value
The input tibble with .n, .alpha, .A, and .K_h appended.
When method = "zhang" the .A column reflects the analytically computed
value rather than the tabulated one.
Details
Two methods are available for the A-parameter:
"tabulated"Looks up A from the Decagon Devices (2005) reference table via
infiltration_vg_params(). Valid for the 8 standard Minidisk suction levels (0.5–7 cm) and 12 USDA texture classes. The table assumes a disc radius of 2.25 cm."zhang"Computes A analytically from Zhang (1997) via
parameter_A_zhang(). Valid for any suction and disc radius; uses the \(n\) and \(\alpha\) values from the VG lookup as inputs.
References
Decagon Devices (2005). Mini Disk Infiltrometer: User's Manual. Decagon Devices, Inc., Pullman, WA.
Zhang, R. (1997). Determination of soil sorptivity and hydraulic conductivity from the disk infiltrometer. Soil Science Society of America Journal, 61(4), 1024–1030.
Examples
library(tibble)
library(dplyr)
# Minimal single-sample pipeline: raw data -> K(h) in four steps.
# fit_infiltration() returns only group keys + coefficients, so pass
# texture and suction as scalars here.
minidisk <- tibble(
time = seq(0, 300, 30),
volume = c(95, 89, 86, 83, 80, 77, 74, 73, 71, 69, 67)
)
minidisk |>
infiltration_cumulative(time = time, volume = volume) |>
fit_infiltration(.infiltration, .sqrt_time) |>
minidisk_conductivity(texture = "sandy loam", suction = 2)
#> # A tibble: 1 × 9
#> .C2 .C1 .C2_std_error .C1_std_error .convergence .n .alpha .A
#> <dbl> <dbl> <dbl> <dbl> <lgl> <dbl> <dbl> <dbl>
#> 1 0.0600 0.00252 0.00753 0.000396 TRUE 1.89 0.075 3.91
#> # ℹ 1 more variable: .K_h <dbl>
# Multi-sample pipeline: join sample metadata back after fitting so that
# texture and suction are available to minidisk_conductivity().
multi <- tibble(
sample = rep(c("A", "B"), each = 11),
time = rep(seq(0, 300, 30), 2),
volume = c(95, 89, 86, 83, 80, 77, 74, 73, 71, 69, 67,
83, 77, 74, 71, 68, 65, 62, 59, 57, 55, 53)
)
meta <- tibble(
sample = c("A", "B"),
texture = c("sandy loam", "loam"),
suction = 2
)
multi |>
group_by(sample) |>
infiltration_cumulative(time = time, volume = volume) |>
fit_infiltration(.infiltration, .sqrt_time) |>
left_join(meta, by = "sample") |>
minidisk_conductivity(texture = texture, suction = suction)
#> # A tibble: 2 × 12
#> sample .C2 .C1 .C2_std_error .C1_std_error .convergence texture suction
#> <chr> <dbl> <dbl> <dbl> <dbl> <lgl> <chr> <dbl>
#> 1 A 0.0600 0.00252 0.00753 0.000396 TRUE sandy … 2
#> 2 B 0.0479 0.00367 0.00596 0.000313 TRUE loam 2
#> # ℹ 4 more variables: .n <dbl>, .alpha <dbl>, .A <dbl>, .K_h <dbl>
# Analytical A via Zhang (1997)
minidisk |>
infiltration_cumulative(time = time, volume = volume) |>
fit_infiltration(.infiltration, .sqrt_time) |>
minidisk_conductivity(texture = "sandy loam", suction = 2,
method = "zhang", radius = 2.25)
#> # A tibble: 1 × 9
#> .C2 .C1 .C2_std_error .C1_std_error .convergence .n .alpha .A
#> <dbl> <dbl> <dbl> <dbl> <lgl> <dbl> <dbl> <dbl>
#> 1 0.0600 0.00252 0.00753 0.000396 TRUE 1.89 0.075 3.82
#> # ℹ 1 more variable: .K_h <dbl>