SNOWPACK 20240329.2d1c245
vanGenuchten Class Reference

Detailed Description

This module contains the van Genuchten model for the water retention curve.

Version
1.0
Author
Nander Wever

#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 ()
 
vanGenuchtenoperator= (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

ElementDataEMS
 
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)
 

Member Enumeration Documentation

◆ K_Parameterizations

Enumerator
CALONNE 
KOZENYCARMAN 
SHIMIZU 

◆ SoilTypes

Enumerator
ORGANIC 
CLAY 
CLAYLOAM 
LOAM 
LOAMYSAND 
SAND 
SANDYCLAY 
SANDYCLAYLOAM 
SANDYLOAM 
SILT 
SILTYCLAY 
SILTYCLAYLOAM 
SILTLOAM 
WFJGRAVELSAND 

◆ VanGenuchten_ModelTypesSnow

Enumerator
YAMAGUCHI2012 
YAMAGUCHI2010 
YAMAGUCHI2010_ADAPTED 
DAANEN 

Constructor & Destructor Documentation

◆ vanGenuchten() [1/2]

vanGenuchten::vanGenuchten ( ElementData pEMS)

Class constructor
.

Author
Nander Wever
Parameters
pEMSpointer to the ElementData class which owns the van Genuchten class, so the van Genuchten class can access objects from the ElementData class.

◆ vanGenuchten() [2/2]

vanGenuchten::vanGenuchten ( const vanGenuchten c)

Copy constructor
.

Author
Nander Wever
Parameters
cClass to copy

◆ ~vanGenuchten()

virtual vanGenuchten::~vanGenuchten ( )
inlinevirtual

Member Function Documentation

◆ AirEntryPressureHead()

double vanGenuchten::AirEntryPressureHead ( double  MaximumPoreSize,
double  Temperature 
)
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).
.

Author
Nander Wever
Parameters
MaximumPoreSizeMaximum pore size (diameter, not radius!) [m]
TemperatureTemperature for determining surface tension [K]

◆ dtheta_dh()

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.
.

Author
Nander Wever
Parameters
hPressure head (m)

◆ enforceThermalEquilibrium()

bool vanGenuchten::enforceThermalEquilibrium ( const bool  fixTemp = true)

Enforce thermal equilibrium in the soil layers
.

Parameters
fixTempIf 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).
Returns
True: element state was modified by this function, false: element state was not modified by this function
Author
Nander Wever

◆ fromHtoTHETA()

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
.

Author
Nander Wever
Parameters
hPressure head (m)

◆ fromHtoTHETAforICE()

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
.

Author
Nander Wever
Parameters
hPressure head (m)
theta_iIce content (m^3/m^3)

◆ fromTHETAtoH()

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
.

Author
Nander Wever
Parameters
thetaWater content (m^3/m^3)
h_dDry limit of pressure head

◆ fromTHETAtoHforICE()

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
.

Author
Nander Wever
Parameters
thetaWater content (m^3/m^3)
h_dDry limit of pressure head
theta_iIce content (m^3/m^3)

◆ operator=()

vanGenuchten & vanGenuchten::operator= ( const vanGenuchten source)

Assignement operator.

Assignment operator
.

Author
Nander Wever
Parameters
sourceClass to assign

◆ SetVGParamsSnow()

void vanGenuchten::SetVGParamsSnow ( VanGenuchten_ModelTypesSnow  VGModelTypeSnow,
K_Parameterizations  K_PARAM,
const bool &  matrix,
const bool &  seaice 
)

Initialize van Genuchten model for snow layers
.

Author
Nander Wever
Parameters
VGModelTypeSnowvan Genuchten model parameterization to use
K_PARAMhydraulic conductivity parameterization to use
matrixtrue: set parameters for matrix domain. false: set parameters for preferential flow domain
seaiceif true: use some tweaks for sea ice.

◆ SetVGParamsSoil()

void vanGenuchten::SetVGParamsSoil ( )

Initialize van Genuchten model for soil layers, based on index approach via grain size
.

Author
Nander Wever

Friends And Related Function Documentation

◆ operator<<

std::iostream & operator<< ( std::iostream &  os,
const vanGenuchten data 
)
friend

◆ operator>>

std::iostream & operator>> ( std::iostream &  is,
vanGenuchten data 
)
friend

Member Data Documentation

◆ alpha

double vanGenuchten::alpha

◆ defined

bool vanGenuchten::defined

◆ EMS

ElementData* vanGenuchten::EMS

◆ field_capacity

double vanGenuchten::field_capacity

◆ h_e

double vanGenuchten::h_e

◆ ksat

double vanGenuchten::ksat

◆ m

double vanGenuchten::m

◆ n

double vanGenuchten::n

◆ Sc

double vanGenuchten::Sc

◆ theta_r

double vanGenuchten::theta_r

◆ theta_s

double vanGenuchten::theta_s

The documentation for this class was generated from the following files: