Source code for toughio.relative_permeability._van_genuchten_mualem
from ._base import BaseRelativePermeability
__all__ = [
"vanGenuchtenMualem",
]
[docs]class vanGenuchtenMualem(BaseRelativePermeability):
_id = 7
_name = "van Genuchten-Mualem"
def __init__(self, m, slr, sls, sgr):
"""
Van Genuchten-Mualem function.
After Mualem (1976) and van Genuchten (1980).
Parameters
----------
m : scalar
Related to pore size distribution (RP(1)).
slr : scalar
Irreducible liquid saturation (RP(2)).
sls : scalar
Maximum liquid saturation (RP(3)).
sgr : scalar
Irreducible gas saturation (RP(4)).
"""
self.parameters = [m, slr, sls, sgr]
def _eval(self, sl, *args):
"""Van Genuchten-Mualem function."""
m, slr, sls, sgr = args
if sl >= sls:
kl = 1.0
kg = 0.0
else:
Seff = (sl - slr) / (sls - slr)
kl = (
Seff**0.5 * (1.0 - (1.0 - Seff ** (1.0 / m)) ** m) ** 2
if Seff > 0.0
else 0.0
)
Shat = (sl - slr) / (1.0 - slr - sgr)
Shat = max(Shat, 0.0)
Shat = min(Shat, 1.0)
kg = 1.0 - kl if sgr <= 0.0 else (1.0 - Shat**2) * (1.0 - Shat) ** 2
return kl, kg
@property
def parameters(self):
"""Return model parameters."""
return [self._m, self._slr, self._sls, self._sgr]
@parameters.setter
def parameters(self, value):
if len(value) != 4:
raise ValueError()
self._m = value[0]
self._slr = value[1]
self._sls = value[2]
self._sgr = value[3]