OGS
VapourDiffusionPMQ.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 "
VapourDiffusionPMQ.h
"
5
6
#include <algorithm>
7
#include <cmath>
8
9
#include "
MaterialLib/MPL/Medium.h
"
10
#include "
MaterialLib/MPL/VariableType.h
"
11
#include "
MaterialLib/PhysicalConstant.h
"
12
13
namespace
MaterialPropertyLib
14
{
15
PropertyDataType
VapourDiffusionPMQ::value
(
16
const
VariableArray
& variable_array,
17
const
ParameterLib::SpatialPosition
&
/*pos*/
,
const
double
/*t*/
,
18
const
double
/*dt*/
)
const
19
{
20
const
double
S_L = std::clamp(variable_array.
liquid_saturation
, 0.0, 1.0);
21
22
const
double
T = variable_array.
temperature
;
23
24
const
double
S_v = 1 - S_L;
25
const
double
D_vr = S_v;
26
27
return
base_diffusion_coefficient_
*
28
std::pow(T /
MaterialLib::PhysicalConstant::CelsiusZeroInKelvin
,
29
exponent_
) *
30
D_vr;
31
}
32
33
PropertyDataType
VapourDiffusionPMQ::dValue
(
34
VariableArray
const
& variable_array,
Variable
const
variable,
35
ParameterLib::SpatialPosition
const
&
/*pos*/
,
double
const
/*t*/
,
36
double
const
/*dt*/
)
const
37
{
38
const
double
S_L = std::clamp(variable_array.
liquid_saturation
, 0.0, 1.0);
39
40
const
double
T = variable_array.
temperature
;
41
42
if
(variable ==
Variable::temperature
)
43
{
44
const
double
S_v = 1 - S_L;
45
const
double
D_vr = S_v;
46
47
return
exponent_
*
base_diffusion_coefficient_
*
48
std::pow(T /
MaterialLib::PhysicalConstant::CelsiusZeroInKelvin
,
49
exponent_
- 1.0) *
50
D_vr /
MaterialLib::PhysicalConstant::CelsiusZeroInKelvin
;
51
}
52
53
if
(variable ==
Variable::liquid_saturation
)
54
{
55
return
-
base_diffusion_coefficient_
*
56
std::pow(T /
MaterialLib::PhysicalConstant::CelsiusZeroInKelvin
,
57
exponent_
);
58
}
59
60
OGS_FATAL
(
61
"VapourDiffusionPMQ::dValue is implemented for "
62
"derivatives with respect to temperature or saturation only."
);
63
}
64
65
}
// namespace MaterialPropertyLib
OGS_FATAL
#define OGS_FATAL(...)
Definition
Error.h:19
Medium.h
PhysicalConstant.h
VapourDiffusionPMQ.h
VariableType.h
MaterialPropertyLib::Property::value
virtual PropertyDataType value() const
Definition
MaterialLib/MPL/Property.cpp:67
MaterialPropertyLib::VapourDiffusionPMQ::base_diffusion_coefficient_
double const base_diffusion_coefficient_
Definition
VapourDiffusionPMQ.h:85
MaterialPropertyLib::VapourDiffusionPMQ::exponent_
double const exponent_
Definition
VapourDiffusionPMQ.h:86
MaterialPropertyLib::VapourDiffusionPMQ::dValue
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
Definition
VapourDiffusionPMQ.cpp:33
MaterialPropertyLib::VariableArray
Definition
VariableType.h:94
MaterialPropertyLib::VariableArray::liquid_saturation
double liquid_saturation
Definition
VariableType.h:178
MaterialPropertyLib::VariableArray::temperature
double temperature
Definition
VariableType.h:187
ParameterLib::SpatialPosition
Definition
SpatialPosition.h:21
MaterialLib::PhysicalConstant::CelsiusZeroInKelvin
constexpr double CelsiusZeroInKelvin
Zero degrees Celsius in Kelvin.
Definition
PhysicalConstant.h:16
MaterialPropertyLib
Definition
ChemicalSolverInterface.h:98
MaterialPropertyLib::Variable
Variable
Definition
VariableType.h:21
MaterialPropertyLib::Variable::liquid_saturation
@ liquid_saturation
Definition
VariableType.h:34
MaterialPropertyLib::Variable::temperature
@ temperature
Definition
VariableType.h:43
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
VapourDiffusion
VapourDiffusionPMQ.cpp
Generated by
1.14.0