Source code for toughio.capillarity._pickens
import numpy as np
from ._base import BaseCapillarity
__all__ = [
"Pickens",
]
[docs]class Pickens(BaseCapillarity):
_id = 2
_name = "Pickens"
def __init__(self, p0, slr, sl0, x):
"""
Pickens et al. function.
After Pickens et al. (1979).
Parameters
----------
p0 : scalar
Capillary pressure strength (CP(1)).
slr : scalar
Irreducible liquid saturation (CP(2)).
sl0 : scalar
Initial liquid saturation (CP(3)).
x : scalar
CP(4).
"""
if not (0.0 < slr < 1.0):
raise ValueError()
if sl0 < 1.0:
raise ValueError()
if x == 0.0:
raise ValueError()
self.parameters = [p0, slr, sl0, x]
def _eval(self, sl, *args):
"""Pickens et al function."""
p0, slr, sl0, x = args
sl = max(sl, 1.001 * slr)
sl = 0.999 * sl0 if sl > 0.999 * sl0 else sl
A = (1.0 + sl / sl0) * (sl0 - slr) / (sl0 + slr)
B = 1.0 - sl / sl0
return -p0 * (np.log(A / B * (1.0 + (1.0 - B**2 / A**2) ** 0.5))) ** (
1.0 / x
)
@property
def parameters(self):
"""Return model parameters."""
return [self._p0, self._slr, self._sl0, self._x]
@parameters.setter
def parameters(self, value):
if len(value) != 4:
raise ValueError()
self._p0 = value[0]
self._slr = value[1]
self._sl0 = value[2]
self._x = value[3]