54 enum class GroupType :
unsigned {
61 enum class ExceedAction {
69 static std::string ExceedAction2String(ExceedAction enumValue);
70 static ExceedAction ExceedActionFromString(
const std::string& stringValue);
71 static ExceedAction ExceedActionFromInt(
const int value);
73 enum class InjectionCMode :
int {
82 static std::string InjectionCMode2String(InjectionCMode enumValue);
83 static InjectionCMode InjectionCModeFromString(
const std::string& stringValue);
84 static InjectionCMode InjectionCModeFromInt(
int ecl_int);
85 static int InjectionCMode2Int(InjectionCMode enumValue);
87 enum class ProductionCMode :
int {
98 static std::string ProductionCMode2String(ProductionCMode enumValue);
99 static ProductionCMode ProductionCModeFromString(
const std::string& stringValue);
100 static ProductionCMode ProductionCModeFromInt(
int ecl_int);
101 static int ProductionCMode2Int(Group::ProductionCMode cmode);
103 enum class GuideRateProdTarget {
117 static GuideRateProdTarget GuideRateProdTargetFromString(
const std::string& stringValue);
118 static GuideRateProdTarget GuideRateProdTargetFromInt(
int ecl_id);
120 enum class GuideRateInjTarget {
127 static GuideRateInjTarget GuideRateInjTargetFromString(
const std::string& stringValue);
128 static GuideRateInjTarget GuideRateInjTargetFromInt(
int ecl_id);
129 static int GuideRateInjTargetToInt(GuideRateInjTarget target);
131 struct GroupInjectionProperties
133 GroupInjectionProperties() =
default;
134 explicit GroupInjectionProperties(std::string group_name_arg);
135 GroupInjectionProperties(std::string group_name_arg, Phase phase,
const UnitSystem& unit_system);
138 Phase phase = Phase::WATER;
139 InjectionCMode cmode = InjectionCMode::NONE;
144 std::optional<std::string> reinj_group;
145 std::optional<std::string> voidage_group;
146 bool available_group_control =
true;
147 double guide_rate = 0;
148 GuideRateInjTarget guide_rate_def = GuideRateInjTarget::NO_GUIDE_RATE;
150 static GroupInjectionProperties serializationTestObject();
152 int injection_controls = 0;
153 bool operator==(
const GroupInjectionProperties& other)
const;
154 bool operator!=(
const GroupInjectionProperties& other)
const;
156 bool uda_phase()
const;
159 template<
class Serializer>
162 serializer(this->name);
165 serializer(surface_max_rate);
166 serializer(resv_max_rate);
167 serializer(target_reinj_fraction);
168 serializer(target_void_fraction);
169 serializer(reinj_group);
170 serializer(voidage_group);
171 serializer(injection_controls);
172 serializer(available_group_control);
173 serializer(guide_rate);
174 serializer(guide_rate_def);
181 ExceedAction allRates{ExceedAction::NONE};
182 ExceedAction oil{ExceedAction::NONE};
183 ExceedAction water{ExceedAction::NONE};
184 ExceedAction gas{ExceedAction::NONE};
185 ExceedAction liquid{ExceedAction::NONE};
187 template<
class Serializer>
190 serializer(allRates);
199 return (this->allRates == other.allRates)
200 && (this->oil == other.oil)
201 && (this->water == other.water)
202 && (this->gas == other.gas)
203 && (this->liquid == other.liquid);
210 InjectionCMode cmode;
211 double surface_max_rate;
212 double resv_max_rate;
213 double target_reinj_fraction;
214 double target_void_fraction;
215 int injection_controls = 0;
216 std::string reinj_group;
217 std::string voidage_group;
219 GuideRateInjTarget guide_rate_def = GuideRateInjTarget::NO_GUIDE_RATE;
222 struct GroupProductionProperties
224 GroupProductionProperties();
225 GroupProductionProperties(
const UnitSystem& unit_system,
const std::string& gname);
228 ProductionCMode cmode = ProductionCMode::NONE;
234 double guide_rate = 0;
235 GuideRateProdTarget guide_rate_def = GuideRateProdTarget::NO_GUIDE_RATE;
237 bool available_group_control =
true;
238 static GroupProductionProperties serializationTestObject();
240 int production_controls = 0;
241 bool operator==(
const GroupProductionProperties& other)
const;
242 bool operator!=(
const GroupProductionProperties& other)
const;
246 template<
class Serializer>
251 serializer(group_limit_action);
252 serializer(oil_target);
253 serializer(water_target);
254 serializer(gas_target);
255 serializer(liquid_target);
256 serializer(guide_rate);
257 serializer(guide_rate_def);
258 serializer(resv_target);
259 serializer(available_group_control);
260 serializer(production_controls);
266 ProductionCMode cmode;
271 double liquid_target;
273 GuideRateProdTarget guide_rate_def = GuideRateProdTarget::NO_GUIDE_RATE;
274 double resv_target = 0;
275 int production_controls = 0;
279 Group(
const std::string& group_name,
280 std::size_t insert_index_arg,
281 double udq_undefined_arg,
285 std::size_t insert_index_arg,
286 double udq_undefined_arg,
289 static Group serializationTestObject();
291 std::size_t insert_index()
const;
292 const std::string& name()
const;
293 bool is_field()
const;
295 bool update_gefac(
double gefac,
bool use_efficiency_in_network);
298 const std::string& parent()
const;
299 std::optional<std::string> control_group()
const;
300 std::optional<std::string> flow_group()
const;
302 bool updateParent(
const std::string& parent);
305 bool isProductionGroup()
const;
306 bool isInjectionGroup()
const;
307 void setProductionGroup();
308 void setInjectionGroup();
309 double getGroupEfficiencyFactor(
bool network =
false)
const;
310 bool useEfficiencyInNetwork()
const;
338 std::size_t numWells()
const;
339 bool addGroup(
const std::string& group_name);
340 bool hasGroup(
const std::string& group_name)
const;
341 void delGroup(
const std::string& group_name);
342 bool addWell(
const std::string& well_name);
343 bool hasWell(
const std::string& well_name)
const;
344 void delWell(
const std::string& well_name);
346 const std::vector<std::string>& wells()
const;
347 const std::vector<std::string>& groups()
const;
348 bool wellgroup()
const;
351 bool hasInjectionControl(Phase phase)
const;
353 const std::map<Phase , GroupInjectionProperties>& injectionProperties()
const;
355 const GroupType& getGroupType()
const;
356 ProductionCMode prod_cmode()
const;
357 InjectionCMode injection_cmode()
const;
358 Phase injection_phase()
const;
359 bool has_control(ProductionCMode control)
const;
360 bool has_control(Phase phase, InjectionCMode control)
const;
361 bool productionGroupControlAvailable()
const;
362 bool injectionGroupControlAvailable(
const Phase phase)
const;
363 const std::optional<GPMaint>& gpmaint()
const;
364 void set_gpmaint(
GPMaint gpmaint);
366 bool has_gpmaint_control(Phase phase, InjectionCMode cmode)
const;
367 bool has_gpmaint_control(ProductionCMode cmode)
const;
368 bool as_choke()
const;
369 void as_choke(
const std::string& group);
371 bool operator==(
const Group& data)
const;
372 const std::optional<Phase>& topup_phase()
const;
374 template<
class Serializer>
378 serializer(m_insert_index);
379 serializer(udq_undefined);
380 serializer(unit_system);
381 serializer(group_type);
383 serializer(use_efficiency_in_network);
384 serializer(satellite_status);
385 serializer(parent_group);
387 serializer(m_groups);
388 serializer(injection_properties);
389 serializer(production_properties);
390 serializer(m_topup_phase);
391 serializer(m_gpmaint);
395 bool hasType(GroupType gtype)
const;
396 void addType(GroupType new_gtype);
398 std::string m_name{};
399 std::size_t m_insert_index{};
400 double udq_undefined{};
401 UnitSystem unit_system{};
402 GroupType group_type{};
404 bool use_efficiency_in_network{};
406 std::uint_least8_t satellite_status{};
408 std::string parent_group{};
409 IOrderSet<std::string> m_wells{};
410 IOrderSet<std::string> m_groups{};
412 std::map<Phase, GroupInjectionProperties> injection_properties{};
414 std::optional<Phase> m_topup_phase{};
415 std::optional<GPMaint> m_gpmaint{};
416 std::optional<std::string> m_choke_group{};
Definition GPMaint.hpp:32