OGS
WaterVapourDensity.cpp
Go to the documentation of this file.
1
// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2
// SPDX-License-Identifier: BSD-3-Clause
3
4
#include "
WaterVapourDensity.h
"
5
6
#include <cmath>
7
8
#include "
BaseLib/Error.h
"
9
#include "
MaterialLib/MPL/Medium.h
"
10
#include "
MaterialLib/PhysicalConstant.h
"
11
12
namespace
MaterialPropertyLib
13
{
15
static
double
saturatedVaporDensity
(
double
const
T)
16
{
17
return
1.0e-3 * std::exp(19.819 - 4975.9 / T);
18
}
19
21
static
double
dsaturatedVaporDensitydT
(
double
const
T)
22
{
23
return
4.9759 * std::exp(19.819 - 4975.9 / T) / (T * T);
24
}
25
26
static
double
humidity
(
double
const
T,
double
const
p,
27
double
const
water_density)
28
{
29
return
std::exp(
30
p / (
MaterialLib::PhysicalConstant::SpecificGasConstant::WaterVapour
*
31
T * water_density));
32
}
33
34
PropertyDataType
WaterVapourDensity::value
(
35
VariableArray
const
& variable_array,
36
ParameterLib::SpatialPosition
const
&
/*pos*/
,
double
const
/*t*/
,
37
double
const
/*dt*/
)
const
38
{
39
double
const
p = variable_array.
liquid_phase_pressure
;
40
double
const
T = variable_array.
temperature
;
41
assert(T >= 273.);
42
double
const
water_density = variable_array.
density
;
43
assert(water_density > 0.);
44
45
return
humidity
(T, p, water_density) *
saturatedVaporDensity
(T);
46
}
47
48
PropertyDataType
WaterVapourDensity::dValue
(
49
VariableArray
const
& variable_array,
Variable
const
variable,
50
ParameterLib::SpatialPosition
const
&
/*pos*/
,
double
const
/*t*/
,
51
double
const
/*dt*/
)
const
52
{
53
double
const
p = variable_array.
liquid_phase_pressure
;
54
double
const
T = variable_array.
temperature
;
55
assert(T >= 273.);
56
double
const
water_density = variable_array.
density
;
57
assert(water_density > 0.);
58
59
if
(variable ==
Variable::temperature
)
60
{
61
double
const
h =
humidity
(T, p, water_density);
62
double
const
rho_v = h *
saturatedVaporDensity
(T);
63
double
const
drho_vS_dT =
dsaturatedVaporDensitydT
(T);
64
65
return
h * drho_vS_dT - rho_v * p /
66
(water_density * T * T *
67
MaterialLib::PhysicalConstant::
68
SpecificGasConstant::WaterVapour);
69
}
70
71
if
(variable ==
Variable::liquid_phase_pressure
)
72
{
73
double
const
factor =
74
1.0 /
75
(
MaterialLib::PhysicalConstant::SpecificGasConstant::WaterVapour
*
76
T * water_density);
77
double
const
dhumiditydp = factor * std::exp(factor * p);
78
79
return
dhumiditydp *
saturatedVaporDensity
(T);
80
}
81
82
OGS_FATAL
(
83
"WaterVapourDensity::dValue is implemented for derivatives with "
84
"respect to temperature or liquid_phase_pressure only."
);
85
}
86
87
}
// namespace MaterialPropertyLib
Error.h
OGS_FATAL
#define OGS_FATAL(...)
Definition
Error.h:19
Medium.h
PhysicalConstant.h
WaterVapourDensity.h
MaterialPropertyLib::Property::value
virtual PropertyDataType value() const
Definition
MaterialLib/MPL/Property.cpp:67
MaterialPropertyLib::VariableArray
Definition
VariableType.h:94
MaterialPropertyLib::VariableArray::temperature
double temperature
Definition
VariableType.h:187
MaterialPropertyLib::VariableArray::density
double density
Definition
VariableType.h:169
MaterialPropertyLib::VariableArray::liquid_phase_pressure
double liquid_phase_pressure
Definition
VariableType.h:177
MaterialPropertyLib::WaterVapourDensity::dValue
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
Definition
WaterVapourDensity.cpp:48
ParameterLib::SpatialPosition
Definition
SpatialPosition.h:21
MaterialLib::PhysicalConstant::SpecificGasConstant::WaterVapour
constexpr double WaterVapour
Specific gas constant for water vapour.
Definition
PhysicalConstant.h:89
MaterialPropertyLib
Definition
ChemicalSolverInterface.h:98
MaterialPropertyLib::humidity
static double humidity(double const T, double const p, double const water_density)
Definition
WaterVapourDensity.cpp:26
MaterialPropertyLib::Variable
Variable
Definition
VariableType.h:21
MaterialPropertyLib::Variable::liquid_phase_pressure
@ liquid_phase_pressure
Definition
VariableType.h:33
MaterialPropertyLib::Variable::temperature
@ temperature
Definition
VariableType.h:43
MaterialPropertyLib::saturatedVaporDensity
static double saturatedVaporDensity(double const T)
Definition
WaterVapourDensity.cpp:15
MaterialPropertyLib::dsaturatedVaporDensitydT
static double dsaturatedVaporDensitydT(double const T)
Definition
WaterVapourDensity.cpp:21
MaterialPropertyLib::PropertyDataType
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 >, Eigen::MatrixXd > PropertyDataType
Definition
MaterialLib/MPL/Property.h:24
MaterialLib
MPL
Properties
Density
WaterVapourDensity.cpp
Generated by
1.14.0