opm-common
Toggle main menu visibility
Loading...
Searching...
No Matches
WellInjectionControls.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
21
#ifndef WELL_INJECTION_CONTROLS_HPP
22
#define WELL_INJECTION_CONTROLS_HPP
23
24
#include <opm/input/eclipse/Schedule/ScheduleTypes.hpp>
25
#include <opm/input/eclipse/Schedule/Well/WellEnums.hpp>
26
27
#include <cmath>
28
29
namespace
Opm
{
30
31
struct
WellInjectionControls {
32
public
:
33
explicit
WellInjectionControls(
int
controls_arg) :
34
controls(controls_arg)
35
{}
36
37
bool
hasControl(WellInjectorCMode cmode_arg)
const
38
{
39
return
(this->controls &
static_cast<
int
>
(cmode_arg)) != 0;
40
}
41
42
void
skipControl(WellInjectorCMode cmode_arg) {
43
auto
int_arg =
static_cast<
int
>
(cmode_arg);
44
if
((this->controls & int_arg) != 0)
45
this->controls -= int_arg;
46
}
47
48
void
addControl(WellInjectorCMode cmode_arg) {
49
auto
int_arg =
static_cast<
int
>
(cmode_arg);
50
if
((this->controls & int_arg) == 0)
51
this->controls += int_arg;
52
}
53
54
void
clearControls(){
55
this->controls = 0;
56
}
57
58
bool
anyZeroRateConstraint()
const
{
59
auto
is_zero = [](
const
double
x)
60
{
61
return
std::isfinite(x) && !std::isnormal(x);
62
};
63
64
if
(this->hasControl(WellInjectorCMode::RATE) && is_zero(this->surface_rate) ) {
65
return
true
;
66
}
67
68
if
(this->hasControl(WellInjectorCMode::RESV) && is_zero(this->reservoir_rate) ) {
69
return
true
;
70
}
71
72
return
false
;
73
}
74
75
double
bhp_limit{};
76
double
thp_limit{};
77
78
InjectorType injector_type{InjectorType::GAS};
79
WellInjectorCMode cmode = WellInjectorCMode::CMODE_UNDEFINED;
80
double
surface_rate{};
81
double
reservoir_rate{};
82
int
vfp_table_number{};
83
bool
prediction_mode{
false
};
84
double
rs_rv_inj{};
85
86
private
:
87
int
controls{};
88
};
89
90
}
91
92
#endif
Opm
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition
Exceptions.hpp:30
opm
input
eclipse
Schedule
Well
WellInjectionControls.hpp
Generated by
1.17.0