OGS
TemperatureDependentDiffusion.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 "
TemperatureDependentDiffusion.h
"
5
6
#include <algorithm>
7
#include <cmath>
8
#include <iterator>
9
10
#include "
MaterialLib/PhysicalConstant.h
"
11
12
namespace
MaterialPropertyLib
13
{
14
void
TemperatureDependentDiffusion::checkScale
()
const
15
{
16
if
(!std::holds_alternative<Component*>(
scale_
))
17
{
18
OGS_FATAL
(
19
"The property 'TemperatureDependentDiffusion' is "
20
"implemented on the 'component' scale only."
);
21
}
22
}
23
24
PropertyDataType
TemperatureDependentDiffusion::value
(
25
VariableArray
const
& variable_array,
26
ParameterLib::SpatialPosition
const
& pos,
double
const
t,
27
double
const
/*dt*/
)
const
28
{
29
auto
const
T = variable_array.
temperature
;
30
double
const
gas_constant =
MaterialLib::PhysicalConstant::IdealGasConstant
;
31
double
const
Arrhenius_exponent =
32
std::exp(
Ea_
/ gas_constant * (1 /
T0_
- 1 / T));
33
34
auto
const
D0_data =
D0_
(t, pos);
35
std::vector<double> D;
36
std::transform(D0_data.cbegin(), D0_data.cend(), std::back_inserter(D),
37
[&Arrhenius_exponent](
double
const
D0_component)
38
{ return D0_component * Arrhenius_exponent; });
39
40
return
fromVector
(D);
41
}
42
}
// namespace MaterialPropertyLib
OGS_FATAL
#define OGS_FATAL(...)
Definition
Error.h:19
PhysicalConstant.h
TemperatureDependentDiffusion.h
MaterialPropertyLib::Property::value
virtual PropertyDataType value() const
Definition
MaterialLib/MPL/Property.cpp:67
MaterialPropertyLib::Property::scale_
std::variant< Medium *, Phase *, Component * > scale_
Definition
MaterialLib/MPL/Property.h:290
MaterialPropertyLib::TemperatureDependentDiffusion::D0_
ParameterLib::Parameter< double > const & D0_
the molecular diffusion at the reference temperature
Definition
TemperatureDependentDiffusion.h:47
MaterialPropertyLib::TemperatureDependentDiffusion::Ea_
double const Ea_
the activation energy for diffusion
Definition
TemperatureDependentDiffusion.h:49
MaterialPropertyLib::TemperatureDependentDiffusion::checkScale
void checkScale() const override
Definition
TemperatureDependentDiffusion.cpp:14
MaterialPropertyLib::TemperatureDependentDiffusion::T0_
double const T0_
the reference temperature
Definition
TemperatureDependentDiffusion.h:51
MaterialPropertyLib::VariableArray
Definition
VariableType.h:94
MaterialPropertyLib::VariableArray::temperature
double temperature
Definition
VariableType.h:187
ParameterLib::SpatialPosition
Definition
SpatialPosition.h:21
MaterialLib::PhysicalConstant::IdealGasConstant
constexpr double IdealGasConstant
Definition
PhysicalConstant.h:25
MaterialPropertyLib
Definition
ChemicalSolverInterface.h:98
MaterialPropertyLib::fromVector
PropertyDataType fromVector(std::vector< double > const &values)
Definition
MaterialLib/MPL/Property.cpp:14
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
TemperatureDependentDiffusion.cpp
Generated by
1.14.0