OGS
Function.h
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#pragma once
5
6#include <map>
7#include <utility>
8#include <vector>
9
13
14namespace MaterialPropertyLib
15{
20{
21 std::string variable_name1;
22 std::string variable_name2;
23 std::vector<std::string> expressions;
24};
25
34class Function final : public Property
35{
36public:
38 std::string name,
39 std::vector<std::string> const& value_string_expressions,
40 std::vector<std::pair<std::string, std::vector<std::string>>> const&
41 dvalue_string_expressions,
42 std::vector<D2ValueConfig> const& d2value_string_expressions,
43 std::map<std::string,
44 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
45 curves);
46
47 PropertyDataType value(VariableArray const& variable_array,
49 double const t,
50 double const dt) const override;
51
52 PropertyDataType dValue(VariableArray const& variable_array,
53 Variable const variable,
55 double const t,
56 double const dt) const override;
57
58 PropertyDataType d2Value(VariableArray const& variable_array,
59 Variable const variable1,
60 Variable const variable2,
62 double const t,
63 double const dt) const override;
64
66
67private:
68 template <int D>
69 struct Implementation;
70
71 std::unique_ptr<Implementation<2>> impl2_;
72 std::unique_ptr<Implementation<3>> impl3_;
73
74 std::variant<Function::Implementation<2>*, Function::Implementation<3>*>
76 VariableArray const& variable_array) const;
77
79 std::vector<Variable> required_variables_enum_;
80};
81} // namespace MaterialPropertyLib
std::unique_ptr< Implementation< 3 > > impl3_
Definition Function.h:72
std::variant< Function::Implementation< 2 > *, Function::Implementation< 3 > * > getImplementationForDimensionOfVariableArray(VariableArray const &variable_array) const
Definition Function.cpp:642
std::vector< Variable > required_variables_enum_
Variables used in the exprtk expressions.
Definition Function.h:79
Function(std::string name, std::vector< std::string > const &value_string_expressions, std::vector< std::pair< std::string, std::vector< std::string > > > const &dvalue_string_expressions, std::vector< D2ValueConfig > const &d2value_string_expressions, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
Definition Function.cpp:560
PropertyDataType dValue(VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
Definition Function.cpp:695
std::unique_ptr< Implementation< 2 > > impl2_
Definition Function.h:71
PropertyDataType d2Value(VariableArray const &variable_array, Variable const variable1, Variable const variable2, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const override
Default implementation: 2nd derivative of any constant property is zero.
Definition Function.cpp:723
virtual PropertyDataType value() const
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
std::vector< std::string > expressions
Definition Function.h:23