OGS
ClausiusClapeyron.h
Go to the documentation of this file.
1 
13 #pragma once
14 
15 #include "BaseLib/ConfigTree.h"
17 
18 namespace MaterialPropertyLib
19 {
20 class Medium;
21 class Phase;
22 class Component;
29 class ClausiusClapeyron final : public Property
30 {
31 public:
32  explicit ClausiusClapeyron(std::string name,
33  const double triple_temperature,
34  const double triple_pressure,
35  const double critical_temperature,
36  const double critical_pressure,
37  const double ref_temperature,
38  const double ref_pressure);
39 
40  void checkScale() const override;
41 
42  PropertyDataType value(VariableArray const& variable_array,
44  double const t,
45  double const dt) const override;
46  PropertyDataType dValue(VariableArray const& variable_array,
47  Variable const primary_variable,
49  double const t,
50  double const dt) const override;
51  PropertyDataType d2Value(VariableArray const& variable_array,
52  Variable const primary_variable1,
53  Variable const primary_variable2,
55  double const t,
56  double const dt) const override;
57 
58 private:
59  double T_triple_;
60  double p_triple_;
61  double T_critical_;
62  double p_critical_;
63  double T_ref_;
64  double p_ref_;
65 
66  double molarMass(std::variant<Medium*, Phase*, Component*> const scale,
67  VariableArray const& variable_array,
68  ParameterLib::SpatialPosition const& pos, double const t,
69  double const dt) const;
70 
71  double dMolarMass(std::variant<Medium*, Phase*, Component*> const scale,
72  VariableArray const& variable_array,
73  Variable const primary_variable,
74  ParameterLib::SpatialPosition const& pos, double const t,
75  double const dt) const;
76 };
77 
78 } // namespace MaterialPropertyLib
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
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
Definition: Property.cpp:72
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
Definition: Property.h:35
std::array< VariableType, static_cast< int >(Variable::number_of_variables)> VariableArray
Definition: VariableType.h:108
void scale(PETScVector &x, double const a)
Definition: LinAlg.cpp:44