OGS
VariableType.h
Go to the documentation of this file.
1
13#pragma once
14
15#include <BaseLib/Error.h>
16
17#include <Eigen/Core>
18#include <array>
19#include <string>
20#include <variant>
21
22namespace MaterialPropertyLib
23{
24
56
57static const std::array<std::string,
58 static_cast<int>(Variable::number_of_variables)>
59 variable_enum_to_string{{"capillary_pressure",
60 "concentration",
61 "deformation_gradient",
62 "density",
63 "effective_pore_pressure",
64 "enthalpy",
65 "enthalpy_of_evaporation",
66 "equivalent_plastic_strain",
67 "grain_compressibility",
68 "liquid_phase_pressure",
69 "liquid_saturation",
70 "mechanical_strain",
71 "molar_mass",
72 "molar_mass_derivative",
73 "molar_fraction",
74 "gas_phase_pressure",
75 "porosity",
76 "solid_grain_pressure",
77 "stress",
78 "temperature",
79 "total_stress",
80 "transport_porosity",
81 "vapour_pressure",
82 "volumetric_strain"}};
83
86using VariableType = std::variant<std::monostate,
87 double,
88 Eigen::Matrix<double, 4, 1>,
89 Eigen::Matrix<double, 5, 1>,
90 Eigen::Matrix<double, 6, 1>,
91 Eigen::Matrix<double, 9, 1>>;
92
94{
95public:
98 VariableType operator[](Variable const variable) const
99 {
100 auto identity = [](auto&& arg) -> VariableType { return arg; };
101 switch (variable)
102 {
104 return capillary_pressure;
106 return concentration;
108 return std::visit(identity, deformation_gradient);
110 return density;
114 return enthalpy;
124 return liquid_saturation;
126 return std::visit(identity, mechanical_strain);
128 return molar_mass;
132 return molar_fraction;
134 return gas_phase_pressure;
136 return porosity;
139 case Variable::stress:
140 return std::visit(identity, stress);
142 return temperature;
144 return std::visit(identity, total_stress);
146 return transport_porosity;
148 return vapour_pressure;
150 return volumetric_strain;
151 default:
152 OGS_FATAL(
153 "No conversion to VariableType is provided for variable "
154 "{:d}",
155 static_cast<int>(variable));
156 };
157 }
158
161 // Compare to GMatrixPolicy::GradientVectorType. The 1d case = Matrix<3, 1>
162 // is not used so far.
163 std::variant<std::monostate,
164 Eigen::Matrix<double, 5, 1>,
165 Eigen::Matrix<double, 9, 1>>
167 double density = nan_;
169 double enthalpy = nan_;
175 std::variant<std::monostate,
176 Eigen::Matrix<double, 4, 1>,
177 Eigen::Matrix<double, 6, 1>>
179 double molar_mass = nan_;
183 double porosity = nan_;
185 std::variant<std::monostate,
186 Eigen::Matrix<double, 4, 1>,
187 Eigen::Matrix<double, 6, 1>>
190 std::variant<std::monostate,
191 Eigen::Matrix<double, 4, 1>,
192 Eigen::Matrix<double, 6, 1>>
194 std::variant<std::monostate,
195 Eigen::Matrix<double, 4, 1>,
196 Eigen::Matrix<double, 6, 1>>
201
202private:
203 static constexpr auto nan_ = std::numeric_limits<double>::signaling_NaN();
204};
205
207
210Variable convertStringToVariable(std::string const& string);
211} // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition Error.h:26
VariableType operator[](Variable const variable) const
std::variant< std::monostate, Eigen::Matrix< double, 4, 1 >, Eigen::Matrix< double, 6, 1 > > mechanical_strain
std::variant< std::monostate, Eigen::Matrix< double, 5, 1 >, Eigen::Matrix< double, 9, 1 > > deformation_gradient
std::variant< std::monostate, Eigen::Matrix< double, 4, 1 >, Eigen::Matrix< double, 6, 1 > > total_strain
std::variant< std::monostate, Eigen::Matrix< double, 4, 1 >, Eigen::Matrix< double, 6, 1 > > stress
std::variant< std::monostate, Eigen::Matrix< double, 4, 1 >, Eigen::Matrix< double, 6, 1 > > total_stress
static const VariableArray EmptyVariableArray
static const std::array< std::string, static_cast< int >(Variable::number_of_variables)> variable_enum_to_string
std::variant< std::monostate, double, Eigen::Matrix< double, 4, 1 >, Eigen::Matrix< double, 5, 1 >, Eigen::Matrix< double, 6, 1 >, Eigen::Matrix< double, 9, 1 > > VariableType
@ concentration
used to specify decay rate of a substance.
Variable convertStringToVariable(std::string const &string)