OGS
MaterialPropertyLib::WaterVapourDensity Class Referencefinal

Detailed Description

A model for water vapour density in the unsaturated porous media.

The water vapour density is given by

\[ \rho_v = h\, \rho_{vS}, \]

where \(h\) is the relative humidity according to

\[ h=\exp({\frac{p}{\rho_w R T}}), \]

with \(R\) the specific gas constant for water vapour, and \(\rho_{vS}\), is the saturated vapour density given by

\[ \rho_{vS}=10^{-3}\, \exp({19.819-4975.9/T}). \]

The specific gas constant for water vapour \(R=461.6\,\text{J}\,\text{kg}^{-1}\text{K}^{-1}\), the value is calculated by \(R_g/M_w\) with \(R_g= 8.3144621\,\text{J}\,\text{mol}^{-1}\text{K}^{-1}\), the ideal gas constant, and \(M_w=0.018016\,\text{kg}\,\text{mol}^{-1}\), the molar mass of water.

The formula of this density model is presented on page 20 of [15].

In the application, the vapour density related terms in the mass balance equation are multiplied with \(1-S\) with \( S \), the water saturation. Therefore the application of the water vapour density model is naturally restricted in the unsaturated zones.

Definition at line 53 of file WaterVapourDensity.h.

#include <WaterVapourDensity.h>

Inheritance diagram for MaterialPropertyLib::WaterVapourDensity:
[legend]
Collaboration diagram for MaterialPropertyLib::WaterVapourDensity:
[legend]

Public Member Functions

 WaterVapourDensity (std::string name)
 
void checkScale () const override
 
PropertyDataType value (VariableArray const &variable_array, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
 
PropertyDataType dValue (VariableArray const &variable_array, Variable const primary_variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
 
- Public Member Functions inherited from MaterialPropertyLib::Property
virtual ~Property ()
 
virtual PropertyDataType initialValue (ParameterLib::SpatialPosition const &pos, double const t) const
 
virtual PropertyDataType value () const
 
virtual PropertyDataType value (VariableArray const &variable_array, VariableArray const &variable_array_prev, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
 
virtual PropertyDataType dValue (VariableArray const &variable_array, VariableArray const &variable_array_prev, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
 
virtual PropertyDataType d2Value (VariableArray const &variable_array, Variable const variable1, Variable const variable2, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
 Default implementation: 2nd derivative of any constant property is zero. More...
 
void setScale (std::variant< Medium *, Phase *, Component * > scale)
 
template<typename T >
initialValue (ParameterLib::SpatialPosition const &pos, double const t) const
 
template<typename T >
value () const
 
template<typename T >
value (VariableArray const &variable_array, VariableArray const &variable_array_prev, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
 
template<typename T >
value (VariableArray const &variable_array, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
 
template<typename T >
dValue (VariableArray const &variable_array, VariableArray const &variable_array_prev, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
 
template<typename T >
dValue (VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
 
template<typename T >
d2Value (VariableArray const &variable_array, Variable const &variable1, Variable const &variable2, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
 

Additional Inherited Members

- Protected Attributes inherited from MaterialPropertyLib::Property
std::string name_
 
PropertyDataType value_
 The single value of a property. More...
 
PropertyDataType dvalue_
 
std::variant< Medium *, Phase *, Component * > scale_
 

Constructor & Destructor Documentation

◆ WaterVapourDensity()

MaterialPropertyLib::WaterVapourDensity::WaterVapourDensity ( std::string  name)
inlineexplicit

Definition at line 56 of file WaterVapourDensity.h.

56 { name_ = std::move(name); }

References MaterialPropertyLib::name, and MaterialPropertyLib::Property::name_.

Member Function Documentation

◆ checkScale()

void MaterialPropertyLib::WaterVapourDensity::checkScale ( ) const
inlineoverridevirtual

Reimplemented from MaterialPropertyLib::Property.

Definition at line 57 of file WaterVapourDensity.h.

58  {
59  if (!std::holds_alternative<Phase*>(scale_))
60  {
61  OGS_FATAL(
62  "The property 'WaterVapourDensity' is "
63  "implemented on the 'Phase' scale only.");
64  }
65  }
#define OGS_FATAL(...)
Definition: Error.h:26
std::variant< Medium *, Phase *, Component * > scale_
Definition: Property.h:287

References OGS_FATAL, and MaterialPropertyLib::Property::scale_.

◆ dValue()

PropertyDataType MaterialPropertyLib::WaterVapourDensity::dValue ( VariableArray const &  variable_array,
Variable const  primary_variable,
ParameterLib::SpatialPosition const &  pos,
double const  t,
double const  dt 
) const
overridevirtual
Returns
The derivative of water vapour density with respect to temperature or phase (water) pressure.

Reimplemented from MaterialPropertyLib::Property.

Definition at line 57 of file WaterVapourDensity.cpp.

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 }
constexpr double WaterVapour
Specific gas constant for water vapour.
static double humidity(double const T, double const p, double const water_density)
static double saturatedVaporDensity(double const T)
static double dsaturatedVaporDensitydT(double const T)

References MaterialPropertyLib::density, MaterialPropertyLib::dsaturatedVaporDensitydT(), MaterialPropertyLib::humidity(), OGS_FATAL, MaterialPropertyLib::phase_pressure, MaterialPropertyLib::saturatedVaporDensity(), MaterialPropertyLib::temperature, and MaterialLib::PhysicalConstant::SpecificGasConstant::WaterVapour.

◆ value()

PropertyDataType MaterialPropertyLib::WaterVapourDensity::value ( VariableArray const &  variable_array,
ParameterLib::SpatialPosition const &  pos,
double const  t,
double const  dt 
) const
overridevirtual
Returns
The water vapour density.

Reimplemented from MaterialPropertyLib::Property.

Definition at line 42 of file WaterVapourDensity.cpp.

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 }

References MaterialPropertyLib::density, MaterialPropertyLib::humidity(), MaterialPropertyLib::phase_pressure, MaterialPropertyLib::saturatedVaporDensity(), and MaterialPropertyLib::temperature.


The documentation for this class was generated from the following files: