24 const double triple_temperature,
25 const double triple_pressure,
28 const double ref_temperature,
29 const double ref_pressure)
30 : T_triple_(triple_temperature),
31 p_triple_(triple_pressure),
34 T_ref_(ref_temperature),
42 if (!(std::holds_alternative<Phase*>(
scale_) ||
43 std::holds_alternative<Component*>(
scale_)))
46 "The property 'ClausiusClapeyron' is implemented on 'phase' and "
47 "'component' scales only.");
52 std::variant<Medium*, Phase*, Component*>
const scale,
55 double const dt)
const
58 [&variable_array, &pos, t, dt](
auto&& s) ->
double
61 .
template value<double>(variable_array, pos, t, dt);
67 std::variant<Medium*, Phase*, Component*>
const scale,
70 double const dt)
const
73 [&variable_array, &primary_variable, &pos, t, dt](
auto&& s) ->
double
76 .
template dValue<double>(variable_array, primary_variable, pos,
85 double const dt)
const
87 const double T = std::get<double>(
101 const double dh = std::get<double>(
105 return p_ref_ * std::exp((1. /
T_ref_ - 1. / T) * M * dh / R);
111 double const dt)
const
113 const double T = std::get<double>(
130 const double dh = std::get<double>(
132 const double p_vap = std::get<double>(
value(variable_array, pos, t, dt));
136 return p_vap * dh / R * ((1. /
T_ref_ - 1. / T) * dM + M / (T * T));
140 return p_vap * dh / R * (1. /
T_ref_ - 1. / T) * dM;
143 "ClausiusClapeyron::dValue is implemented for derivatives with respect "
144 "to phase pressure or temperature only.");
153 OGS_FATAL(
"ClausiusClapeyron::d2Value is not implemented.");
PropertyDataType d2Value(VariableArray const &variable_array, Variable const primary_variable1, Variable const primary_variable2, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
Default implementation: 2nd derivative of any constant property is zero.
double dMolarMass(std::variant< Medium *, Phase *, Component * > const scale, VariableArray const &variable_array, Variable const primary_variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
PropertyDataType dValue(VariableArray const &variable_array, Variable const primary_variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
void checkScale() const override
ClausiusClapeyron(std::string name, const double triple_temperature, const double triple_pressure, const double critical_temperature, const double critical_pressure, const double ref_temperature, const double ref_pressure)
double molarMass(std::variant< Medium *, Phase *, Component * > const scale, VariableArray const &variable_array, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
virtual PropertyDataType value() const
std::variant< Medium *, Phase *, Component * > scale_
constexpr double IdealGasConstant
@ enthalpy_of_evaporation
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
void scale(PETScVector &x, double const a)