OGS
Exponential.cpp
Go to the documentation of this file.
1
12
13#include <boost/math/special_functions/pow.hpp>
14#include <cmath>
15
16namespace MaterialPropertyLib
17{
19 double const offset,
20 PropertyDataType const& property_reference_value,
21 ExponentData const& v)
22 : exponent_data_(v), offset_(offset)
23{
24 name_ = std::move(name);
25 auto const f = std::get<double>(exponent_data_.factor);
26 auto const v0 = std::get<double>(exponent_data_.reference_condition);
27 value_ = std::get<double>(property_reference_value) * std::exp(-f * v0);
28}
29
31 VariableArray const& variable_array,
32 ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/,
33 double const /*dt*/) const
34{
35 auto const f = std::get<double>(exponent_data_.factor);
36 auto const v = std::get<double>(variable_array[exponent_data_.type]);
37
38 return offset_ + std::get<double>(value_) * std::exp(f * v);
39}
40
42 VariableArray const& variable_array, Variable const variable,
43 ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/,
44 double const /*dt*/) const
45{
46 if (exponent_data_.type != variable)
47 {
48 return 0.;
49 }
50
51 auto const f = std::get<double>(exponent_data_.factor);
52 auto const v = std::get<double>(variable_array[exponent_data_.type]);
53
54 return std::get<double>(value_) * f * std::exp(f * v);
55}
56
58 VariableArray const& variable_array, Variable const pv1, Variable const pv2,
59 ParameterLib::SpatialPosition const& /*pos*/, double const /*t*/,
60 double const /*dt*/) const
61{
62 if (exponent_data_.type != pv1 && exponent_data_.type != pv2)
63 {
64 return 0.;
65 }
66
67 auto const f = std::get<double>(exponent_data_.factor);
68 auto const v = std::get<double>(variable_array[exponent_data_.type]);
69
70 return std::get<double>(value_) * f * f * std::exp(f * v);
71}
72
73} // namespace MaterialPropertyLib
double const offset_
additive offset in units of the property.
Definition Exponential.h:72
ExponentData const exponent_data_
Definition Exponential.h:71
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &, double const, double const) const override
Exponential(std::string name, double const offset, PropertyDataType const &property_reference_value, ExponentData const &v)
PropertyDataType d2Value(VariableArray const &variable_array, Variable const pv1, Variable const pv2, ParameterLib::SpatialPosition const &, double const, double const) const override
PropertyDataType value_
The single value of a property.
Definition Property.h:292
virtual PropertyDataType value() const
Definition Property.cpp:76
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
VariableType factor
a dimensionless exponent.
Definition Exponential.h:23