This module contains the van Genuchten model for the water retention curve.
#include <vanGenuchten.h>
Public Types | |
enum | SoilTypes { ORGANIC , CLAY , CLAYLOAM , LOAM , LOAMYSAND , SAND , SANDYCLAY , SANDYCLAYLOAM , SANDYLOAM , SILT , SILTYCLAY , SILTYCLAYLOAM , SILTLOAM , WFJGRAVELSAND } |
enum | VanGenuchten_ModelTypesSnow { YAMAGUCHI2012 , YAMAGUCHI2010 , YAMAGUCHI2010_ADAPTED , DAANEN } |
enum | K_Parameterizations { CALONNE , KOZENYCARMAN , SHIMIZU } |
Public Member Functions | |
vanGenuchten (ElementData &pEMS) | |
Class constructor . More... | |
vanGenuchten (const vanGenuchten &c) | |
Copy constructor . More... | |
virtual | ~vanGenuchten () |
vanGenuchten & | operator= (const vanGenuchten &) |
Assignement operator. More... | |
double | fromTHETAtoH (const double theta, const double h_d) |
Calculating pressure head from water content The following function calculates the pressure head belonging to a given water content . More... | |
double | fromTHETAtoHforICE (const double theta, const double h_d, const double theta_i) |
Calculating pressure head from water content when ice is present The following function calculates the pressure head belonging to a given water content when ice is present . More... | |
double | fromHtoTHETA (const double h) |
Calculating volumetric water content from pressure head The following function calculates the volumetric water content belonging to a given pressure head . More... | |
double | fromHtoTHETAforICE (const double h, const double theta_i) |
Calculating volumetric water content from pressure head when ice is present The following function calculates the volumetric water content belonging to a given pressure head when ice is present . More... | |
double | dtheta_dh (const double h) |
Specific moisture capacity This function should return exact value of the derivative d.theta / d.h, otherwise RE-solver is unstable. When modifying the water retention curve, for example in the dry limit, the specific moisture capacity function needs to be modified too, to remain an exact derivative. . More... | |
void | SetVGParamsSnow (VanGenuchten_ModelTypesSnow VGModelTypeSnow, K_Parameterizations K_PARAM, const bool &matrix, const bool &seaice) |
Initialize van Genuchten model for snow layers . More... | |
void | SetVGParamsSoil () |
Initialize van Genuchten model for soil layers, based on index approach via grain size . More... | |
bool | enforceThermalEquilibrium (const bool fixTemp=true) |
Enforce thermal equilibrium in the soil layers . More... | |
Static Public Member Functions | |
static double | AirEntryPressureHead (double MaximumPoreSize, double Temperature) |
Calculate air entry pressure head Air entry pressure head in [m] that corresponds to a maximum pore size (using Young-Laplace Equation). This is a required value for specifying water retention curves, see Ippisch et al. (2006). . More... | |
Public Attributes | |
ElementData * | EMS |
double | theta_r |
double | theta_s |
double | alpha |
double | n |
double | m |
double | h_e |
double | Sc |
double | ksat |
double | field_capacity |
bool | defined |
Friends | |
std::iostream & | operator<< (std::iostream &os, const vanGenuchten &data) |
std::iostream & | operator>> (std::iostream &is, vanGenuchten &data) |
vanGenuchten::vanGenuchten | ( | ElementData & | pEMS | ) |
Class constructor
.
pEMS | pointer to the ElementData class which owns the van Genuchten class, so the van Genuchten class can access objects from the ElementData class. |
vanGenuchten::vanGenuchten | ( | const vanGenuchten & | c | ) |
Copy constructor
.
c | Class to copy |
|
inlinevirtual |
|
static |
Calculate air entry pressure head
Air entry pressure head in [m] that corresponds to a maximum pore size (using Young-Laplace Equation).
This is a required value for specifying water retention curves, see Ippisch et al. (2006).
.
MaximumPoreSize | Maximum pore size (diameter, not radius!) [m] |
Temperature | Temperature for determining surface tension [K] |
double vanGenuchten::dtheta_dh | ( | const double | h | ) |
Specific moisture capacity
This function should return exact value of the derivative d.theta / d.h, otherwise RE-solver is unstable. When modifying the water retention curve, for example in the dry limit, the specific moisture capacity function needs to be modified too, to remain an exact derivative.
.
h | Pressure head (m) |
bool vanGenuchten::enforceThermalEquilibrium | ( | const bool | fixTemp = true | ) |
Enforce thermal equilibrium in the soil layers
.
fixTemp | If true, keep element temperature fixed and repartition theta[ICE] and theta[WATER]. If false, keep theta[ICE] and theta[WATER] fixed, and calculate element temperature. The latter approach is prone to singularities. For example, a soil layer with a temperature below Constants::meltfreeze_tk, but with only water and no ice, cannot be properly initialized (i.e., there is no solution that satisfies thermal equilibrium). |
double vanGenuchten::fromHtoTHETA | ( | const double | h | ) |
Calculating volumetric water content from pressure head
The following function calculates the volumetric water content belonging to a given pressure head
.
h | Pressure head (m) |
double vanGenuchten::fromHtoTHETAforICE | ( | const double | h, |
const double | theta_i | ||
) |
Calculating volumetric water content from pressure head when ice is present
The following function calculates the volumetric water content belonging to a given pressure head when ice is present
.
h | Pressure head (m) |
theta_i | Ice content (m^3/m^3) |
double vanGenuchten::fromTHETAtoH | ( | const double | theta, |
const double | h_d | ||
) |
Calculating pressure head from water content
The following function calculates the pressure head belonging to a given water content
.
theta | Water content (m^3/m^3) |
h_d | Dry limit of pressure head |
double vanGenuchten::fromTHETAtoHforICE | ( | const double | theta, |
const double | h_d, | ||
const double | theta_i | ||
) |
Calculating pressure head from water content when ice is present
The following function calculates the pressure head belonging to a given water content when ice is present
.
theta | Water content (m^3/m^3) |
h_d | Dry limit of pressure head |
theta_i | Ice content (m^3/m^3) |
vanGenuchten & vanGenuchten::operator= | ( | const vanGenuchten & | source | ) |
Assignement operator.
Assignment operator
.
source | Class to assign |
void vanGenuchten::SetVGParamsSnow | ( | VanGenuchten_ModelTypesSnow | VGModelTypeSnow, |
K_Parameterizations | K_PARAM, | ||
const bool & | matrix, | ||
const bool & | seaice | ||
) |
Initialize van Genuchten model for snow layers
.
VGModelTypeSnow | van Genuchten model parameterization to use |
K_PARAM | hydraulic conductivity parameterization to use |
matrix | true: set parameters for matrix domain. false: set parameters for preferential flow domain |
seaice | if true: use some tweaks for sea ice. |
void vanGenuchten::SetVGParamsSoil | ( | ) |
Initialize van Genuchten model for soil layers, based on index approach via grain size
.
|
friend |
|
friend |
double vanGenuchten::alpha |
bool vanGenuchten::defined |
ElementData* vanGenuchten::EMS |
double vanGenuchten::field_capacity |
double vanGenuchten::h_e |
double vanGenuchten::ksat |
double vanGenuchten::m |
double vanGenuchten::n |
double vanGenuchten::Sc |
double vanGenuchten::theta_r |
double vanGenuchten::theta_s |