OGS
VapourDiffusionPMQ.h
Go to the documentation of this file.
1
12#pragma once
13
15
16namespace MaterialPropertyLib
17{
18class Phase;
19
59class VapourDiffusionPMQ final : public Property
60{
61public:
62 explicit VapourDiffusionPMQ(std::string name,
63 double const base_diffusion_coefficient,
64 double const exponent)
65 : base_diffusion_coefficient_(base_diffusion_coefficient),
66 exponent_(exponent)
67 {
68 name_ = std::move(name);
69 }
70
71 void checkScale() const override
72 {
73 if (!(std::holds_alternative<Phase*>(scale_) ||
74 std::holds_alternative<Component*>(scale_)))
75 {
77 "The property 'VapourDiffusionPMQ' is "
78 "implemented on the 'phase' and 'component' scale only.");
79 }
80 }
81
82 PropertyDataType value(VariableArray const& variable_array,
84 double const t,
85 double const dt) const override;
86
87 PropertyDataType dValue(VariableArray const& variable_array,
88 Variable const variable,
90 double const t, double const dt) const override;
91
92private:
94 double const exponent_;
95};
96
97} // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition Error.h:26
virtual PropertyDataType value() const
Definition Property.cpp:76
std::variant< Medium *, Phase *, Component * > scale_
Definition Property.h:297
The Penman-Millington-Quirk (PMQ) Vapour diffusion model.
VapourDiffusionPMQ(std::string name, double const base_diffusion_coefficient, double const exponent)
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
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 Property.h:31