18 const double p_cap_max,
19 const double exponent)
29 "Reference capillary pressure must be positive in "
30 "MPL::SaturationExponential.");
44 const double pc = std::clamp(p_cap, 0.,
p_cap_max_);
46 return S_e * (S_max - S_res) + S_res;
57 "SaturationExponential::dValue is implemented for derivatives with "
58 "respect to capillary pressure only.");
70 return (
exponent_ / p_cap) * (S_res - S_max) *
77 double const ,
double const )
const
79 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