parser/eclipse/EclipseState/Schedule/Group/group.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 GROUP2_HPP
21#define GROUP2_HPP
22
23
24#include <map>
25#include <optional>
26#include <string>
27
32
33namespace Opm {
34
35class SummaryState;
36class Group {
37public:
38
39// A group can have both injection controls and production controls set at
40// the same time, i.e. this enum is used as a bitmask.
41enum class GroupType : unsigned {
42 NONE = 0,
43 PRODUCTION = 1,
44 INJECTION = 2,
45 MIXED = 3
46};
47
48
49
50enum class ExceedAction {
51 NONE = 0,
52 CON = 1,
53 CON_PLUS = 2, // String: "+CON"
54 WELL = 3,
55 PLUG = 4,
56 RATE = 5
57};
59static ExceedAction ExceedActionFromString( const std::string& stringValue );
60
61
62enum class InjectionCMode : int {
63 NONE = 0,
64 RATE = 1,
65 RESV = 2,
66 REIN = 4,
67 VREP = 8,
68 FLD = 16,
69 SALE = 32
70};
73
74
75enum class ProductionCMode : int {
76 NONE = 0,
77 ORAT = 1,
78 WRAT = 2,
79 GRAT = 4,
80 LRAT = 8,
81 CRAT = 16,
82 RESV = 32,
83 PRBL = 64,
84 FLD = 128
85};
88
89
90enum class GuideRateTarget {
91 OIL = 0,
92 WAT = 1,
93 GAS = 2,
94 LIQ = 3,
95 RES = 4,
96 COMB = 5,
97 WGA = 6,
98 CVAL = 7,
99 INJV = 8,
100 POTN = 9,
101 FORM = 10,
102 NO_GUIDE_RATE = 11
103};
105
106
107
118
120
122 bool operator==(const GroupInjectionProperties& other) const;
123 bool operator!=(const GroupInjectionProperties& other) const;
124
125 template<class Serializer>
126 void serializeOp(Serializer& serializer)
127 {
128 serializer(phase);
129 serializer(cmode);
130 surface_max_rate.serializeOp(serializer);
131 resv_max_rate.serializeOp(serializer);
134 serializer(reinj_group);
135 serializer(voidage_group);
136 serializer(injection_controls);
137 serializer(available_group_control);
138 }
139};
140
151 bool has_control(InjectionCMode control) const;
152};
153
163 double resv_target = 0;
166
168 bool operator==(const GroupProductionProperties& other) const;
169 bool operator!=(const GroupProductionProperties& other) const;
170
171 template<class Serializer>
172 void serializeOp(Serializer& serializer)
173 {
174 serializer(cmode);
175 serializer(exceed_action);
176 oil_target.serializeOp(serializer);
177 water_target.serializeOp(serializer);
178 gas_target.serializeOp(serializer);
179 liquid_target.serializeOp(serializer);
180 serializer(guide_rate);
181 serializer(guide_rate_def);
182 serializer(resv_target);
183 serializer(available_group_control);
184 serializer(production_controls);
185 }
186};
187
188
198 double resv_target = 0;
200 bool has_control(ProductionCMode control) const;
201};
202
203
205 Group(const std::string& group_name, std::size_t insert_index_arg, std::size_t init_step_arg, double udq_undefined_arg, const UnitSystem& unit_system);
206
208
209 bool defined(std::size_t timeStep) const;
210 std::size_t insert_index() const;
211 const std::string& name() const;
213
214 bool updateNetVFPTable(int vfp_arg);
215 bool update_gefac(double gefac, bool transfer_gefac);
216
217 // [[deprecated("use Group::control_group() or Group::flow_group()")]]
218 const std::string& parent() const;
219 std::optional<std::string> control_group() const;
220 std::optional<std::string> flow_group() const;
221
225 bool isProductionGroup() const;
226 bool isInjectionGroup() const;
231
232 std::size_t numWells() const;
233 bool addGroup(const std::string& group_name);
234 bool hasGroup(const std::string& group_name) const;
235 void delGroup(const std::string& group_name);
236 bool addWell(const std::string& well_name);
237 bool hasWell(const std::string& well_name) const;
238 void delWell(const std::string& well_name);
239
240 const std::vector<std::string>& wells() const;
241 const std::vector<std::string>& groups() const;
242 bool wellgroup() const;
245 bool hasInjectionControl(Phase phase) const;
247 const std::map<Phase , GroupInjectionProperties>& injectionProperties() const;
248 const GroupType& getGroupType() const;
252 bool has_control(ProductionCMode control) const;
253 bool has_control(InjectionCMode control) const;
255 bool injectionGroupControlAvailable(const Phase phase) const;
256
257 bool operator==(const Group& data) const;
258 const Phase& topup_phase() const;
259 bool has_topup_phase() const;
260
261 template<class Serializer>
262 void serializeOp(Serializer& serializer)
263 {
264 serializer(m_name);
265 serializer(m_insert_index);
266 serializer(init_step);
267 serializer(udq_undefined);
268 unit_system.serializeOp(serializer);
269 serializer(group_type);
270 serializer(gefac);
271 serializer(transfer_gefac);
272 serializer(vfp_table);
273 serializer(parent_group);
274 m_wells.serializeOp(serializer);
275 m_groups.serializeOp(serializer);
276 serializer.map(injection_properties);
277 production_properties.serializeOp(serializer);
278 serializer(m_topup_phase);
279 }
280
281private:
282 bool hasType(GroupType gtype) const;
283 void addType(GroupType new_gtype);
284
285 std::string m_name;
286 std::size_t m_insert_index;
287 std::size_t init_step;
288 double udq_undefined;
289 UnitSystem unit_system;
290 GroupType group_type;
291 double gefac;
292 bool transfer_gefac;
293 int vfp_table;
294
295 std::string parent_group;
297 IOrderSet<std::string> m_groups;
298
299 std::map<Phase, GroupInjectionProperties> injection_properties;
300 GroupProductionProperties production_properties{};
301 std::pair<Phase, bool> m_topup_phase{Phase::WATER, false};
302};
303
306
307}
308
309#endif
const char *const string
Definition: cJSON.h:170
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:36
std::size_t insert_index() const
Group(const std::string &group_name, std::size_t insert_index_arg, std::size_t init_step_arg, double udq_undefined_arg, const UnitSystem &unit_system)
void delGroup(const std::string &group_name)
bool updateParent(const std::string &parent)
void setInjectionGroup()
bool operator==(const Group &data) const
std::size_t numWells() const
void serializeOp(Serializer &serializer)
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:262
bool updateProduction(const GroupProductionProperties &production)
bool isInjectionGroup() const
bool updateInjection(const GroupInjectionProperties &injection)
bool defined(std::size_t timeStep) const
InjectionControls injectionControls(Phase phase, const SummaryState &st) const
bool has_topup_phase() const
bool addWell(const std::string &well_name)
bool hasWell(const std::string &well_name) const
int getGroupNetVFPTable() const
bool update_gefac(double gefac, bool transfer_gefac)
bool injectionGroupControlAvailable(const Phase phase) const
bool wellgroup() const
const std::vector< std::string > & wells() const
Phase injection_phase() const
const std::vector< std::string > & groups() const
GroupType
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:41
ExceedAction
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:50
ProductionControls productionControls(const SummaryState &st) const
static ExceedAction ExceedActionFromString(const std::string &stringValue)
std::optional< std::string > flow_group() const
ProductionCMode production_cmode() const
const std::string & parent() const
GuideRateTarget
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:90
void setProductionGroup()
bool productionGroupControlAvailable() const
void delWell(const std::string &well_name)
InjectionCMode
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:62
static Group serializeObject()
const GroupType & getGroupType() const
const std::map< Phase, GroupInjectionProperties > & injectionProperties() const
bool hasGroup(const std::string &group_name) const
double getGroupEfficiencyFactor() const
static GuideRateTarget GuideRateTargetFromString(const std::string &stringValue)
const Phase & topup_phase() const
bool isProductionGroup() const
bool getTransferGroupEfficiencyFactor() const
static InjectionCMode InjectionCModeFromString(const std::string &stringValue)
const GroupProductionProperties & productionProperties() const
bool has_control(ProductionCMode control) const
bool addGroup(const std::string &group_name)
std::optional< std::string > control_group() const
bool has_control(InjectionCMode control) const
static const std::string ProductionCMode2String(ProductionCMode enumValue)
bool updateNetVFPTable(int vfp_arg)
const std::string & name() const
static const std::string ExceedAction2String(ExceedAction enumValue)
bool hasInjectionControl(Phase phase) const
ProductionCMode
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:75
InjectionCMode injection_cmode() const
static ProductionCMode ProductionCModeFromString(const std::string &stringValue)
static const std::string InjectionCMode2String(InjectionCMode enumValue)
void serializeOp(Serializer &serializer)
Definition: IOrderSet.hpp:122
Definition: Serializer.hpp:38
Definition: SummaryState.hpp:65
Definition: UDAValue.hpp:32
void serializeOp(Serializer &serializer)
Definition: UDAValue.hpp:72
Definition: UnitSystem.hpp:32
void serializeOp(Serializer &serializer)
Definition: UnitSystem.hpp:121
Definition: A.hpp:4
Group::GroupType operator|(Group::GroupType lhs, Group::GroupType rhs)
Group::GroupType operator&(Group::GroupType lhs, Group::GroupType rhs)
Phase
Definition: Runspec.hpp:34
static std::string data()
Definition: exprtk.hpp:40022
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:108
UDAValue target_void_fraction
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:114
std::string voidage_group
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:116
bool operator!=(const GroupInjectionProperties &other) const
InjectionCMode cmode
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:110
static GroupInjectionProperties serializeObject()
UDAValue resv_max_rate
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:112
bool operator==(const GroupInjectionProperties &other) const
Phase phase
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:109
std::string reinj_group
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:115
void serializeOp(Serializer &serializer)
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:126
bool available_group_control
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:117
UDAValue target_reinj_fraction
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:113
int injection_controls
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:121
UDAValue surface_max_rate
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:111
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:154
UDAValue water_target
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:158
bool operator!=(const GroupProductionProperties &other) const
UDAValue gas_target
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:159
ProductionCMode cmode
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:155
UDAValue oil_target
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:157
int production_controls
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:167
GuideRateTarget guide_rate_def
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:162
UDAValue liquid_target
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:160
bool available_group_control
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:164
bool operator==(const GroupProductionProperties &other) const
ExceedAction exceed_action
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:156
void serializeOp(Serializer &serializer)
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:172
double resv_target
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:163
double guide_rate
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:161
static GroupProductionProperties serializeObject()
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:141
int injection_controls
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:148
Phase phase
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:142
InjectionCMode cmode
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:143
double target_reinj_fraction
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:146
double resv_max_rate
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:145
double target_void_fraction
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:147
double surface_max_rate
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:144
std::string reinj_group
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:149
std::string voidage_group
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:150
bool has_control(InjectionCMode control) const
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:189
int production_controls
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:199
double guide_rate
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:196
double resv_target
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:198
double liquid_target
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:195
double gas_target
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:194
double oil_target
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:192
double water_target
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:193
ProductionCMode cmode
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:190
ExceedAction exceed_action
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:191
GuideRateTarget guide_rate_def
Definition: parser/eclipse/EclipseState/Schedule/Group/group.hpp:197
bool has_control(ProductionCMode control) const