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
31
namespace
Opm
{
32
33
class
UDQFunction
{
34
public
:
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
43
private
:
44
std::string m_name;
45
UDQTokenType func_type;
46
};
47
48
class
UDQScalarFunction
:
public
UDQFunction
{
49
public
:
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
64
private
:
65
std::function<
UDQSet
(
const
UDQSet
& arg)> func;
66
};
67
68
class
UDQUnaryElementalFunction
:
public
UDQFunction
{
69
public
:
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
88
private
:
89
std::function<
UDQSet
(
const
UDQSet
& arg)> func;
90
};
91
92
class
UDQBinaryFunction
:
public
UDQFunction
{
93
public
:
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
115
private
:
116
std::function<
UDQSet
(
const
UDQSet
& lhs,
const
UDQSet
& rhs)> func;
117
};
118
119
}
// namespace Opm
120
121
#endif
// UDQFUNCTION_HPP
Opm::UDQBinaryFunction
Definition
UDQFunction.hpp:92
Opm::UDQFunction
Definition
UDQFunction.hpp:33
Opm::UDQScalarFunction
Definition
UDQFunction.hpp:48
Opm::UDQSet
Definition
UDQSet.hpp:187
Opm::UDQUnaryElementalFunction
Definition
UDQFunction.hpp:68
Opm
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition
Exceptions.hpp:30
opm
input
eclipse
Schedule
UDQ
UDQFunction.hpp
Generated by
1.9.8