28 #include <opm/parser/eclipse/Deck/UDAValue.hpp>
29 #include <opm/parser/eclipse/EclipseState/Util/IOrderSet.hpp>
30 #include <opm/parser/eclipse/EclipseState/Runspec.hpp>
31 #include <opm/parser/eclipse/EclipseState/Schedule/Group/GPMaint.hpp>
32 #include <opm/parser/eclipse/Units/UnitSystem.hpp>
49 enum class GroupType : unsigned {
58 enum class ExceedAction {
66 static const std::string ExceedAction2String( ExceedAction enumValue );
67 static ExceedAction ExceedActionFromString(
const std::string& stringValue );
68 static ExceedAction ExceedActionFromInt(
const int value);
70 enum class InjectionCMode : int {
79 static const std::string InjectionCMode2String( InjectionCMode enumValue );
80 static InjectionCMode InjectionCModeFromString(
const std::string& stringValue );
81 static InjectionCMode InjectionCModeFromInt(
int ecl_int);
82 static int InjectionCMode2Int(InjectionCMode enumValue);
84 enum class ProductionCMode : int {
95 static const std::string ProductionCMode2String( ProductionCMode enumValue );
96 static ProductionCMode ProductionCModeFromString(
const std::string& stringValue );
97 static ProductionCMode ProductionCModeFromInt(
int ecl_int);
98 static int ProductionCMode2Int(Group::ProductionCMode cmode);
100 enum class GuideRateProdTarget {
114 static GuideRateProdTarget GuideRateProdTargetFromString(
const std::string& stringValue );
115 static GuideRateProdTarget GuideRateProdTargetFromInt(
int ecl_id);
118 enum class GuideRateInjTarget {
126 static GuideRateInjTarget GuideRateInjTargetFromString(
const std::string& stringValue );
127 static GuideRateInjTarget GuideRateInjTargetFromInt(
int ecl_id);
136 Phase phase = Phase::WATER;
137 InjectionCMode cmode = InjectionCMode::NONE;
142 std::optional<std::string> reinj_group;
143 std::optional<std::string> voidage_group;
144 bool available_group_control =
true;
145 double guide_rate = 0;
146 GuideRateInjTarget guide_rate_def = GuideRateInjTarget::NO_GUIDE_RATE;
150 int injection_controls = 0;
154 bool uda_phase()
const;
157 template<
class Serializer>
160 serializer(this->name);
163 surface_max_rate.serializeOp(serializer);
164 resv_max_rate.serializeOp(serializer);
165 target_reinj_fraction.serializeOp(serializer);
166 target_void_fraction.serializeOp(serializer);
167 serializer(reinj_group);
168 serializer(voidage_group);
169 serializer(injection_controls);
170 serializer(available_group_control);
171 serializer(guide_rate);
172 serializer(guide_rate_def);
178 InjectionCMode cmode;
179 double surface_max_rate;
180 double resv_max_rate;
181 double target_reinj_fraction;
182 double target_void_fraction;
183 int injection_controls = 0;
184 std::string reinj_group;
185 std::string voidage_group;
187 GuideRateInjTarget guide_rate_def = GuideRateInjTarget::NO_GUIDE_RATE;
195 ProductionCMode cmode = ProductionCMode::NONE;
196 ExceedAction exceed_action = ExceedAction::NONE;
201 double guide_rate = 0;
202 GuideRateProdTarget guide_rate_def = GuideRateProdTarget::NO_GUIDE_RATE;
203 double resv_target = 0;
204 bool available_group_control =
true;
207 int production_controls = 0;
213 template<
class Serializer>
218 serializer(exceed_action);
219 oil_target.serializeOp(serializer);
220 water_target.serializeOp(serializer);
221 gas_target.serializeOp(serializer);
222 liquid_target.serializeOp(serializer);
223 serializer(guide_rate);
224 serializer(guide_rate_def);
225 serializer(resv_target);
226 serializer(available_group_control);
227 serializer(production_controls);
233 ProductionCMode cmode;
234 ExceedAction exceed_action;
238 double liquid_target;
240 GuideRateProdTarget guide_rate_def = GuideRateProdTarget::NO_GUIDE_RATE;
241 double resv_target = 0;
242 int production_controls = 0;
247 Group(
const std::string& group_name, std::size_t insert_index_arg,
double udq_undefined_arg,
const UnitSystem& unit_system);
250 static Group serializeObject();
252 std::size_t insert_index()
const;
253 const std::string& name()
const;
254 bool is_field()
const;
255 int getGroupNetVFPTable()
const;
257 bool updateNetVFPTable(
int vfp_arg);
258 bool update_gefac(
double gefac,
bool transfer_gefac);
261 const std::string& parent()
const;
262 std::optional<std::string> control_group()
const;
263 std::optional<std::string> flow_group()
const;
265 bool updateParent(
const std::string& parent);
268 bool isProductionGroup()
const;
269 bool isInjectionGroup()
const;
270 void setProductionGroup();
271 void setInjectionGroup();
272 double getGroupEfficiencyFactor()
const;
273 bool getTransferGroupEfficiencyFactor()
const;
275 std::size_t numWells()
const;
276 bool addGroup(
const std::string& group_name);
277 bool hasGroup(
const std::string& group_name)
const;
278 void delGroup(
const std::string& group_name);
279 bool addWell(
const std::string& well_name);
280 bool hasWell(
const std::string& well_name)
const;
281 void delWell(
const std::string& well_name);
283 const std::vector<std::string>& wells()
const;
284 const std::vector<std::string>& groups()
const;
285 bool wellgroup()
const;
288 bool hasInjectionControl(Phase phase)
const;
290 const std::map<Phase , GroupInjectionProperties>& injectionProperties()
const;
292 const GroupType& getGroupType()
const;
293 ProductionCMode prod_cmode()
const;
294 InjectionCMode injection_cmode()
const;
295 Phase injection_phase()
const;
296 bool has_control(ProductionCMode control)
const;
297 bool has_control(Phase phase, InjectionCMode control)
const;
298 bool productionGroupControlAvailable()
const;
299 bool injectionGroupControlAvailable(
const Phase phase)
const;
300 const std::optional<GPMaint>& gpmaint()
const;
301 void set_gpmaint(
GPMaint gpmaint);
303 bool has_gpmaint_control(Phase phase, InjectionCMode cmode)
const;
304 bool has_gpmaint_control(ProductionCMode cmode)
const;
306 bool operator==(
const Group& data)
const;
307 const std::optional<Phase>& topup_phase()
const;
309 template<
class Serializer>
313 serializer(m_insert_index);
314 serializer(udq_undefined);
315 unit_system.serializeOp(serializer);
316 serializer(group_type);
318 serializer(transfer_gefac);
319 serializer(vfp_table);
320 serializer(parent_group);
321 m_wells.serializeOp(serializer);
322 m_groups.serializeOp(serializer);
323 serializer.map(injection_properties);
324 production_properties.serializeOp(serializer);
325 serializer(m_topup_phase);
326 serializer(m_gpmaint);
330 bool hasType(GroupType gtype)
const;
331 void addType(GroupType new_gtype);
334 std::size_t m_insert_index;
335 double udq_undefined;
337 GroupType group_type;
342 std::string parent_group;
346 std::map<Phase, GroupInjectionProperties> injection_properties;
347 GroupProductionProperties production_properties;
348 std::optional<Phase> m_topup_phase;
349 std::optional<GPMaint> m_gpmaint;
352 Group::GroupType operator |(Group::GroupType lhs, Group::GroupType rhs);
353 Group::GroupType operator &(Group::GroupType lhs, Group::GroupType rhs);
Definition: GPMaint.hpp:30
Definition: Serializer.hpp:38
Definition: SummaryState.hpp:69
Definition: UDAValue.hpp:32
Definition: UDQActive.hpp:43
Definition: UDQConfig.hpp:51
Definition: UnitSystem.hpp:34
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:29
Definition: Group.hpp:130
Definition: Group.hpp:190
Definition: Group.hpp:176
Definition: Group.hpp:232