eps2theta: Convert between epsilon (permittivity) and theta (volumetric...

View source: R/eps2theta.R

eps2thetaR Documentation

Convert between epsilon (permittivity) and theta (volumetric water content) .

Description

Convert between epsilon (permittivity) and theta (volumetric water content) using different equations.

Usage

eps2theta(epsdata,   equation)
theta2eps(thetadata, equation, check_range = TRUE)

Arguments

epsdata

dataframe holding at least a column epsilon and potentially others, depending on the choice of equation. See details.

thetadata

dataframe holding at least a column theta (volumetric water content, [-]) and potentially others, depending on the choice of equation. See details.

equation

Equation to be used. Must be one of "deltaT_minorg", "DrnevichEtal2005", "FerschEtal2017", "Jacobsen_Schjonning1993", "JuEtal2010", "MalickiEtal1996", "RothEtal1992", "SchaapEtal1997", "SinghEtal2017", "ToppEtal1980", "ZhaoEtal2016".

check_range

= TRUE. Raise error if theta is outside [0,1]

Details

Applies various equations, most of which are listed in Mohamed & Paleologos, 2018. The following columns in the data frame epsdata are supported and may be required, depending on the choice of the equation:

  • epsilon: Electric permittivity. [-]

  • soil: Soil type indicator. "mineral", "organic"

  • n: Soil porosity. [-]

  • BD: dry bulk density. [g/\text{cm}^3]

  • clay_perc: Percent clay. [%]

  • om_perc: Percent organic matter. [%]

  • cohesive: is the soil cohesive? [0/1]

theta2eps is the inverse of eps2theta. However, currently only implemented for equation=c("deltaT_minorg", "SchaapEtal1997", "ToppEtal1980" by piecewise linear interpolation.

Equations

The respective equations used are:

  • "deltaT_minorg" (Delta-T Devices Ltd, 1998):

    \theta = \frac{\sqrt{\epsilon}-a_0}{a_1}

    with a_0=1.6 and a_1=8.4 for mineral soils, a_0=1.3 and a_1=7.7 for organic soils

  • "DrnevichEtal2005" (Drnevich et al., 2005):

    \theta = \frac{\sqrt{\epsilon}-\frac{a}{BD}}{b}

    with a=0.95 and b=8.8 for cohesive soils, a=1 and b=8.5 for non-cohesive soils,

  • "FerschEtal2017" (Fersch et al. 2017):

    \theta = \frac{(\sqrt(\epsilon) - (1 - n* \sqrt(3.29)) - n * 1)}{ (\sqrt(80) - \sqrt(1))}

  • "Jacobsen_Schjonning1993" (Jacobsen & Schjonning, 1993):

    \theta = -3.41*1e-2 +3.45*1e-2*\epsilon-11.4*1e-4*\epsilon^2 + 17.1*1e-6*\epsilon^3- 3.7*1e-2*BD + 7.36*1e-4*clay\_perc + 47.7*1e-4 * om\_perc

  • "JuEtal2010" (Ju et al., 2010):

    \theta = 0.1228*\sqrt{\epsilon} - 0.1322*BD -0.0152

  • "MalickiEtal1996" (Malicki et al., 1996):

    \theta = \frac{\sqrt{\epsilon}-0.819-0.168*BD-0.159*BD^2}{7.17+1.18*BD}

  • "RothEtal1992" (Roth et al., 1992):

    \theta = (a_1 + a_2*{\epsilon} +a_3 *{\epsilon}^2 + a_4*{\epsilon}^3)

    with a_1 = -0.0728, a_2 = 0.0448, a_3 = -0.00195, a_4= 0.0000361 for mineral soils and a_1 = 0.0233, a_2 = 0.0285, a_3 = -0.000431, a_4 = 0.00000304 for organic soils

  • "SchaapEtal1997" (Schaap et al. 1997 [eq. 2b in Vaz et al. 2013]):

    \theta = (0.133*\sqrt{\epsilon} -0.146)^{0.885}

  • "SinghEtal2017" (Singh et al. 2019 (version for CS655)):

    \theta = a*\sqrt{\epsilon} + b

    with

    a = a_1*clay\_perc^2 + a_2*clay\_perc + a_3

    b = b_1*clay\_perc^2 + b_2*clay\_perc + b_3

    and the coefficients for CS655 (a_1=-3.33e-5, a_2=1.14e-3, a_3=0.108, b_1=6.52e-5, b_2=-2.48e-3, b_3=-0.16)

  • "ToppEtal1980" (Topp et al., 1980):

    \theta = -0.053+ 2.92e-2*\epsilon -5.5e-4*\epsilon^2 + 4.3e-6*\epsilon^3

  • "ZhaoEtal2016" (Zhao et al., 2016):

    \theta = \frac{0.3039 * BD - 2.1851 + \sqrt{\epsilon}}{(18.0283 * BD - 17.9531) + (-0.6806 * BD + 1.8351) * \sqrt{\epsilon}}

Value

A vector of reals, i.e. theta (volumetric water content) [-].

For equation=="list", a named list of all supported equations is returned. The elements in the list are character strings, denoting the necessary input fields for the equations.

Note

The different equations can automatically tested and compared with compare_eps2theta_equations.

Author(s)

Till Francke

References

Delta-T Devices Ltd, 1998. ThetaProbe SOIL MOISTURE SENSOR TYPE ML2 USER MANUAL (ML2-UM-1). Delta-T Devices Ltd, Cambridge, UK.

Drnevich, V.P., Ashmawy, A.K., Yu, X., Sallam, A.M., 2005. Time domain reflectometry for water content and density of soils: study of soil-dependent calibration constants. Can. Geotech. J. 42, 1053-1065. https://doi.org/10.1139/T05-047

Fersch, B., Jagdhuber, T., Schroen, M., Voelksch, I., Jaeger, M., 2018. Synergies for Soil Moisture Retrieval Across Scales From Airborne Polarimetric SAR, Cosmic Ray Neutron Roving, and an In Situ Sensor Network. Water Resour. Res. 54, 9364-9383. https://doi.org/10.1029/2018WR023337

Jacobsen, O., Schjonning, P., 1993. A Laboratory Calibration of Time-Domain Reflectometry for Soil-Water Measurement Including Effects of Bulk-Density and Texture. J. Hydrol. 151, 147-157. https://doi.org/10.1016/0022-1694(93)90233-Y

Ju, Z., Liu, X., Ren, T., & Hu, C., 2010. Measuring Soil Water Content With Time Domain Reflectometry. Soil Science, 175(10), 469-473. doi:10.1097/ss.0b013e3181f55aa3

Malicki, M.A., Plagge, R., Roth, C.H., 1996. Improving the calibration of dielectric TDR soil moisture determination taking into account the solid soil. Eur. J. Soil Sci. 47, 357-366. https://doi.org/10.1111/j.1365-2389.1996.tb01409.x

Mohamed, A.-M.O., Paleologos, E.K., 2018. Dielectric Permittivity and Moisture Content, in: Fundamentals of Geoenvironmental Engineering. Elsevier, pp. 581-637. https://doi.org/10.1016/B978-0-12-804830-6.00016-8

Singh, J., Lo, T., Rudnick, D.R., Irmak, S., Blanco-Canqui, H., 2019. Quantifying and correcting for clay content effects on soil water measurement by reflectometers. Agric. Water Manage. 216, 390-399. https://doi.org/10.1016/j.agwat.2019.02.024

Topp, G., Davis, J., Annan, A., 1980. Electromagnetic Determination of Soil-Water Content - Measurements in Coaxial Transmission-Lines. Water Resour. Res. 16, 574-582. https://doi.org/10.1029/WR016i003p00574

Vaz, C. & Jones, Scott & Meding, Stephen & Tuller, Markus. (2013). Evaluation of Standard Calibration Functions for Eight Electromagnetic Soil Moisture Sensors. Vadose Zone Journal. 12. 10.2136/vzj2012.0160. https://doi.org/10.2136/vzj2012.0160

Zhao, Y., Ling, D., Wang, Y., Huang, B., Wang, H., 2016. Study on a calibration equation for soil water content in field tests using time domain reflectometry. J. Zhejiang Univ.-SCI A 17, 240-252. https://doi.org/10.1631/jzus.A1500065

See Also

correct_sensor_voltage compare_eps2theta_equations

Examples

#return list of supported equations
eps2theta(epsdata = NULL, equation = "list")

## Not run: 
# example 2: reproduce figure on page 10, DeltaT manual (voltage vs. theta) ####
  # load linearisation table
  lin_file = system.file("example", "linearization_Theta_Probe.txt", package = "FDR2soilmoisture") #Linearisation table from DeltaT ThetaProbe manual. p. 14
  lin_data = read.table(lin_file, nrow=-1, sep="\t", stringsAsFactors = FALSE, header=TRUE, na.strings = c("NA",""))  #load the file

  #plot data from linearization table
  plot(1, xlim=c(0, 1.2), ylim= c(0,1), xlab="ThetaProbe voltage [V]", ylab="theta", type="n")
  points(lin_data$V_min, lin_data$theta, col="blue",pch=0)
  points(lin_data$V_org, lin_data$theta, col="green", pch=0)

  V = seq(from=0.0, to=1.3, length.out=100) #voltage values to plot along
  
  #add graphs produced with polynoms (eq. 1)
  #mineral
  theta = eps2theta(epsdata = data.frame(epsilon =V2eps(V, type = "Theta Probe polynomial"), soil="mineral"), equation="deltaT_minorg")
  lines(V, theta, col="blue", lty="dashed")
  #organic
  theta = eps2theta(epsdata = data.frame(epsilon =V2eps(V, type = "Theta Probe polynomial"), soil="organic"), equation="deltaT_minorg")
  lines(V, theta, col="green", lty="dashed")
  
  #add graphs produced with lookup-function (table page 11)
  #mineral
  theta_min = eps2theta(epsdata = data.frame(epsilon =V2eps(V, type = "Theta Probe"), soil="mineral"), equation="deltaT_minorg")
  lines(V, theta_min, col="blue", lty=1)
  #organic
  theta_org = eps2theta(epsdata = data.frame(epsilon =V2eps(V, type = "Theta Probe"), soil="organic"), equation="deltaT_minorg")
  lines(V, theta_org, col="green", lty=1)
  
  
  legend("topleft", legend=c("mineral", "organic", "lookup table", "polynomial", "lookup, linear interpolation"),
              lty=c(1,1,0,2,1), pch=c(NA,NA, 0,NA, NA), col=c("blue", "green", "black", "black", "black"))
  #manual, p. 10 states:
  # "In the range 0 to 1 Volt (corresponding to a soil moisture range 0 to ~ 0.55 by volume),
  # this relationship can be fitted very precisely by a 3rd order polynomial"
  #manual, p. 11 states:
  #"For very high moisture contents (theta > 0.5 m3*m-3), the polynomial equation should be used.  This is usually only necessary for organic soils."
  # However, the polynom obviously differs considerably from the points in the linearization table
  # especially for U > 1 V or theta > 0.5, so only the statement on page 10 seems correct.
  
  
  
# example 2b) add curves from device-specific calibration ####
  calib_file = system.file("example", "sensor_calibration.txt", package = "FDR2soilmoisture") #replace this by your own calibration file
  calib_data = read.table(calib_file, nrow=-1, sep="\t", stringsAsFactors = FALSE, header=TRUE, na.strings = c("NA",""))  #load the file
  
  calib_data = calib_data[calib_data$type=="Theta Probe",] #only use calibration data from Theta Probes
  
  #plot the point obtained from the calibration records
  points(calib_data$air_measurement/1000, rep(0, nrow(calib_data)), col="red")
  points(calib_data$water_measurement/1000, sqrt(rep(1, nrow(calib_data))), col="red")

  #compute corresponding corrected voltage for all sensors in calibration list
  V_corr = sapply(FUN = correct_sensor_values, X = calib_data$serial_no,  values= V, calib_data=calib_data, adjust_range = FALSE,var_type = "Voltage", discard_outlier=TRUE, warnOnly = TRUE)
  #...and the respective epsilon
  eps_corr = apply(FUN = V2eps, X =  V_corr,  MARGIN = 1, type="Theta Probe")
  #...and the respective theta
  eps2theta_wrapper = function(eps, soil)
  {
    eps2theta(epsdata = data.frame(epsilon=eps, soil=soil), equation="deltaT_minorg")
  }
  theta_corr_min = apply(FUN = eps2theta_wrapper, X =  eps_corr,  MARGIN = 1, soil="mineral")
  theta_corr_org = apply(FUN = eps2theta_wrapper, X =  eps_corr,  MARGIN = 1, soil="organic")
  
  #plot lines for all sensors
  for (i in 1:ncol(theta_corr_min))
    lines(V, theta_corr_min[,i], col="lightblue", lty="dotted")

  for (i in 1:ncol(theta_corr_org))
    lines(V, theta_corr_org[,i], col="lightgreen", lty="dotted")
  
  #add original lines again on top
  lines(V, theta_min, col="blue", lty=1)  #mineral
  lines(V, theta_org, col="green", lty=1) #organic

#example 2b: add plot showing range of theta values
    range_theta_corr_min = apply(X=theta_corr_min, MAR=1, FUN=function(x){diff(range(x, na.rm=TRUE))})
    lines(V, range_theta_corr_min, col="blue", lwd=2)
    median(range_theta_corr_min) 
    
    range_theta_corr_org = apply(X=theta_corr_org, MAR=1, FUN=function(x){diff(range(x, na.rm=TRUE))})
    lines(V, range_theta_corr_org, col="green", lwd=2)
    median(range_theta_corr_org) 
    
    legend("topleft", legend=c("mineral", "organic", "lookup table", "polynomial", "lookup, linear interpolation", "..., uncorrected sensors", "range of theta"),
           lty=c(1,1,0,2,1,3,1), pch=c(NA,NA, 0,NA, NA, NA), col=c("blue", "green", "black", "black", "black", "black", "black"),
           lwd=c(rep(1,6),2))


## End(Not run)

TillF/FDR2soilmoisture documentation built on Dec. 6, 2024, 9:30 a.m.