OGS
WaterVapourDensity.cpp
Go to the documentation of this file.
1 
12 #include "WaterVapourDensity.h"
13 
14 #include <cmath>
15 
16 #include "BaseLib/Error.h"
17 #include "MaterialLib/MPL/Medium.h"
19 
20 namespace MaterialPropertyLib
21 {
23 static double saturatedVaporDensity(double const T)
24 {
25  return 1.0e-3 * std::exp(19.819 - 4975.9 / T);
26 }
27 
29 static double dsaturatedVaporDensitydT(double const T)
30 {
31  return 4.9759 * std::exp(19.819 - 4975.9 / T) / (T * T);
32 }
33 
34 static double humidity(double const T, double const p,
35  double const water_density)
36 {
37  return std::exp(
39  T * water_density));
40 }
41 
43  VariableArray const& variable_array,
44  ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/,
45  double const /*dt*/) const
46 {
47  double const p = std::get<double>(
48  variable_array[static_cast<int>(Variable::phase_pressure)]);
49  double const T = std::get<double>(
50  variable_array[static_cast<int>(Variable::temperature)]);
51  double const water_density =
52  std::get<double>(variable_array[static_cast<int>(Variable::density)]);
53 
54  return humidity(T, p, water_density) * saturatedVaporDensity(T);
55 }
56 
58  VariableArray const& variable_array, Variable const primary_variable,
59  ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/,
60  double const /*dt*/) const
61 {
62  double const p = std::get<double>(
63  variable_array[static_cast<int>(Variable::phase_pressure)]);
64  double const T = std::get<double>(
65  variable_array[static_cast<int>(Variable::temperature)]);
66  double const water_density =
67  std::get<double>(variable_array[static_cast<int>(Variable::density)]);
68 
69  if (primary_variable == Variable::temperature)
70  {
71  double const h = humidity(T, p, water_density);
72  double const rho_v = h * saturatedVaporDensity(T);
73  double const drho_vS_dT = dsaturatedVaporDensitydT(T);
74 
75  return h * drho_vS_dT - rho_v * p /
76  (water_density * T * T *
79  }
80 
81  if (primary_variable == Variable::phase_pressure)
82  {
83  double const factor =
84  1.0 /
86  T * water_density);
87  double const dhumiditydp = factor * std::exp(factor * p);
88 
89  return dhumiditydp * saturatedVaporDensity(T);
90  }
91 
92  OGS_FATAL(
93  "WaterVapourDensity::dValue is implemented for derivatives with "
94  "respect to temperature or phase_pressure only.");
95 }
96 
97 } // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition: Error.h:26
virtual PropertyDataType value() const
Definition: Property.cpp:72
PropertyDataType dValue(VariableArray const &variable_array, Variable const primary_variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
constexpr double WaterVapour
Specific gas constant for water vapour.
static double humidity(double const T, double const p, double const water_density)
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
static double saturatedVaporDensity(double const T)
std::array< VariableType, static_cast< int >(Variable::number_of_variables)> VariableArray
Definition: VariableType.h:108
static double dsaturatedVaporDensitydT(double const T)