28 const double p_cap_max,
29 const double exponent)
32 p_cap_max_(p_cap_max),
39 "Reference capillary pressure must be positive in "
40 "MPL::SaturationExponential.");
54 const double pc = std::clamp(p_cap, 0.,
p_cap_max_);
56 return S_e * (S_max - S_res) + S_res;
67 "SaturationExponential::dValue is implemented for derivatives with "
68 "respect to capillary pressure only.");
80 return (
exponent_ / p_cap) * (S_res - S_max) *
87 double const ,
double const )
const
89 OGS_FATAL(
"SaturationExponential::d2Value() is not implemented.");
virtual PropertyDataType value() const
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &, double const, double const) const override
const double residual_gas_saturation_
Residual saturation of the liquid phase.
const double exponent_
Exponent to govern the shape of the curve.
SaturationExponential(std::string name, const double residual_liquid_saturation, const double residual_gas_saturation, const double p_cap_max, const double exponent)
const double residual_liquid_saturation_
Residual saturation of the gas phase.
PropertyDataType d2Value(VariableArray const &variable_array, Variable const, Variable const, ParameterLib::SpatialPosition const &, double const, double const) const override
Default implementation: 2nd derivative of any constant property is zero.
double capillary_pressure
@ residual_liquid_saturation
@ residual_gas_saturation
std::variant< double, Eigen::Matrix< double, 2, 1 >, Eigen::Matrix< double, 3, 1 >, Eigen::Matrix< double, 2, 2 >, Eigen::Matrix< double, 3, 3 >, Eigen::Matrix< double, 4, 1 >, Eigen::Matrix< double, 6, 1 >, Eigen::MatrixXd > PropertyDataType