27 const double min_relative_permeability,
28 const double exponent)
31 min_relative_permeability_(min_relative_permeability),
40 double const dt)
const
46 auto const s_L = std::visit(
47 [&variable_array, &pos, t, dt](
auto&&
scale) ->
double
50 .
template value<double>(variable_array, pos, t, dt);
59 auto const s_eff = (s_L - s_L_res) / (s_L_max - s_L_res);
72 auto const k_rel_LR = std::pow(s_eff, (2. + 3. * lambda) / lambda);
79 double const dt)
const
84 "RelPermBrooksCorey::dValue is implemented for derivatives with "
85 "respect to liquid saturation only.");
92 auto const s_L = std::visit(
93 [&variable_array, &pos, t, dt](
auto&&
scale) ->
double
96 .
template value<double>(variable_array, pos, t, dt);
104 auto const s_eff = (s_L - s_L_res) / (s_L_max - s_L_res);
105 if ((s_eff < 0.) || (s_eff > 1.))
110 auto const d_se_d_sL = 1. / (s_L_max - s_L_res);
111 auto const dk_rel_LRdse =
112 (3 * lambda + 2.) / lambda * std::pow(s_eff, 2. / lambda + 2.);
114 return dk_rel_LRdse * d_se_d_sL;
virtual PropertyDataType value() const
std::variant< Medium *, Phase *, Component * > scale_
const double residual_gas_saturation_
const double residual_liquid_saturation_
RelPermBrooksCorey(std::string name, const double, const double, const double, const double)
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
const double min_relative_permeability_
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 > > PropertyDataType
std::array< VariableType, static_cast< int >(Variable::number_of_variables)> VariableArray
@ residual_liquid_saturation
@ residual_gas_saturation
void scale(PETScVector &x, double const a)