My Project
Loading...
Searching...
No Matches
WellProductionControls.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_PRODUCTION_CONTROLS_HPP
22#define WELL_PRODUCTION_CONTROLS_HPP
23
24#include <opm/input/eclipse/Schedule/ScheduleTypes.hpp>
25#include <opm/input/eclipse/Schedule/Well/WellEnums.hpp>
26
27namespace Opm {
28
30public:
31 explicit WellProductionControls(int controls_arg) :
32 controls(controls_arg)
33 {
34 }
35
36 bool hasControl(WellProducerCMode cmode_arg) const
37 {
38 return (this->controls & static_cast<int>(cmode_arg)) != 0;
39 }
40
41 void skipControl(WellProducerCMode cmode_arg) {
42 auto int_arg = static_cast<int>(cmode_arg);
43 if ((this->controls & int_arg) != 0)
44 this->controls -= int_arg;
45 }
46
47 void addControl(WellProducerCMode cmode_arg) {
48 auto int_arg = static_cast<int>(cmode_arg);
49 if ((this->controls & int_arg) == 0)
50 this->controls += int_arg;
51 }
52
53 void clearControls(){
54 this->controls = 0;
55 }
56
57 bool operator==(const WellProductionControls& other) const
58 {
59 return this->cmode == other.cmode &&
60 this->oil_rate == other.oil_rate &&
61 this->water_rate == other.water_rate &&
62 this->gas_rate == other.gas_rate &&
63 this->liquid_rate == other.liquid_rate &&
64 this->resv_rate == other.resv_rate &&
65 this->bhp_history == other.bhp_history &&
66 this->thp_history == other.thp_history &&
67 this->bhp_limit == other.bhp_limit &&
68 this->thp_limit == other.thp_limit &&
69 this->alq_value == other.alq_value &&
70 this->vfp_table_number == other.vfp_table_number &&
71 this->prediction_mode == other.prediction_mode;
72 }
73
74 WellProducerCMode cmode = WellProducerCMode::NONE;
75 double oil_rate{0};
76 double water_rate{0};
77 double gas_rate{0};
78 double liquid_rate{0};
79 double resv_rate{0};
80 double bhp_history{0};
81 double thp_history{0};
82 double bhp_limit{0};
83 double thp_limit{0};
84 double alq_value{0};
85 int vfp_table_number{0};
86 bool prediction_mode{0};
87
88private:
89 int controls;
90};
91
92}
93
94#endif
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30
Definition WellProductionControls.hpp:29