Title: | Soil Hydraulic Properties |
---|---|
Description: | Provides functions for (1) soil water retention (SWC) and unsaturated hydraulic conductivity (Ku) (van Genuchten-Mualem (vGM or vG) [1, 2], Peters-Durner-Iden (PDI) [3, 4, 5], Brooks and Corey (bc) [8]), (2) fitting of parameter for SWC and/or Ku using Shuffled Complex Evolution (SCE) optimisation and (3) calculation of soil hydraulic properties (Ku and soil water contents) based on the simplified evaporation method (SEM) [6, 7]. Main references: [1] van Genuchten (1980) <doi:10.2136/sssaj1980.03615995004400050002x>, [2] Mualem (1976) <doi:10.1029/WR012i003p00513>, [3] Peters (2013) <doi:10.1002/wrcr.20548>, [4] Iden and Durner (2013) <doi:10.1002/2014WR015937>, [5] Peters (2014) <doi:10.1002/2014WR015937>, [6] Wind G. P. (1966), [7] Peters and Durner (2008) <doi:10.1016/j.jhydrol.2008.04.016> and [8] Brooks and Corey (1964). |
Authors: | Ullrich Dettmann [aut, cre], Felix Andrews [ctb] (For the code copied from the hydromad::SCEoptim function (Version: 0.9-15) which is not on r-cran (https://github.com/floybix/hydromad). The SCEoptim function is adapted, and substantially revised from Brecht Donckels MATLAB code which is in turn adopted from Qingyun Duans MATLAB code), Brecht Donckels [ctb] (For the Matlab code which was adapted and reviesed in the hydromad::SCEoptim function.), Qingyun Duan [ctb] (For the MATLAB code adapted from Brecht Donkels.) |
Maintainer: | Ullrich Dettmann <[email protected]> |
License: | GPL (>= 2) |
Version: | 0.1.7 |
Built: | 2024-11-06 02:55:04 UTC |
Source: | https://bitbucket.org/ullid/soilhyp |
Akaike Information Criterion with or without correction term. Expression from Ye et al. (2008). Correction term by Hurvich and Tsai (1989).
AIC_HY(Phi, n.data, n.par, corr = TRUE)
AIC_HY(Phi, n.data, n.par, corr = TRUE)
Phi |
objective function value |
n.data |
number of measured data |
n.par |
number of adjustable parameters |
corr |
correction term TRUE or FALSE (see details) |
corr:
If number of measurements is small compared to the number of parameters, AIC can be extended by a correction term.
Ye, M., P.D. Meyer, and S.P. Neuman (2008): On model selection criteria in multimodel analysis. Water Resources Research 44 (3) W03428, doi:10.1029/2008WR006803.
Hurvich, C., and C. Tsai (1989): Regression and time series model selection in small samples. Biometrika 76 (2), 297–307, doi:10.1093/biomet/76.2.297.
Peters and Durner (2015): SHYPFIT 2.0 User's Manual.
Akaike, H. (1974): A new look at statistical model identification, IEEE Trans. Autom. Control, AC-19, 716–723.
Bayesian Information Criterion (Schwarz, 1978) for least square estimations.
BIC_HY(Phi, n.data, n.par)
BIC_HY(Phi, n.data, n.par)
Phi |
objective function value |
n.data |
number of measured data |
n.par |
number of adjustable parameters |
Ye, M., P.D. Meyer, and S.P. Neuman (2008): On model selection criteria in multimodel analysis. Water Resources Research 44 (3) W03428, doi:10.1029/2008WR006803.
Schwarz, G. (1978): Estimating the dimension of a model. The Annals of Statistics 6 (2), 461–464. URL: http://dx. doi. org/10.1214/aos/1176344136.
Peters and Durner (2015): SHYPFIT 2.0 User's Manual.
Calculates saturated hydraulic conductivity (ks) following Darcy's law
calcKS(V, Tmeas, L, A, dP)
calcKS(V, Tmeas, L, A, dP)
V |
water volume passed sample [L³] |
Tmeas |
duration of measurement [time] |
L |
length of the sample [L] |
A |
cross-sectional area [L²] |
dP |
pressure difference between top and bottom of the sample during the measurement [L] |
Keep units consistent, e.g: V = cm³, dP = cm, A = cm², L = cm, Tmeas = hour
hydraulic conductivity (ks) [L/time].
Example data of an Evaporation experiment
data(dataSEM)
data(dataSEM)
An object of class dataSEM
(inherits from data.frame
) with 332 rows and 4 columns.
ts: timestamp [hour]
weight: total weight of soil sample [g]
tens.up: measurements of upper tensiometer [cm]
tens.low: measurements of lower tensiometer [cm]
Soil hydraulic property data including soil water contents (th), unsaturated hydraulic conductivities (Ku) and the corresponding suctions/pressure heads.
data(dataSHP)
data(dataSHP)
An object of class data.frame
with 331 rows and 3 columns.
Ku: unsaturated hydraulic conductivity
th: volumetric water content
suc: suction
List with soil water contents (th) and unsaturated hydraulic conductivity values (ku) for spezific parameter of the uni- and bimodal hydraulic functions of van Genuchten and Peters-Durner-Iden (PDI).
data(dataSHP)
data(dataSHP)
An object of class list
of length 8.
dataTestthat$th.vgm.uni: soil water contents for unimodal van Genuchten for parameter ths = 0.4, thr = 0, alfa = 0.02 and n = 1.5
dataTestthat$th.vgm.bi: soil water contents for bimodal van Genuchten for parameter ths = 0.4, thr = 0, alfa = 0.02, n = 2, w2 = 0.2, alfa2 = 1 and n2 = 10
dataTestthat$th.pdi.uni: soil water contents for unimodal PDI for parameter ths = 0.4, thr = 0, alfa = 0.02 and n = 1.5
dataTestthat$th.pdi.bi: soil water contents for bimodal PDI for parameter ths = 0.4, thr = 0, alfa = 0.02, n = 2, w2 = 0.2, alfa2 = 1 and n2 = 10
dataTestthat$ku.vgm.uni: soil water contents for unimodal van Genuchten for parameter Ks = 10, ths = 0.5, thr = 0, alfa = 0.02, n = 1.5 and tau = 0.5
dataTestthat$ku.vgm.bi: soil water contents for bimodal van Genuchten for parameter Ks = 10, ths = 0.5, thr = 0, alfa = 0.02, n = 1.5, tau = 0.5, w2 = 0.1, alfa2 = 0.1 and n2 = 3
dataTestthat$ku.pdi.uni: soil water contents for unimodal PDI for parameter Ks = 10, ths = 0.5, thr = 0, alfa = 0.02, n = 1.5, tau = 0.5 and omega = 0.001
dataTestthat$ku.pdi.bi: soil water contents for bimodal PDI for parameter Ks = 10, ths = 0.5, thr = 0, alfa = 0.02, n = 1.5, tau = 0.5, omega = 0.001, w2 = 0.2, alfa2 = 1 and n2 = 10
Calculate volumetric soil water content (SWC [L³/L³] from dielectric constant (DK) using different equations (e.g. Topp et al. 1980). Contains mainly functions for peat and other organic soils.
DK_to_SWC( DK, FUN = c("topp", "jacobsen", "jacobsen_soil_prop", "pepin_5cm", "pepin", "roth_org", "malicki_bd", "malicki_ths", "myllys", "myllys_sphagnum", "myllys_carex", "kellner", "kellner_h2", "kellner_h3", "kellner_h4", "beckwith", "yoshikawa_deadmoss", "yoshikawa_livemoss", "nagare", "oleszczuk", "gs3"), bd, ths, clay, SOM )
DK_to_SWC( DK, FUN = c("topp", "jacobsen", "jacobsen_soil_prop", "pepin_5cm", "pepin", "roth_org", "malicki_bd", "malicki_ths", "myllys", "myllys_sphagnum", "myllys_carex", "kellner", "kellner_h2", "kellner_h3", "kellner_h4", "beckwith", "yoshikawa_deadmoss", "yoshikawa_livemoss", "nagare", "oleszczuk", "gs3"), bd, ths, clay, SOM )
DK |
dielectric constant |
FUN |
character string specifying the polynominal function. See details. |
bd |
bulk density [g/cm³] (needed for FUN == 'malicki_bd' and 'jacobsen_soil_prop') |
ths |
porosity or saturated water content [L³/L³] (needed for 'malicki_ths') |
clay |
content of clay [percent] (only needed for 'jacobsen') |
SOM |
soil organic matter [percent] (for 'jacobsen_soil_prop') |
Possible functions (FUN) are':
Topp et al. (1980)
Jacobsen and Schjonning (1993), equation 2
Jacobsen and Schjonning (1993), equation 3 (bd, ths and SOM are required as input)
Pepin, S. et al. (1992), Table 2 Depth 5 cm
Pepin, S. et al. (1992), Table 2 Pooled data
Roth et al. (1992), Tabel 3c
Malicki, M.A. et al. (1996), equation 10 (bd is required as input)
Malicki, M.A. et al. (1996), equation 12 (ths is required as input)
Myllys M. and Simojoki, A. (1996), Table 2 pooled
Myllys M. and Simojoki, A. (1996), Table 2 Sphagnum
Myllys M. and Simojoki, A. (1996), Table 2 Carex
Kellner E., Lundin L.C. (2001), Table 2 Pooled data
Kellner E., Lundin L.C. (2001), Table 2 H2
Kellner E., Lundin L.C. (2001), Table 2 H3
Kellner E., Lundin L.C. (2001), Table 2 H4
Beckwith C.W. and Baird A.J. (2001), eq. 1
from Tabel 1 in Nagare et al. (2001)
from Tabel 1 in Nagare et al. (2001)
Nagare et al. (2011), combined from Table 4
from Table 1 in Oleszczuk et al. (2004)
Meter group, eq. 7
data.table with columns DK, SWC and FUN.
Beckwith C.W., Baird A.J. (2001): Effect of biogenic gas bubbles on water flow through poorly decomposed blanket peat. Water Resour. Res., 37(3), 551-558.
Decagon Device (2016): GS3 Water Content, EC an Temperature Sensors, Operators maual , Decagon Device, Inc 2365 NE Hopkins Court Pullman WA 99163.
Jacobsen, O.H., Schjonning, P. (1993): A laboratory calibration of time domain reflectometry for soil water measurement including effects of bulk density and texture. Journal of Hydrology, 151(2-4), 147-157.
Kellner E., Lundin L.C. (2001): Calibration of Time Domain Reflectometry for Water Content in Peat Soil, Uppsala University, Dept. of Earth Sciences/Hydrology,SE-752 36 Uppsala, Sweden. Hydrology Research, 32(4-5), 315-332.
Malicki, M.A., Plagge, R., Roth, C.H. (1996): Improving the calibration of dielectric TDR soil moisture determination taking into account the solid soil. European Journal of Soil Science, 47:357-366.
Meter group: Operator manual GS3 (http://library.metergroup.com/Manuals/20429_GS3_Web.pdf)
Myllys M., Simojoki, A. (1996): Calibration of time domain reflectometry (TDR) for soil moisture measuremnts in cultivated peat soils, Agricultural Research centre of Finland, Institut of Cropand Soil Science, University of helsinki, Department of Applied Chemistry and Mircrobiology.
Nagare, R.M., Schincariol, R. A., Quinton, W.L., Hayashi, M. (2011): Laboratory calibration of time domain reflectometry to determine moisture content in undisturbed peat samples. European journal of soil science, 62(4), 505-515.
Oleszczuk R., Brandyk T., and Szatylowicz J., 1998: Possibilities of TDR method application to measure moisture content of peat-muck soil (in Polish). Zesz. Prob. Post. Nauk Roln., 458, 263-274.
Oleszczuk, R., Brandyk, T., Gnatowski, T., & Szatylowicz, J. (2004). Calibration of TDR for moisture determination in peat deposits. International agrophysics, 18(2).
Pepin, S., Plamondon, A.P., and Stein, J. (1992): Peat water-content measurement using time domain reflectrometry, Can. J. of Forest Res., Vol. 22, pp. 534-540
Roth C.H., M.A. Malicki, R. Plagge (1992): Empirical evaluation of the relationship between soil dielectric constant and volumetric water content as the basis for calibration soil moisture measurements by TDR; Institute of Ecology, Technical University of Berlin, Berlin, Germany and *Polish Academy of sciences, Institute of Agrophysics, ul. Doswiadczalna 4, 20-236 Lublin, Poland; Journal of Soil Science, 1992, 43, 1-13.
Topp, G.C., Davis, J.L., Annan, A.P. (1980): Electromagnetic determination of soil water content: Measurements in coaxial transmission lines. Water resources research, 16(3), 574-582.
Yoshikawa, K., Overduin, P., Harden, J. (2004): Moisture content measurements of moss (Sphagnum spp.) using commercial sensors. Permafrost Periglac, 15, 309-318.
Estimate parameter for soil water retention (SWC) and/or unsaturated hydraulic conductivity function (Ku) using Shuffled Complex Evolution (SCE) optimisation. Parameter can be estimated for van Genuchten-Mualem (vg or vgm) or Peters-Durner-Iden (PDI) parameterisation of the soil hydraulic properties.
fitSHP( obs = list(th = NULL, K = NULL), suc = list(th = NULL, K = NULL), par = NULL, lower = NULL, upper = NULL, FUN.shp = "vg", modality = "uni", par.shp = NULL, fit = "both", weighting = "var", log = c("alfa", "n", "ks"), control = list(ncomplex = 15, reltol = 1e-07, tolsteps = 7), suc.negativ = FALSE, integral = FALSE, L = NULL, log_Ku = TRUE, print.info = TRUE )
fitSHP( obs = list(th = NULL, K = NULL), suc = list(th = NULL, K = NULL), par = NULL, lower = NULL, upper = NULL, FUN.shp = "vg", modality = "uni", par.shp = NULL, fit = "both", weighting = "var", log = c("alfa", "n", "ks"), control = list(ncomplex = 15, reltol = 1e-07, tolsteps = 7), suc.negativ = FALSE, integral = FALSE, L = NULL, log_Ku = TRUE, print.info = TRUE )
obs |
list with named observations (th for water content and K for unsaturated hydraulic conductivity data) |
suc |
list of named suctions corresponding to th and/or K |
par |
a numeric vector of initial parameter values (see also |
lower |
lower bounds on the parameters. Should be the same length as |
upper |
upper bounds on the parameters. Should be the same length as |
FUN.shp |
Funktion for soil hydraulic properties (vG, PDI or bc) (see |
modality |
pore size distribution ('uni' or 'bi') |
par.shp |
fixed parameter value named in list or vector |
fit |
fit parameter for 'SWC', 'Ku' or 'both' simultaneous. |
weighting |
weighting between SWC and Ku. Used if fit == both ('var', 'norm' or '2step'). |
log |
names of parameter in list or vector which should be logarithmized during optimization |
control |
a list of options as in |
suc.negativ |
set TRUE if suction/pressure heads are negative and FALSE if positive |
integral |
th as point value vs. suc(h) (FALSE) or th as mean water content over the column divided by the height (L) vs. suc(h) (TRUE) (see details). |
L |
sample height [cm]. Only needed for integral == TRUE |
log_Ku |
logarithmize Ku in the objective function and for weighting (TRUE). |
print.info |
print information about default values for par, lower, and upper if missing or fitting accuracy (TRUE or FALSE) |
var: th and K are weighted in the objective fuction by the measurement variance
norm: th and K are normed in objective fuction
stepwise: the parameter for th are fitted first and the remaining parameter for K afterwards (2step works aswell)
The use of log is suggested for paramter 'alfa', 'n' and 'ks' for modality == 'uni'. For modality 'bi' additional 'alfa2' and 'n2' and for Fun.shp == 'pdi' additional 'omega'.
Parameter in output ($par) are not returned logarithmized.
Delfault paramter values for par, lower and upper are logarithmized automatatically
If not the default values for par, lower and upper are taken, parameter which are named in 'log' must be scaled by the user in par, lower and upper.
The "integral" method is suggested from Peters and Durner (2008, 2015) to fit parameter on data from
experiments were water contents are measured as mean water contents (e.g. simplified evaporation method or multi-step outflow experiments).
Under the assumption that the water content is distributed linear over the column, the measured
mean water content of the column is the integral over the whole column divided by the column length (L).
Under hydraulic equilibrium this is equal to the integral of the retention function over the matric
heads from the lower boundary to the upper boundary of the column divided by the height of the column (Peters 2008, 2015).
integral == TRUE can be very slow.
"fitSHP" class
Ullrich Dettmann
Peters, A., & Durner, W. (2008). Simplified evaporation method for determining soil hydraulic properties. Journal of Hydrology, 356(1), 147-162.
Peters and Durner (2015). SHYPFIT 2.0 User’s Manual
Peters, A., Iden, S. C., & Durner, W. (2015). Revisiting the simplified evaporation method: Identification of hydraulic functions considering vapor, film and corner flow. Journal of Hydrology, 527, 531-542.
## Not run: data('dataSHP') # ------------------------------------------------------------------- # fit Soil Hydraulic Properties (SHP) # ------------------------------------------------------------------- ans <- fitSHP(obs = list(th = dataSHP$th, K = dataSHP$Ku), suc = list(th = dataSHP$suc, K = dataSHP$suc), FUN.shp = 'vg', modality = 'uni', par.shp = NULL, fit = 'both', weighting = 'var', log = c('alfa', 'n', 'ks'), control = list(ncomplex = 15, reltol = 1e-07,tolsteps = 7), suc.negativ = TRUE, integral = FALSE, L = 0, print.info = TRUE ) ans$par plot(ans) # -------------------------------------------------------------------- # bimodal van Genuchten-Mualem ans <- fitSHP(obs = list(th = dataSHP$th, K = dataSHP$Ku), suc = list(th = dataSHP$suc, K = dataSHP$suc), FUN.shp = 'vg', modality = 'bi', par.shp = c(), fit = 'both', weighting = 'var', log = c('alfa', 'n', 'ks', 'alfa2', 'n2'), suc.negativ = TRUE, integral = FALSE, L = 0, print.info = TRUE, control = list(ncomplex = 15, reltol = 1e-07,tolsteps = 7) ) ans$par plot(ans) ## End(Not run)
## Not run: data('dataSHP') # ------------------------------------------------------------------- # fit Soil Hydraulic Properties (SHP) # ------------------------------------------------------------------- ans <- fitSHP(obs = list(th = dataSHP$th, K = dataSHP$Ku), suc = list(th = dataSHP$suc, K = dataSHP$suc), FUN.shp = 'vg', modality = 'uni', par.shp = NULL, fit = 'both', weighting = 'var', log = c('alfa', 'n', 'ks'), control = list(ncomplex = 15, reltol = 1e-07,tolsteps = 7), suc.negativ = TRUE, integral = FALSE, L = 0, print.info = TRUE ) ans$par plot(ans) # -------------------------------------------------------------------- # bimodal van Genuchten-Mualem ans <- fitSHP(obs = list(th = dataSHP$th, K = dataSHP$Ku), suc = list(th = dataSHP$suc, K = dataSHP$suc), FUN.shp = 'vg', modality = 'bi', par.shp = c(), fit = 'both', weighting = 'var', log = c('alfa', 'n', 'ks', 'alfa2', 'n2'), suc.negativ = TRUE, integral = FALSE, L = 0, print.info = TRUE, control = list(ncomplex = 15, reltol = 1e-07,tolsteps = 7) ) ans$par plot(ans) ## End(Not run)
Relative capillary conductivity based on Mualem's conductivity model for unimodal or bimodal van Genuchten-Mualem.
Kcap(suc, par.shp, suc.negativ = TRUE, modality = "uni")
Kcap(suc, par.shp, suc.negativ = TRUE, modality = "uni")
suc |
Suction/pressure heads. Negative if suc.negativ = TRUE |
par.shp |
named parameter in list or vector |
suc.negativ |
set TRUE if suction/pressure heads are negative and FALSE if positive |
modality |
pore size distributions ('uni' or 'bi') |
alfa [1/L]: van Genuchten shape parameter
n [-]: van Genuchten shape parameter
m [-]: shape parameter (m = 1-(1/n) if missing)
tau [-]: tortuosity and connectivity parameter (minimum -1 or -2 for the PDI model; for details see Peters (2014))
h0 [L]: suction at water content of 0 (i.e. oven dryness) (h0 = 10^6.8 if missing, corresponding to oven dryness at 105°C (Schneider and Goss, 2012))
w2 [-]: weigthing between pore space distribution
alfa2 [1/L]: van Genuchten parameter alfa for second pore space distribution
n2 [-]: van Genuchten parameter n for second pore space distribution
Peters, A. (2014). Reply to comment by S. Iden and W. Durner on Simple consistent models for water retention and hydraulic conductivity in the complete moisture range. Water Resour. Res. 50, 7535–7539.
Van Genuchten, M. T. (1980). A closed-form equation for predicting the hydraulic conductivity of unsaturated soils. Soil science society of America journal, 44(5), 892-898.
Mualem, Y. (1976). A new model for predicting the hydraulic conductivity of unsaturated porous media. Water resources research, 12(3), 513-522.
Schneider, M., & Goss, K. U. (2012). Prediction of the water sorption isotherm in air dry soils. Geoderma, 170, 64-69.
Relative film conductivity described by Peters (2013).
Kfilm(suc, par.shp, modality = "uni", suc.negativ = TRUE)
Kfilm(suc, par.shp, modality = "uni", suc.negativ = TRUE)
suc |
Suction/pressure heads. Negative if suc.negativ = TRUE |
par.shp |
named parameter in list or vector |
modality |
pore size distribution ('uni' or 'bi') |
suc.negativ |
set TRUE if suction/pressure heads are negative and FALSE if positive |
ths [-]: saturated water content
thr [-]: residual water content
alfa [1/L]: van Genuchten shape parameter
n [-]: van Genuchten shape parameter
h0 [L]: suction at water content of 0 (i.e. oven dryness) (h0 = 10^6.8 if missing, corresponding to oven dryness at 105°C (Schneider and Goss, 2012))
a: slope at the log scale (a = -1.5 if missing as suggested by Tokunaga (2009) and Peters (2013))
alfa2 [1/L]: van Genuchten parameter alfa for second pore space distribution
n2 [-]: van Genuchten parameter n for second pore space distribution
Peters, A. (2013). Simple consistent models for water retention and hydraulic conductivity in the complete moisture range. Water Resour. Res. 49, 6765–6780. physics-a review. Vadose Zone J. http://dx.doi.org/10.2136/vzj2012.0163.
Tokunaga, T. K. (2009). Hydraulic properties of adsorbed water films in unsaturated porous media. Water resources research, 45(6).
Schneider, M., & Goss, K. U. (2012). Prediction of the water sorption isotherm in air dry soils. Geoderma, 170, 64-69.
Calculates unsaturated hydraulic conductivity for a given suction for unimodal or bimodal van Genuchten-Mualem (vg/vgm), Peters-Durner-Iden (PDI) and Brooks and Corey (bc) (only unimodal) parameterisation.
Ku(suc, FUN.shp = "vG", par.shp, modality = "uni", suc.negativ = TRUE)
Ku(suc, FUN.shp = "vG", par.shp, modality = "uni", suc.negativ = TRUE)
suc |
Suction/pressure heads. Negative if suc.negativ = TRUE |
FUN.shp |
Funktion for soil hydraulic properties (vGM or PDI) (see details) |
par.shp |
named parameter in list or vector |
modality |
pore size distribution ('uni' or 'bi') |
suc.negativ |
set TRUE if suction/pressure heads are negative and FALSE if positive |
vGM: van Genuchten-Mualem (uni or bimodal) ('vg' works aswell)
PDI: Peters-Durner-Iden with van Genuchtens saturation function (uni or bimodal)
bc: Brooks and Corey (unimodal)
ths [-]: saturated water content
thr [-]: residual water content
alfa [1/L]: van Genuchten shape parameter
n [-]: van Genuchten shape parameter
m [-]: shape parameter (m = 1-(1/n) if missing)
Ks [L/time]: saturated hydraulic conductivity
tau [-]: tortuosity and connectivity parameter (minimum -1 or -2 for the PDI model; see Peters (2014) for details)
omega: weighting between relative capillary and film conductivity
h0 [L]: suction at water content of 0 (i.e. oven dryness) (h0 = 10^6.8 if missing, corresponding to oven dryness at 105°C (Schneider and Goss, 2012))
a: slope at the log scale (a = -1.5 if missing as suggested by Tokunaga (2009) and Peters (2013))
w2 [-]: weigthing between pore space distributions
alfa2 [1/L]: van Genuchten parameter alfa for second pore space distribution
n2 [-]: van Genuchten parameter n for second pore space distribution
ths [-]: saturated water content
thr [-]: residual water content
alfa [1/L]: inverse of the air-entry value or bubbling pressure
lambda [-]: pore size distribution index
tau [-]: tortuosity and connectivity parameter (minimum -1 or -2 for the PDI model; see Peters (2014) for details)
most input works for upper- and lowercase letters
unsaturated hydraulic conductivity (ku)
Ullrich Dettmann
Van Genuchten, M. T. (1980). A closed-form equation for predicting the hydraulic conductivity of unsaturated soils. Soil science society of America journal, 44(5), 892-898.
Mualem, Y. (1976). A new model for predicting the hydraulic conductivity of unsaturated porous media. Water resources research, 12(3), 513-522.
Peters, A. (2013). Simple consistent models for water retention and hydraulic conductivity in the complete moisture range. Water Resour. Res. 49, 6765–6780. physics-a review. Vadose Zone J. http://dx.doi.org/10.2136/vzj2012.0163.
Iden, S., Durner, W. (2014). Comment to Simple consistent models for water retention and hydraulic conductivity in the complete moisture range by A. Peters. Water Resour. Res. 50, 7530–7534.
Peters, A. (2014). Reply to comment by S. Iden and W. Durner on Simple consistent models for water retention and hydraulic conductivity in the complete moisture range. Water Resour. Res. 50, 7535–7539.
Tokunaga, T. K. (2009), Hydraulic properties of adsorbed water films in unsaturated porous media, Water Resour. Res., 45, W06415, doi: 10.1029/2009WR007734.
Priesack, E., Durner, W., 2006. Closed-form expression for the multi-modal unsaturated conductivity function. Vadose Zone J. 5, 121–124.
Durner, W. (1994). Hydraulic conductivity estimation for soils with heterogeneous pore structure. Water Resources Research, 30(2), 211-223.
Schneider, M., & Goss, K. U. (2012). Prediction of the water sorption isotherm in air dry soils. Geoderma, 170, 64-69.
Brooks, R.H., and A.T. Corey (1964): Hydraulic properties of porous media. Hydrol. Paper 3. Colorado State Univ., Fort Collins, CO, USA.
# -------------------------------------------- # Unimodal van Genuchten # -------------------------------------------- Ku(suc = seq(1, 1000, by = 1), FUN.shp = 'vGM', par.shp = list(Ks = 10, ths = 0.5, thr = 0, alfa = 0.02, n = 1.5, tau = 0.5), modality = 'uni', suc.negativ = FALSE) # -------------------------------------------- # Bimodal van Genuchten # -------------------------------------------- Ku(suc = seq(1, 1000, by = 1), FUN.shp = 'vGM', par.shp = list(Ks = 10, ths = 0.5, thr = 0, alfa = 0.02, n = 1.5, tau = 0.5, w2 = 0.1, alfa2 = 0.1, n2 = 3), modality = 'bi', suc.negativ = FALSE) # -------------------------------------------- # Unimodal Peters-Durner-Iden (PDI) # -------------------------------------------- Ku(suc = seq(1, 1000, by = 1), FUN.shp = 'PDI', modality = 'uni', par.shp = list(Ks = 10, ths = 0.5, thr = 0, alfa = 0.02, n = 1.5, tau = 0.5, omega = 0.001), suc.negativ = FALSE) # -------------------------------------------- # Brooks and Corey (BC) (only unimodal) # -------------------------------------------- Ku(suc = seq(1, 1000, by = 1), FUN.shp = 'bc', modality = 'uni', par.shp = list(ths = 0.4, thr = 0, lambda = 0.211, alfa = 0.1, tau = 0.5, ks = 10), suc.negativ = FALSE) # --------------------------------------------
# -------------------------------------------- # Unimodal van Genuchten # -------------------------------------------- Ku(suc = seq(1, 1000, by = 1), FUN.shp = 'vGM', par.shp = list(Ks = 10, ths = 0.5, thr = 0, alfa = 0.02, n = 1.5, tau = 0.5), modality = 'uni', suc.negativ = FALSE) # -------------------------------------------- # Bimodal van Genuchten # -------------------------------------------- Ku(suc = seq(1, 1000, by = 1), FUN.shp = 'vGM', par.shp = list(Ks = 10, ths = 0.5, thr = 0, alfa = 0.02, n = 1.5, tau = 0.5, w2 = 0.1, alfa2 = 0.1, n2 = 3), modality = 'bi', suc.negativ = FALSE) # -------------------------------------------- # Unimodal Peters-Durner-Iden (PDI) # -------------------------------------------- Ku(suc = seq(1, 1000, by = 1), FUN.shp = 'PDI', modality = 'uni', par.shp = list(Ks = 10, ths = 0.5, thr = 0, alfa = 0.02, n = 1.5, tau = 0.5, omega = 0.001), suc.negativ = FALSE) # -------------------------------------------- # Brooks and Corey (BC) (only unimodal) # -------------------------------------------- Ku(suc = seq(1, 1000, by = 1), FUN.shp = 'bc', modality = 'uni', par.shp = list(ths = 0.4, thr = 0, lambda = 0.211, alfa = 0.1, tau = 0.5, ks = 10), suc.negativ = FALSE) # --------------------------------------------
Nash-Sutcliffe efficiency (NSE)
NSE(obs, sim)
NSE(obs, sim)
obs |
measured values |
sim |
predicted values |
Nash, J. E., and J.V. Sutcliffe (1970): River flow forecasting through conceptual models. 1. a discussion of principles. Journal of Hydrology 10, 282–290.
Creates plot of object with class 'dataSEM'. If input x is provided as list with more than one elements, the output plot is a grid with multiple plots.
## S3 method for class 'dataSEM' plot( x, ts = "ts", tens.up = "tens.up", tens.low = "tens.low", weight = "weight", plot.tens = TRUE, plot.weight = TRUE, plot.legend = TRUE, xlab = "timestamp", plot.title, color.tens = c("#00FFFF", "#008B8B"), color.weight = "#EC382B", ... )
## S3 method for class 'dataSEM' plot( x, ts = "ts", tens.up = "tens.up", tens.low = "tens.low", weight = "weight", plot.tens = TRUE, plot.weight = TRUE, plot.legend = TRUE, xlab = "timestamp", plot.title, color.tens = c("#00FFFF", "#008B8B"), color.weight = "#EC382B", ... )
x |
object of class dataSEM (see details) |
ts |
character specifying the column containing the time stamp (format must be numeric or POSIXct) |
tens.up |
character specifying the column containing the measurements of the upper tensiometer |
tens.low |
character specifying the column containing the measurements of the lower tensiometer |
weight |
character specifying the column containing the weight |
plot.tens |
plot tensiometer values (TRUE/FALSE) |
plot.weight |
plot weight values (TRUE/FALSE) |
plot.legend |
plot legend (TRUE/FALSE) |
xlab |
lable for the x axis |
plot.title |
character spezifying plot title. If empty no title will be added. |
color.tens |
colors of the plotted tensiometer values |
color.weight |
color of the plotted weight values |
... |
Graphical arguments (see |
Object x can be:
- class(x): "dataSEM" "data.frame"
- class(x): "dataSEM" "data.table"
- class(x): "dataSEM" (if x is a list)
If x is a list with more than 1 elements, the output plot is a grid with mutliple plots.
Columns and row number can be adjusted with grafical argument mfrow (see par
)
If x has the wrong class, the class can be set with:
class(x) <- c('dataSEM', class(x)) (if x has the class data.frame or data.table) and
class(x) <- 'dataSEM' (if x has the class list).
Ullrich Dettmann
Creates plot of fitSHP object with measured and fitted SWC, KU or both depending on fitSHP object
## S3 method for class 'fitSHP' plot(x, ...)
## S3 method for class 'fitSHP' plot(x, ...)
x |
object of class fitSHP |
... |
arguments for plot |
Predicts values using fitSHP object with calibrated paramter of SWC, KU or both depending on the fitSHP object
## S3 method for class 'fitSHP' predict(object, suc = NULL, length.out = 100, suc.negativ = FALSE, ...)
## S3 method for class 'fitSHP' predict(object, suc = NULL, length.out = 100, suc.negativ = FALSE, ...)
object |
object of class fitSHP |
suc |
Suction/pressure heads for the prediction of the soil hydraulic properties |
length.out |
output length if suc == NULL |
suc.negativ |
set TRUE if suction/pressure heads are negative and FALSE if positive |
... |
arguments for predict |
Reads multiple ku-pf Apparatur files from a directory and returns them as list of data.tables.
read.kupf( path, colnames.out = c("ts", "tens.up", "tens.low", "weight"), firstrow.char = "Date/Time\tTension top\tTension bottom\tWeight", format.time_stamp = "%d.%m.%Y %H:%M:%S", tz.time_stamp = "GMT", ... )
read.kupf( path, colnames.out = c("ts", "tens.up", "tens.low", "weight"), firstrow.char = "Date/Time\tTension top\tTension bottom\tWeight", format.time_stamp = "%d.%m.%Y %H:%M:%S", tz.time_stamp = "GMT", ... )
path |
path to ku-pf files (character) |
colnames.out |
colnames of output (default: c('ts', 'tens.up', 'tens.low', 'weight')) |
firstrow.char |
character in first row of ku-pf files (default: 'Date/Time Tension top Tension bottom Weight') (see details) |
format.time_stamp |
POSIXct format of the time stamp column (column 1, here named 'ts') (see |
tz.time_stamp |
time zone of the time stamp column (column 1, here named 'ts') (default: 'GMT') (see |
... |
arguments to |
The standard file format of ku-pf files looks like:
Date/Time Tension top Tension bottom Weight
kPa kPa g
01.11.2017 14:11:16 -0.48 -0.15 969.02
01.11.2017 14:21:16 -0.47 -0.14 969.00
01.11.2017 14:31:16 -0.46 -0.13 968.98
If the first row of the ku-pf files differs to the expression used here ('Date/Time Tension top Tension bottom Weight"),
it can be set with firstrow.char.
File names are added as attribut to the output (attr(out, 'sample_info')).
The ku-pf software gives the possibility to add
sample spezific information in the first row of the file. Depending on the input the ku-pf files than look:
sample_name;project
Date/Time Tension top Tension bottom Weight
kPa kPa g
01.11.2017 14:11:16 -0.48 -0.15 969.02
01.11.2017 14:21:16 -0.47 -0.14 969.00
01.11.2017 14:31:16 -0.46 -0.13 968.98
- For this case the first line is added as attribute to the output (attr(out, 'sample_info')$info)
list of the class dataSEM containing data.tables as list elements.
Ullrich Dettmann
Calculate Root mean square error (RMSE)
RMSE(obs, sim, na.rm = FALSE)
RMSE(obs, sim, na.rm = FALSE)
obs |
measured values |
sim |
predicted values |
na.rm |
logical. Should missing values be removed? |
Relative saturation function for adsorptive water storage described by a piecwise linear function (Iden and Durner, 2014).
Sad(suc, par.shp, modality = c("uni"), suc.negativ = TRUE)
Sad(suc, par.shp, modality = c("uni"), suc.negativ = TRUE)
suc |
Suction/pressure heads. Negative if suc.negativ = TRUE |
par.shp |
named parameter of soil hydraulic properties in list or vector (see details) |
modality |
pore size distribution ('uni' or 'bi') |
suc.negativ |
set TRUE if suction/pressure heads are negative and FALSE if positive |
ths [-]: saturated water content
thr [-]: residual water content
alfa [1/L]: van Genuchten shape parameter
n [-]: van Genuchten shape parameter
h0 [L]: suction at water content of 0 (i.e. oven dryness) (h0 = 10^6.8 if missing, corresponding to oven dryness at 105°C (Schneider and Goss, 2012))
alfa2 [1/L]: van Genuchten parameter alfa for second pore space distribution
n2 [-]: van Genuchten parameter n for second pore space distribution
Ullrich Dettmann
Iden, S., Durner, W. (2014). Comment to Simple consistent models for water retention and hydraulic conductivity in the complete moisture range by A. Peters. Water Resour. Res. 50, 7530–7534.
Schneider, M., & Goss, K. U. (2012). Prediction of the water sorption isotherm in air dry soils. Geoderma, 170, 64-69.
Capillary saturation function of van Genuchten (unimodal or bimodal pore space distributions) and Brooks and Corey (unimodal pore space distribution).
Sat(suc, par.shp, modality = c("uni"), FUN.shp = "vg", suc.negativ = TRUE)
Sat(suc, par.shp, modality = c("uni"), FUN.shp = "vg", suc.negativ = TRUE)
suc |
Suction/pressure heads. Negative if suc.negativ = TRUE |
par.shp |
named parameter in list or vector |
modality |
pore size distribution ('uni' or 'bi') |
FUN.shp |
Funktion for soil hydraulic properties (vG or bc) (see details) |
suc.negativ |
set TRUE if suction/pressure heads are negative and FALSE if positive |
vG: van Genuchten (uni or bimodal) (vGM is working aswell)
bc: Brooks and Corey (uni)
alfa [1/L]: van Genuchten shape parameter
n [-]: van Genuchten shape parameter
m [-]: shape parameter (m = 1-(1/n) if missing)
w2 [-]: weigthing between pore space distribution
alfa2 [1/L]: van Genuchten parameter alfa for second pore space distribution
n2 [-]: van Genuchten parameter n for second pore space distribution
alfa [1/L]: inverse of the air-entry value or bubbling pressure
lambda [-]: pore size distribution index
Van Genuchten, M. T. (1980). A closed-form equation for predicting the hydraulic conductivity of unsaturated soils. Soil science society of America journal, 44(5), 892-898.
Durner, W. (1994). Hydraulic conductivity estimation for soils with heterogeneous pore structure. Water Resources Research, 30(2), 211-223.
Brooks, R.H., and A.T. Corey (1964): Hydraulic properties of porous media. Hydrol. Paper 3. Colorado State Univ., Fort Collins, CO, USA.
Capillary saturation function of van Genuchten for unimodal or bimodal pore space distributions.
Sat_old(suc, par.shp, modality = c("uni"), suc.negativ = TRUE)
Sat_old(suc, par.shp, modality = c("uni"), suc.negativ = TRUE)
suc |
Suction/pressure heads. Negative if suc.negativ = TRUE |
par.shp |
named parameter in list or vector |
modality |
pore size distribution ('uni' or 'bi') |
suc.negativ |
set TRUE if suction/pressure heads are negative and FALSE if positive |
alfa [1/L]: van Genuchten shape parameter
n [-]: van Genuchten shape parameter
m [-]: shape parameter (m = 1-(1/n) if missing)
w2 [-]: weigthing between pore space distribution
alfa2 [1/L]: van Genuchten parameter alfa for second pore space distribution
n2 [-]: van Genuchten parameter n for second pore space distribution
Van Genuchten, M. T. (1980). A closed-form equation for predicting the hydraulic conductivity of unsaturated soils. Soil science society of America journal, 44(5), 892-898.
Durner, W. (1994). Hydraulic conductivity estimation for soils with heterogeneous pore structure. Water Resources Research, 30(2), 211-223.
Rescaled capillary saturation function by Iden and Durner (2014)
Scap(suc, par.shp, modality = c("uni"), suc.negativ = FALSE)
Scap(suc, par.shp, modality = c("uni"), suc.negativ = FALSE)
suc |
Suction/pressure heads. Negative if suc.negativ = TRUE |
par.shp |
named parameter in list or vector |
modality |
pore size distribution ('uni' or 'bi') |
suc.negativ |
set TRUE if suction/pressure heads are negative and FALSE if positive |
alfa [1/L]: van Genuchten shape parameter
n [-]: van Genuchten shape parameter
m [-]: shape parameter (m = 1-(1/n) if missing)
h0 [L]: suction at water content of 0 (i.e. oven dryness) (h0 = 10^6.8 if missing, corresponding to oven dryness at 105°C (Schneider and Goss, 2012))
w2 [-]: weigthing between pore space distribution
alfa2 [1/L]: van Genuchten parameter alfa for second pore space distribution
n2 [-]: van Genuchten parameter n for second pore space distribution
m2 [-]: shape parameter (m = 1-(1/n2) if missing)
Scap(h) = (Gamma(h)- Gamma(h0))/(1 - Gamma(h0))
Gamma descripes the capillary saturation function. Here the saturation function of van Genuchten is used:
gamma(h) = (1/(1 + -suc * alfa)^n)^m (see also Sat
)
Iden, S., Durner, W. (2014). Comment to Simple consistent models for water retention and hydraulic conductivity in the complete moisture range by A. Peters. Water Resour. Res. 50, 7530–7534.
Schneider, M., & Goss, K. U. (2012). Prediction of the water sorption isotherm in air dry soils. Geoderma, 170, 64-69.
Shuffled Complex Evolution (SCE) optimisation. Designed to have a similar interface to the standard optim
function.
The function is copied from the hydromad package (https://github.com/floybix/hydromad/)
SCEoptim(FUN, par, lower = -Inf, upper = Inf, control = list(), ...)
SCEoptim(FUN, par, lower = -Inf, upper = Inf, control = list(), ...)
FUN |
function to optimise (to minimise by default), or the name of one. This should return a scalar numeric value. |
par |
a numeric vector of initial parameter values. |
lower |
lower bounds on the parameters. Should be the same length as |
upper |
upper bounds on the parameters. Should be the same length as |
control |
a list of options as in |
... |
further arguments passed to |
This is an evolutionary algorithm combined with a simplex algorithm.
Options can be given in the list control
, in the same way as with optim
:
number of complexes. Defaults to
5
.
number of iteration in inner loop (CCE
algorithm). Defaults to NA
, in which case it is taken as 2 *
NDIM + 1
, as recommended by Duan et al (1994).
function scaling factor (set to -1 for a maximisation problem). By default it is a minimisation problem.
influences sampling
of parents from each complex. Duan et al (1992) describe a 'trapezoidal'
(i.e. linear weighting) scheme, which corresponds to elitism = 1
.
Higher values give more weight towards the better parameter sets. Defaults
to 1
.
sampling scheme for initial
values: "latin" (hypercube) or "random". Defaults to "latin"
.
reltol
is the convergence threshold: relative
improvement factor required in an SCE iteration (in same sense as
optim
), and defaults to 1e-5
.
tolsteps
is the number of iterations where the improvement is within
reltol
required to confirm convergence. This defaults to 20
.
maximum number of iterations. Defaults to
10000
.
maximum number of function
evaluations. Defaults to Inf
.
maximum
duration of optimization in seconds. Defaults to Inf
.
whether to return populations (parameter sets)
from all iterations. Defaults to FALSE
.
an
integer specifying the level of user feedback. Defaults to 0
.
number of iterations between reports when trace >= 1.
Defaults to 1
.
a list of class "SCEoptim"
.
par |
optimal parameter set. |
value |
value of objective function at optimal point. |
convergence |
code, where 0 indicates successful covergence. |
message |
(non-)convergence message. |
counts |
number of function evaluations. |
iterations |
number of iterations of the CCE algorithm. |
time |
number of seconds taken. |
POP.FIT.ALL |
objective function values from each iteration in a matrix. |
BESTMEM.ALL |
best parameter set from each iteration in a matrix. |
POP.ALL |
if |
control |
the list of options settings in effect. |
This code is copied from the hydromad package
https://github.com/floybix/hydromad/
http://hydromad.catchment.org/
and written from Felix Andrews [email protected]
who adapted, and substantially revised it, from Brecht Donckels' MATLAB code,
which was in turn adapted from Qingyun Duan's MATLAB code:
Qingyun Duan, Soroosh Sorooshian and Vijai Gupta (1992). Effective and Efficient Global Optimization for Conceptual Rainfall-Runoff Models Water Resources Research 28(4), pp. 1015-1031.
Qingyun Duan, Soroosh Sorooshian and Vijai Gupta (1994). Optimal use of the SCE-UA global optimization method for calibrating watershed models, Journal of Hydrology 158, pp. 265-284.
optim
, DEoptim package, rgenoud package
## reproduced from help("optim") ## Rosenbrock Banana function Rosenbrock <- function(x){ x1 <- x[1] x2 <- x[2] 100 * (x2 - x1 * x1)^2 + (1 - x1)^2 } #lower <- c(-10,-10) #upper <- -lower ans <- SCEoptim(Rosenbrock, c(-1.2,1), control = list(trace = 1)) str(ans) ## 'Wild' function, global minimum at about -15.81515 Wild <- function(x) 10*sin(0.3*x)*sin(1.3*x^2) + 0.00001*x^4 + 0.2*x+80 ans <- SCEoptim(Wild, 0, lower = -50, upper = 50, control = list(trace = 1)) ans$par
## reproduced from help("optim") ## Rosenbrock Banana function Rosenbrock <- function(x){ x1 <- x[1] x2 <- x[2] 100 * (x2 - x1 * x1)^2 + (1 - x1)^2 } #lower <- c(-10,-10) #upper <- -lower ans <- SCEoptim(Rosenbrock, c(-1.2,1), control = list(trace = 1)) str(ans) ## 'Wild' function, global minimum at about -15.81515 Wild <- function(x) 10*sin(0.3*x)*sin(1.3*x^2) + 0.00001*x^4 + 0.2*x+80 ans <- SCEoptim(Wild, 0, lower = -50, upper = 50, control = list(trace = 1)) ans$par
Determines unsaturated hydraulic conductivity and water retention characteristics from laboratory evaporation experiments.
SEM( suc.up, suc.low, weight = NULL, t, ths = NULL, r = 3.6, L = 6, z1 = 1.5, z2 = 4.5, sd.tens = 0.2, suc.negativ = TRUE, suc.out = "weighted" )
SEM( suc.up, suc.low, weight = NULL, t, ths = NULL, r = 3.6, L = 6, z1 = 1.5, z2 = 4.5, sd.tens = 0.2, suc.negativ = TRUE, suc.out = "weighted" )
suc.up |
a numeric vector containing the measured suctions [cm] of the upper tensiometer |
suc.low |
a numeric vector containing the measured suctions [cm] of the lower tensiometer |
weight |
a numeric vector containing the measured weights [g] |
t |
time in seconds [s] |
ths |
saturated water content (optional) for the calulation of the soil water contents (th) |
r |
sample radius [cm] |
L |
sample height [cm] |
z1 |
depth of upper tensiometer [cm] |
z2 |
depth of lower tensiometer [cm] |
sd.tens |
measurement accuracy of tensiometer [cm] |
suc.negativ |
set TRUE if suction/tensiometer values are negative and FALSE if positive |
suc.out |
'weighted' (default), arithmetic ('ari') or geometric ('geo') mean of the tensiometer readings (see Peters (2015) for details) |
At the beginning of the experiment when gradients of the hydraulic head are small, hydraulic conductivities cannot be calculated. Following Peters and Durner (2008) hydraulic conductivities calculated from gradients smaller than (6*sd.tens)/(z2-z1) are set to NA.
Ki: unsaturated hydraulic conductivity [cm/day]
th: water content (th) is returned if ths is provided as input
suc: suction, either (1) weighted between arithmetic and geometric mean (default), (2) the arithmetic mean or (3) the geometric mean (see Peters 2015)
Ullrich Dettmann
Wind, G. P. (1966). Capillary conductivity data estimated by a simple method (No. 80). [sn].
Peters, A., Iden, S. C., & Durner, W. (2015). Revisiting the simplified evaporation method: Identification of hydraulic functions considering vapor, film and corner flow. Journal of Hydrology, 527, 531-542.
Peters, A., & Durner, W. (2008). Simplified evaporation method for determining soil hydraulic properties. Journal of Hydrology, 356(1), 147-162.
Schindler, U., 1980. Ein Schnellverfahren zur Messung der Wasserleitfähigkeit im teilgesättigten Boden an Stechzylinderproben. Arch. Acker- Pflanzenbau Bodenkd. 24, 1–7.
# ---------------------------------------------------------------------------- # Calculate hydraulic properties with the 'Simplified Evaporation Method' (SEM) # ---------------------------------------------------------------------------- data('dataSEM') ths <- 0.7 # define saturated water content (ths) (optional) shp <- SEM(suc.up = dataSEM$tens.up, suc.low = dataSEM$tens.low, weight = dataSEM$weight, t = dataSEM$ts*60*60, r = 3.6, # radius of sample L = 6, # height of sample z1 = 1.5, # depth of upper tensiometer [cm] z2 = 4.5, # depth of lower tensiometer [cm] sd.tens = 0.1, # tensiometer accuracy (see ?SEM) ths = ths, suc.negativ = TRUE, suc.out = 'weighted' )
# ---------------------------------------------------------------------------- # Calculate hydraulic properties with the 'Simplified Evaporation Method' (SEM) # ---------------------------------------------------------------------------- data('dataSEM') ths <- 0.7 # define saturated water content (ths) (optional) shp <- SEM(suc.up = dataSEM$tens.up, suc.low = dataSEM$tens.low, weight = dataSEM$weight, t = dataSEM$ts*60*60, r = 3.6, # radius of sample L = 6, # height of sample z1 = 1.5, # depth of upper tensiometer [cm] z2 = 4.5, # depth of lower tensiometer [cm] sd.tens = 0.1, # tensiometer accuracy (see ?SEM) ths = ths, suc.negativ = TRUE, suc.out = 'weighted' )
Calculates the volumetric soil water content for a corresponding suction/pressure head (th(suc)) for unimodal or bimodal van Genuchten (vG), Peters-Durner-Iden (PDI) and Brooks and Corey (bc) (only unimodal) parameterisation.
SWC( suc, par.shp = c(ths = 0.9, thr = 0, alfa = 0.02, n = 2), FUN.shp = "vg", modality = "uni", suc.negativ = TRUE )
SWC( suc, par.shp = c(ths = 0.9, thr = 0, alfa = 0.02, n = 2), FUN.shp = "vg", modality = "uni", suc.negativ = TRUE )
suc |
Suction/pressure heads. Negative if suc.negativ = TRUE |
par.shp |
named parameter in list or vector |
FUN.shp |
Funktion for soil hydraulic properties (vG, PDI or bc) (see details) |
modality |
pore size distribution ('uni' or 'bi') |
suc.negativ |
set TRUE if suction/pressure heads are negative and FALSE if positive |
vG: van Genuchten (uni or bimodal) (vGM is working aswell)
PDI: Peters-Durner-Iden with saturation function of van Genuchten (uni or bimodal)
bc: Brooks and Corey (unimodal)
ths [-]: saturated water content
thr [-]: residual water content
alfa [1/L]: van Genuchten shape parameter
n [-]: van Genuchten shape parameter
m [-]: shape parameter (m = 1-(1/n) if missing)
h0 [L]: suction at water content of 0 (i.e. oven dryness) (h0 = 10^6.8 if missing, corresponding to oven dryness at 105°C (Schneider and Goss, 2012))
w2 [-]: weigthing between pore space distributions
alfa2 [1/L]: van Genuchten parameter alfa for second pore space distribution
n2 [-]: van Genuchten parameter n for second pore space distribution
m2 [-]: shape parameter (m2 = 1-(1/n2) if missing)
ths [-]: saturated water content
thr [-]: residual water content
alfa [1/L]: inverse of the air-entry value or bubbling pressure
lambda [-]: pore size distribution index
PDI:
theta(h) = (ths - thr) * Scap(h) + thr * Sad(h) Scap: Rescaled capillary saturation function
Sad: Relative saturation function for adsorbed water
input for FUN.shp and modality works for upper- and lowercase letters
volumetric water content theta (th) [L³/L³]
Ullrich Dettmann
Van Genuchten, M. T. (1980). A closed-form equation for predicting the hydraulic conductivity of unsaturated soils. Soil science society of America journal, 44(5), 892-898.
Durner, W. (1994). Hydraulic conductivity estimation for soils with heterogeneous pore structure. Water Resources Research, 30(2), 211-223.
Peters, A. (2013). Simple consistent models for water retention and hydraulic conductivity in the complete moisture range. Water Resour. Res. 49, 6765–6780. physics-a review. Vadose Zone J. http://dx.doi.org/10.2136/vzj2012.0163.
Iden, S., Durner, W. (2014). Comment to Simple consistent models for water retention and hydraulic conductivity in the complete moisture range by A. Peters. Water Resour. Res. 50, 7530–7534.
Peters, A. (2014). Reply to comment by S. Iden and W. Durner on Simple consistent models for water retention and hydraulic conductivity in the complete moisture range. Water Resour. Res. 50, 7535–7539.
Schneider, M., & Goss, K. U. (2012). Prediction of the water sorption isotherm in air dry soils. Geoderma, 170, 64-69.
Brooks, R.H., and A.T. Corey (1964): Hydraulic properties of porous media. Hydrol. Paper 3. Colorado State Univ., Fort Collins, CO, USA.
# -------------------------------------------- # Unimodal van Genuchten # -------------------------------------------- SWC(suc = seq(1, 1000, by = 1), par.shp = c(ths = 0.4, thr = 0, alfa = 0.02, n = 1.5), FUN.shp = c('vG'), modality = 'uni', suc.negativ = FALSE) # -------------------------------------------- # Bimodal van Genuchten # -------------------------------------------- SWC(suc = seq(1, 1000, by = 1), par.shp = c(ths = 0.4, thr = 0, alfa = 0.02, n = 2, w2 = 0.2, alfa2 = 1, n2 = 10), FUN.shp = c('vG'), modality = c('bi'), suc.negativ = FALSE) # -------------------------------------------- # Unimodal PDI # -------------------------------------------- SWC(suc = seq(1, 1000, by = 1), par.shp = list(ths = 0.4, thr = 0, n = 1.6, alfa = 0.02), FUN.shp = c('pdi'), modality = c('uni'), suc.negativ = FALSE) # -------------------------------------------- # Brooks and Corey (BC) (only unimodal) SWC(suc = seq(1, 1000, by = 1), par.shp = list(ths = 0.4, thr = 0, lambda = 0.211, alfa = 0.1), FUN.shp = c('bc'), modality = c('uni'), suc.negativ = FALSE) # --------------------------------------------
# -------------------------------------------- # Unimodal van Genuchten # -------------------------------------------- SWC(suc = seq(1, 1000, by = 1), par.shp = c(ths = 0.4, thr = 0, alfa = 0.02, n = 1.5), FUN.shp = c('vG'), modality = 'uni', suc.negativ = FALSE) # -------------------------------------------- # Bimodal van Genuchten # -------------------------------------------- SWC(suc = seq(1, 1000, by = 1), par.shp = c(ths = 0.4, thr = 0, alfa = 0.02, n = 2, w2 = 0.2, alfa2 = 1, n2 = 10), FUN.shp = c('vG'), modality = c('bi'), suc.negativ = FALSE) # -------------------------------------------- # Unimodal PDI # -------------------------------------------- SWC(suc = seq(1, 1000, by = 1), par.shp = list(ths = 0.4, thr = 0, n = 1.6, alfa = 0.02), FUN.shp = c('pdi'), modality = c('uni'), suc.negativ = FALSE) # -------------------------------------------- # Brooks and Corey (BC) (only unimodal) SWC(suc = seq(1, 1000, by = 1), par.shp = list(ths = 0.4, thr = 0, lambda = 0.211, alfa = 0.1), FUN.shp = c('bc'), modality = c('uni'), suc.negativ = FALSE) # --------------------------------------------