OGS
MaterialLib::PorousMedium::NonWettingPhaseVanGenuchten Class Referencefinal

Detailed Description

van Genuchten model: non-wetting phase

\[k{rel}= (1 - S_e)^{1/3} (1 - S_e^{1/m})^{2m}\]

with

\[S_e=\frac{S^w-S_r}{S^w_{\mbox{max}}-S^w_r}\]

where

\begin{eqnarray*} &S^w_r& \mbox{residual saturation of wetting phase,}\\ &S^w_{\mbox{max}}& \mbox{maximum saturation of wetting phase,}\\ &m(<=1) & \mbox{ exponent.}\\ \end{eqnarray*}

Note:

\[m=1/(1-n)\]

.

Definition at line 36 of file NonWettingPhaseVanGenuchten.h.

#include <NonWettingPhaseVanGenuchten.h>

Inheritance diagram for MaterialLib::PorousMedium::NonWettingPhaseVanGenuchten:
[legend]
Collaboration diagram for MaterialLib::PorousMedium::NonWettingPhaseVanGenuchten:
[legend]

Public Member Functions

 NonWettingPhaseVanGenuchten (const double Snr, const double Snmax, const double m, const double krel_min)
 
std::string getName () const override
 Get model name.
 
double getValue (const double saturation_w) const override
 
double getdValue (const double saturation_w) const override
 
- Public Member Functions inherited from MaterialLib::PorousMedium::RelativePermeability
 RelativePermeability (const double Sr, const double Smax)
 
virtual ~RelativePermeability ()=default
 

Private Attributes

const double _m
 Exponent m, m in [0, 1], n=1/(1-m).
 
const double _krel_min
 Minimum relative permeability.
 

Additional Inherited Members

- Protected Attributes inherited from MaterialLib::PorousMedium::RelativePermeability
const double _minor_offset = std::numeric_limits<double>::epsilon()
 
const double _saturation_r
 Residual saturation.
 
const double _saturation_max
 Maximum saturation.
 

Constructor & Destructor Documentation

◆ NonWettingPhaseVanGenuchten()

MaterialLib::PorousMedium::NonWettingPhaseVanGenuchten::NonWettingPhaseVanGenuchten ( const double Snr,
const double Snmax,
const double m,
const double krel_min )
inline
Parameters
SnrResidual saturation of the non-wetting phase, \( S^n_r \)
SnmaxMaximum saturation of the non-wetting phase, \( S^n_{\mbox{max}} \)
mExponent, \( m \in [0,1]\)
krel_minMinimum relative permeability, \( k_{rel}^{\mbox{min}}\)

Definition at line 48 of file NonWettingPhaseVanGenuchten.h.

50 : RelativePermeability(1. - Snmax, 1. - Snr),
51 _m(m),
52 _krel_min(krel_min)
53 {
54 }
const double _m
Exponent m, m in [0, 1], n=1/(1-m).
RelativePermeability(const double Sr, const double Smax)

Member Function Documentation

◆ getdValue()

double MaterialLib::PorousMedium::NonWettingPhaseVanGenuchten::getdValue ( const double saturation_w) const
overridevirtual

Get the derivative of relative permeability with respect to saturation.

Parameters
saturation_wWetting phase saturation

Implements MaterialLib::PorousMedium::RelativePermeability.

Definition at line 33 of file NonWettingPhaseVanGenuchten.cpp.

34{
35 const double S = std::clamp(saturation_w,
38 const double Se = (S - _saturation_r) / (_saturation_max - _saturation_r);
39 const double cbrt1_Se = std::cbrt(1.0 - Se);
40 const double temp_val = 1.0 - std::pow(Se, 1.0 / _m);
41 return (-std::pow(temp_val, 2. * _m) / (3. * cbrt1_Se * cbrt1_Se) -
42 2. * cbrt1_Se * std::pow(temp_val, 2. * _m - 1.) *
43 std::pow(Se, (1. - _m) / _m)) /
45}

References _m, MaterialLib::PorousMedium::RelativePermeability::_minor_offset, MaterialLib::PorousMedium::RelativePermeability::_saturation_max, and MaterialLib::PorousMedium::RelativePermeability::_saturation_r.

◆ getName()

std::string MaterialLib::PorousMedium::NonWettingPhaseVanGenuchten::getName ( ) const
inlineoverridevirtual

Get model name.

Implements MaterialLib::PorousMedium::RelativePermeability.

Definition at line 57 of file NonWettingPhaseVanGenuchten.h.

58 {
59 return "Non-wetting phase van Genuchten relative permeability model.";
60 }

◆ getValue()

double MaterialLib::PorousMedium::NonWettingPhaseVanGenuchten::getValue ( const double saturation_w) const
overridevirtual

Get relative permeability value.

Parameters
saturation_wWetting phase saturation

Implements MaterialLib::PorousMedium::RelativePermeability.

Definition at line 22 of file NonWettingPhaseVanGenuchten.cpp.

23{
24 const double S = std::clamp(saturation_w,
27 const double Se = (S - _saturation_r) / (_saturation_max - _saturation_r);
28 const double krel =
29 std::cbrt(1.0 - Se) * std::pow(1.0 - std::pow(Se, 1.0 / _m), 2.0 * _m);
30 return std::max(_krel_min, krel);
31}

References _krel_min, _m, MaterialLib::PorousMedium::RelativePermeability::_minor_offset, MaterialLib::PorousMedium::RelativePermeability::_saturation_max, and MaterialLib::PorousMedium::RelativePermeability::_saturation_r.

Member Data Documentation

◆ _krel_min

const double MaterialLib::PorousMedium::NonWettingPhaseVanGenuchten::_krel_min
private

Minimum relative permeability.

Definition at line 72 of file NonWettingPhaseVanGenuchten.h.

Referenced by getValue().

◆ _m

const double MaterialLib::PorousMedium::NonWettingPhaseVanGenuchten::_m
private

Exponent m, m in [0, 1], n=1/(1-m).

Definition at line 71 of file NonWettingPhaseVanGenuchten.h.

Referenced by getdValue(), and getValue().


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