Skip to contents

A 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) when method = "tabulated".

C1

Bare column name; the Philip \(C_1\) coefficient (cm/s). Defaults to .C1 (the column produced by fit_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 to 2.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>