Source code for toughio.capillarity._van_genuchten
from ._base import BaseCapillarity
__all__ = [
"vanGenuchten",
]
[docs]class vanGenuchten(BaseCapillarity):
_id = 7
_name = "van Genuchten"
def __init__(self, m, slr, alpha, pmax, sls):
"""
Van Genuchten function.
After van Genuchten (1980).
Parameters
----------
m : scalar
Related to pore size distribution (CP(1)).
slr : scalar
Irreducible liquid saturation (CP(2)).
alpha : scalar
Inverse of capillary pressure strength 1/P0 (CP(3)).
pmax : scalar
Maximum pressure (CP(4)).
sls : scalar
Maximum liquid saturation (CP(5)).
"""
if pmax < 0.0:
raise ValueError()
self.parameters = [m, slr, alpha, pmax, sls]
def _eval(self, sl, *args):
"""Van Genuchten function."""
m, slr, alpha, pmax, sls = args
if sl == 1.0:
pcap = 0.0
else:
if sl > slr:
Seff = (sl - slr) / (sls - slr)
pcap = -1.0 / abs(alpha) * (Seff ** (-1.0 / m) - 1.0) ** (1.0 - m)
else:
pcap = -abs(pmax)
pcap = max(pcap, -abs(pmax))
pcap *= (1.0 - sl) / 0.001 if sl > 0.999 else 1.0
return pcap
@property
def parameters(self):
"""Return model parameters."""
return [self._m, self._slr, self._alpha, self._pmax, self._sls]
@parameters.setter
def parameters(self, value):
if len(value) != 5:
raise ValueError()
self._m = value[0]
self._slr = value[1]
self._alpha = value[2]
self._pmax = value[3]
self._sls = value[4]