Skip to content
Snippets Groups Projects
Commit 3b36a46f authored by Dmitri Naumov's avatar Dmitri Naumov
Browse files

[MPL] van Genuchten saturation uses p_b.

Choose neutral names for fitting parameters of the van Genuchten
capillary pressure-saturation model.

The original implementation was referring to "entry pressure", which is
not correct for name for this value.  The (van Genuchten 1980) paper
also does not refer to this parameter as "pressure" or "head" in any
way.

For details see also:

Jong van Lier Q, Pinheiro EAR. An alert regarding a common
misinterpretation of the Van Genuchten α parameter. Rev Bras Cienc Solo.
2018;42:e0170343.

accessed via
https://doi.org/10.1590/18069657rbcs20170343
http://www.scielo.br/pdf/rbcs/v42/0100-0683-rbcs-42-e0170343.pdf
parent e629041c
No related branches found
No related tags found
No related merge requests found
Showing
with 34 additions and 26 deletions
The required pressure for a non-wetting fluid to enter a porous medium (the capillary pressure at full saturation).
Pressure scaling parameter with units of pressure.
Corresponds to van Genuchten parameter \f$\rho g / alpha\f$. The inverse of
\f$\alpha\f$ "corresponds to the water contents lower then saturation" [1].
[1] van Lier, Quirijn de Jong, and Everton Alves Rodrigues Pinheiro. "An alert
regarding a common misinterpretation of the van Genuchten α parameter." Revista
Brasileira de Ciência do Solo 42 (2018).
......@@ -30,12 +30,10 @@ std::unique_ptr<SaturationVanGenuchten> createSaturationVanGenuchten(
auto const exponent =
//! \ogs_file_param{properties__property__SaturationVanGenuchten__exponent}
config.getConfigParameter<double>("exponent");
auto const entry_pressure =
//! \ogs_file_param{properties__property__SaturationVanGenuchten__entry_pressure}
config.getConfigParameter<double>("entry_pressure");
//! \ogs_file_param{properties__property__SaturationVanGenuchten__p_b}
auto const p_b = config.getConfigParameter<double>("p_b");
return std::make_unique<SaturationVanGenuchten>(residual_liquid_saturation,
residual_gas_saturation,
exponent, entry_pressure);
return std::make_unique<SaturationVanGenuchten>(
residual_liquid_saturation, residual_gas_saturation, exponent, p_b);
}
} // namespace MaterialPropertyLib
......@@ -21,11 +21,11 @@ SaturationVanGenuchten::SaturationVanGenuchten(
double const residual_liquid_saturation,
double const residual_gas_saturation,
double const exponent,
double const entry_pressure)
double const p_b)
: _S_L_res(residual_liquid_saturation),
_S_L_max(1. - residual_gas_saturation),
_m(exponent),
_p_b(entry_pressure)
_p_b(p_b)
{
if (!(_m > 0 && _m < 1))
{
......
......@@ -24,10 +24,13 @@ class Component;
* \f[S_\text{eff}=\frac{S-S_r}{S_{\text{max}}-S_r}.\f]
* Above, \f$S_r\f$ and \f$S_{\text{max}}\f$ are the residual and the maximum
* saturations.
* The exponent \f$m \in (0,1)\f$ and the parameter \f$p_b\f$ (it is equal to
* \f$\rho g/\alpha\f$ in original publication) are given by the user.
* The exponent \f$m \in (0,1)\f$ and the pressure scaling parameter \f$p_b\f$
* (it is equal to \f$\rho g/\alpha\f$ in original publication) are given by the
* user.
* The scaling parameter \f$p_b\f$ is given in same units as pressure.
*
* Sometimes a formulation with \f$n = 1 / (1 - m) > 1\f$ is used.
* In the original work another exponent \f$n\f$ is used, but usually set to
* \f$n = 1 / (1 - m)\f$, and also in this implementation.
*
* The saturation is computed from the capillary pressure as follows:
* \f[S(p_c)=
......@@ -46,7 +49,7 @@ public:
SaturationVanGenuchten(double const residual_liquid_saturation,
double const residual_gas_saturation,
double const exponent,
double const entry_pressure);
double const p_b);
void setScale(
std::variant<Medium*, Phase*, Component*> scale_pointer) override
......
......@@ -102,7 +102,7 @@
<residual_liquid_saturation>0.1689</residual_liquid_saturation>
<residual_gas_saturation>0.05</residual_gas_saturation>
<exponent>0.789029535864979</exponent>
<entry_pressure>3633.33</entry_pressure>
<p_b>3633.33</p_b>
</property>
<property>
<name>relative_permeability</name>
......
......@@ -74,7 +74,7 @@
<residual_liquid_saturation>0.1689</residual_liquid_saturation>
<residual_gas_saturation>0.05</residual_gas_saturation>
<exponent>0.789029535864979</exponent>
<entry_pressure>3633.33</entry_pressure>
<p_b>3633.33</p_b>
</property>
<property>
<name>relative_permeability</name>
......
......@@ -97,7 +97,7 @@
<residual_liquid_saturation>0.1689</residual_liquid_saturation>
<residual_gas_saturation>0.05</residual_gas_saturation>
<exponent>0.789029535864979</exponent>
<entry_pressure>3633.33</entry_pressure>
<p_b>3633.33</p_b>
</property>
<property>
<name>relative_permeability</name>
......
......@@ -98,7 +98,7 @@
<residual_liquid_saturation>0.1689</residual_liquid_saturation>
<residual_gas_saturation>0.05</residual_gas_saturation>
<exponent>0.789029535864979</exponent>
<entry_pressure>3633.33</entry_pressure>
<p_b>3633.33</p_b>
</property>
<property>
<name>relative_permeability</name>
......
......@@ -100,7 +100,7 @@
<residual_liquid_saturation>0.1</residual_liquid_saturation>
<residual_gas_saturation>0.05</residual_gas_saturation>
<exponent>0.8</exponent>
<entry_pressure>0.5</entry_pressure>
<p_b>0.5</p_b>
</property>
<property>
<name>relative_permeability</name>
......
......@@ -100,7 +100,7 @@
<residual_liquid_saturation>0.1</residual_liquid_saturation>
<residual_gas_saturation>0.05</residual_gas_saturation>
<exponent>0.8</exponent>
<entry_pressure>0.5</entry_pressure>
<p_b>0.5</p_b>
</property>
<property>
<name>relative_permeability</name>
......
......@@ -117,7 +117,7 @@
<residual_liquid_saturation>0.1</residual_liquid_saturation>
<residual_gas_saturation>0.05</residual_gas_saturation>
<exponent>0.8</exponent>
<entry_pressure>0.5</entry_pressure>
<p_b>0.5</p_b>
</property>
<property>
<name>relative_permeability</name>
......
......@@ -104,7 +104,7 @@
<residual_liquid_saturation>0.01</residual_liquid_saturation>
<residual_gas_saturation>0.01</residual_gas_saturation>
<exponent>0.789029535864979</exponent>
<entry_pressure>3633.33</entry_pressure>
<p_b>3633.33</p_b>
</property>
<property>
<name>relative_permeability</name>
......
......@@ -109,7 +109,7 @@
<residual_liquid_saturation>0.1</residual_liquid_saturation>
<residual_gas_saturation>0.05</residual_gas_saturation>
<exponent>0.8</exponent>
<entry_pressure>0.5</entry_pressure>
<p_b>0.5</p_b>
</property>
<property>
<name>relative_permeability</name>
......
......@@ -109,7 +109,7 @@
<residual_liquid_saturation>0.1</residual_liquid_saturation>
<residual_gas_saturation>0.05</residual_gas_saturation>
<exponent>0.8</exponent>
<entry_pressure>0.5</entry_pressure>
<p_b>0.5</p_b>
</property>
<property>
<name>relative_permeability</name>
......
......@@ -21,11 +21,10 @@ TEST(MaterialPropertyLib, SaturationVanGenuchten)
double const residual_liquid_saturation = 0.1;
double const residual_gas_saturation = 0.05;
double const exponent = 0.79;
double const entry_pressure = 5000;
double const p_b = 5000;
MPL::Property const& pressure_saturation = MPL::SaturationVanGenuchten{
residual_liquid_saturation, residual_gas_saturation, exponent,
entry_pressure};
residual_liquid_saturation, residual_gas_saturation, exponent, p_b};
MPL::VariableArray variable_array;
ParameterLib::SpatialPosition const pos;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment