UDQFunction.hpp
Go to the documentation of this file.
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 <stdexcept>
24#include <vector>
25#include <functional>
26#include <random>
27
30
31namespace Opm {
32
33
35public:
36 UDQFunction() : func_type(UDQTokenType::error) {}
39 virtual ~UDQFunction() = default;
40 const std::string& name() const;
42 bool operator==(const UDQFunction& data) const;
43
44private:
45 std::string m_name;
46 UDQTokenType func_type;
47};
48
50public:
52 UDQSet eval(const UDQSet& arg) const;
53
54 static UDQSet SUM(const UDQSet& arg);
55 static UDQSet AVEA(const UDQSet& arg);
56 static UDQSet AVEG(const UDQSet& arg);
57 static UDQSet AVEH(const UDQSet& arg);
58 static UDQSet MIN(const UDQSet& arg);
59 static UDQSet MAX(const UDQSet& arg);
60 static UDQSet NORM1(const UDQSet& arg);
61 static UDQSet NORM2(const UDQSet& arg);
62 static UDQSet NORMI(const UDQSet& arg);
63 static UDQSet PROD(const UDQSet& arg);
64
65private:
66 std::function<UDQSet(const UDQSet& arg)> func;
67};
68
69
71public:
73 UDQSet eval(const UDQSet& arg) const;
74
75 static UDQSet ABS(const UDQSet& arg);
76 static UDQSet DEF(const UDQSet& arg);
77 static UDQSet EXP(const UDQSet& arg);
78 static UDQSet IDV(const UDQSet& arg);
79 static UDQSet LN(const UDQSet& arg);
80 static UDQSet LOG(const UDQSet& arg);
81 static UDQSet NINT(const UDQSet& arg);
82 static UDQSet SORT(const UDQSet& arg, bool ascending);
83 static UDQSet SORTA(const UDQSet& arg);
84 static UDQSet SORTD(const UDQSet& arg);
85 static UDQSet UNDEF(const UDQSet& arg);
86
87 static UDQSet RANDN(std::mt19937& rng, const UDQSet& arg);
88 static UDQSet RANDU(std::mt19937& rng, const UDQSet& arg);
89
90private:
91 std::function<UDQSet(const UDQSet& arg)> func;
92};
93
94
96public:
97 UDQBinaryFunction(const std::string& name, std::function<UDQSet(const UDQSet& lhs, const UDQSet& rhs)> f);
98 UDQSet eval(const UDQSet&, const UDQSet& arg) const;
99
100 static UDQSet EQ(double eps, const UDQSet& lhs, const UDQSet& rhs);
101 static UDQSet NE(double eps, const UDQSet& lhs, const UDQSet& rhs);
102 static UDQSet LE(double eps, const UDQSet& lhs, const UDQSet& rhs);
103 static UDQSet GE(double eps, const UDQSet& lhs, const UDQSet& rhs);
104
105 static UDQSet POW(const UDQSet& lhs, const UDQSet& rhs);
106 static UDQSet LT(const UDQSet& lhs, const UDQSet& rhs);
107 static UDQSet GT(const UDQSet& lhs, const UDQSet& rhs);
108 static UDQSet ADD(const UDQSet& lhs, const UDQSet& rhs);
109 static UDQSet MUL(const UDQSet& lhs, const UDQSet& rhs);
110 static UDQSet SUB(const UDQSet& lhs, const UDQSet& rhs);
111 static UDQSet DIV(const UDQSet& lhs, const UDQSet& rhs);
112
113 static UDQSet UADD(const UDQSet& lhs, const UDQSet& rhs);
114 static UDQSet UMUL(const UDQSet& lhs, const UDQSet& rhs);
115 static UDQSet UMAX(const UDQSet& lhs, const UDQSet& rhs);
116 static UDQSet UMIN(const UDQSet& lhs, const UDQSet& rhs);
117private:
118
119 std::function<UDQSet(const UDQSet& lhs, const UDQSet& rhs)> func;
120};
121}
122#endif
const char *const string
Definition: cJSON.h:170
Definition: UDQFunction.hpp:95
UDQSet eval(const UDQSet &, const UDQSet &arg) const
static UDQSet SUB(const UDQSet &lhs, const UDQSet &rhs)
static UDQSet LE(double eps, const UDQSet &lhs, const UDQSet &rhs)
static UDQSet UMAX(const UDQSet &lhs, const UDQSet &rhs)
static UDQSet MUL(const UDQSet &lhs, const UDQSet &rhs)
static UDQSet UMIN(const UDQSet &lhs, const UDQSet &rhs)
static UDQSet ADD(const UDQSet &lhs, const UDQSet &rhs)
static UDQSet EQ(double eps, const UDQSet &lhs, const UDQSet &rhs)
static UDQSet LT(const UDQSet &lhs, const UDQSet &rhs)
UDQBinaryFunction(const std::string &name, std::function< UDQSet(const UDQSet &lhs, const UDQSet &rhs)> f)
static UDQSet GT(const UDQSet &lhs, const UDQSet &rhs)
static UDQSet UMUL(const UDQSet &lhs, const UDQSet &rhs)
static UDQSet NE(double eps, const UDQSet &lhs, const UDQSet &rhs)
static UDQSet POW(const UDQSet &lhs, const UDQSet &rhs)
static UDQSet UADD(const UDQSet &lhs, const UDQSet &rhs)
static UDQSet DIV(const UDQSet &lhs, const UDQSet &rhs)
static UDQSet GE(double eps, const UDQSet &lhs, const UDQSet &rhs)
Definition: UDQFunction.hpp:34
bool operator==(const UDQFunction &data) const
UDQTokenType type() const
UDQFunction()
Definition: UDQFunction.hpp:36
const std::string & name() const
UDQFunction(const std::string &name, UDQTokenType funcType)
virtual ~UDQFunction()=default
UDQFunction(const std::string &name)
Definition: UDQFunction.hpp:49
static UDQSet AVEG(const UDQSet &arg)
static UDQSet MIN(const UDQSet &arg)
static UDQSet PROD(const UDQSet &arg)
static UDQSet AVEA(const UDQSet &arg)
static UDQSet MAX(const UDQSet &arg)
static UDQSet NORM2(const UDQSet &arg)
static UDQSet AVEH(const UDQSet &arg)
UDQSet eval(const UDQSet &arg) const
static UDQSet SUM(const UDQSet &arg)
static UDQSet NORMI(const UDQSet &arg)
UDQScalarFunction(const std::string &name, std::function< UDQSet(const UDQSet &arg)> f)
static UDQSet NORM1(const UDQSet &arg)
Definition: UDQSet.hpp:60
Definition: UDQFunction.hpp:70
static UDQSet UNDEF(const UDQSet &arg)
static UDQSet DEF(const UDQSet &arg)
static UDQSet RANDU(std::mt19937 &rng, const UDQSet &arg)
static UDQSet SORTA(const UDQSet &arg)
static UDQSet RANDN(std::mt19937 &rng, const UDQSet &arg)
static UDQSet SORTD(const UDQSet &arg)
UDQSet eval(const UDQSet &arg) const
static UDQSet SORT(const UDQSet &arg, bool ascending)
static UDQSet LOG(const UDQSet &arg)
static UDQSet ABS(const UDQSet &arg)
static UDQSet IDV(const UDQSet &arg)
UDQUnaryElementalFunction(const std::string &name, std::function< UDQSet(const UDQSet &arg)> f)
static UDQSet LN(const UDQSet &arg)
static UDQSet NINT(const UDQSet &arg)
static UDQSet EXP(const UDQSet &arg)
std::function< double(double, double)> function
Definition: Operate.hpp:28
UDQTokenType funcType(const std::string &func_name)
Definition: A.hpp:4
@ error
Definition: ActionValue.hpp:21
UDQTokenType
Definition: UDQEnums.hpp:74
static std::string data()
Definition: exprtk.hpp:40022