My Project
Loading...
Searching...
No Matches
UDQFunction.hpp
1/*
2 Copyright 2019 Equinor ASA.
3
4 This file is part of the Open Porous Media project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18*/
19
20#ifndef UDQFUNCTION_HPP
21#define UDQFUNCTION_HPP
22
23#include <opm/input/eclipse/Schedule/UDQ/UDQEnums.hpp>
24#include <opm/input/eclipse/Schedule/UDQ/UDQSet.hpp>
25
26#include <functional>
27#include <random>
28#include <string>
29#include <vector>
30
31namespace Opm {
32
34public:
35 UDQFunction() : func_type(UDQTokenType::error) {}
36 explicit UDQFunction(const std::string& name);
37 UDQFunction(const std::string& name, UDQTokenType funcType);
38 virtual ~UDQFunction() = default;
39 const std::string& name() const;
40 UDQTokenType type() const;
41 bool operator==(const UDQFunction& data) const;
42
43private:
44 std::string m_name;
45 UDQTokenType func_type;
46};
47
49public:
50 UDQScalarFunction(const std::string&name, std::function<UDQSet(const UDQSet& arg)> f);
51 UDQSet eval(const UDQSet& arg) const;
52
53 static UDQSet SUM(const UDQSet& arg);
54 static UDQSet AVEA(const UDQSet& arg);
55 static UDQSet AVEG(const UDQSet& arg);
56 static UDQSet AVEH(const UDQSet& arg);
57 static UDQSet UDQ_MIN(const UDQSet& arg);
58 static UDQSet UDQ_MAX(const UDQSet& arg);
59 static UDQSet NORM1(const UDQSet& arg);
60 static UDQSet NORM2(const UDQSet& arg);
61 static UDQSet NORMI(const UDQSet& arg);
62 static UDQSet PROD(const UDQSet& arg);
63
64private:
65 std::function<UDQSet(const UDQSet& arg)> func;
66};
67
69public:
70 UDQUnaryElementalFunction(const std::string&name, std::function<UDQSet(const UDQSet& arg)> f);
71 UDQSet eval(const UDQSet& arg) const;
72
73 static UDQSet ABS(const UDQSet& arg);
74 static UDQSet DEF(const UDQSet& arg);
75 static UDQSet EXP(const UDQSet& arg);
76 static UDQSet IDV(const UDQSet& arg);
77 static UDQSet LN(const UDQSet& arg);
78 static UDQSet LOG(const UDQSet& arg);
79 static UDQSet NINT(const UDQSet& arg);
80 static UDQSet SORT(const UDQSet& arg, bool ascending);
81 static UDQSet SORTA(const UDQSet& arg);
82 static UDQSet SORTD(const UDQSet& arg);
83 static UDQSet UNDEF(const UDQSet& arg);
84
85 static UDQSet RANDN(std::mt19937& rng, const UDQSet& arg);
86 static UDQSet RANDU(std::mt19937& rng, const UDQSet& arg);
87
88private:
89 std::function<UDQSet(const UDQSet& arg)> func;
90};
91
93public:
94 UDQBinaryFunction(const std::string& name, std::function<UDQSet(const UDQSet& lhs, const UDQSet& rhs)> f);
95 UDQSet eval(const UDQSet&, const UDQSet& arg) const;
96
97 static UDQSet EQ(double eps, const UDQSet& lhs, const UDQSet& rhs);
98 static UDQSet NE(double eps, const UDQSet& lhs, const UDQSet& rhs);
99 static UDQSet LE(double eps, const UDQSet& lhs, const UDQSet& rhs);
100 static UDQSet GE(double eps, const UDQSet& lhs, const UDQSet& rhs);
101
102 static UDQSet POW(const UDQSet& lhs, const UDQSet& rhs);
103 static UDQSet LT(const UDQSet& lhs, const UDQSet& rhs);
104 static UDQSet GT(const UDQSet& lhs, const UDQSet& rhs);
105 static UDQSet ADD(const UDQSet& lhs, const UDQSet& rhs);
106 static UDQSet MUL(const UDQSet& lhs, const UDQSet& rhs);
107 static UDQSet SUB(const UDQSet& lhs, const UDQSet& rhs);
108 static UDQSet DIV(const UDQSet& lhs, const UDQSet& rhs);
109
110 static UDQSet UADD(const UDQSet& lhs, const UDQSet& rhs);
111 static UDQSet UMUL(const UDQSet& lhs, const UDQSet& rhs);
112 static UDQSet UMAX(const UDQSet& lhs, const UDQSet& rhs);
113 static UDQSet UMIN(const UDQSet& lhs, const UDQSet& rhs);
114
115private:
116 std::function<UDQSet(const UDQSet& lhs, const UDQSet& rhs)> func;
117};
118
119} // namespace Opm
120
121#endif // UDQFUNCTION_HPP
Definition UDQFunction.hpp:92
Definition UDQFunction.hpp:33
Definition UDQFunction.hpp:48
Definition UDQSet.hpp:187
Definition UDQFunction.hpp:68
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30