51 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);
117 enum class GuideRateInjTarget {
124 static GuideRateInjTarget GuideRateInjTargetFromString(
const std::string& stringValue );
125 static GuideRateInjTarget GuideRateInjTargetFromInt(
int ecl_id);
126 static int GuideRateInjTargetToInt(GuideRateInjTarget target);
135 Phase phase = Phase::WATER;
136 InjectionCMode cmode = InjectionCMode::NONE;
141 std::optional<std::string> reinj_group;
142 std::optional<std::string> voidage_group;
143 bool available_group_control =
true;
144 double guide_rate = 0;
145 GuideRateInjTarget guide_rate_def = GuideRateInjTarget::NO_GUIDE_RATE;
149 int injection_controls = 0;
153 bool uda_phase()
const;
156 template<
class Serializer>
159 serializer(this->name);
162 serializer(surface_max_rate);
163 serializer(resv_max_rate);
164 serializer(target_reinj_fraction);
165 serializer(target_void_fraction);
166 serializer(reinj_group);
167 serializer(voidage_group);
168 serializer(injection_controls);
169 serializer(available_group_control);
170 serializer(guide_rate);
171 serializer(guide_rate_def);
177 ExceedAction allRates{ExceedAction::NONE};
178 ExceedAction water{ExceedAction::NONE};
179 ExceedAction gas{ExceedAction::NONE};
180 ExceedAction liquid{ExceedAction::NONE};
182 template<
class Serializer>
185 serializer(allRates);
193 return (this->allRates == other.allRates)
194 && (this->water == other.water)
195 && (this->gas == other.gas)
196 && (this->liquid == other.liquid);
203 InjectionCMode cmode;
204 double surface_max_rate;
205 double resv_max_rate;
206 double target_reinj_fraction;
207 double target_void_fraction;
208 int injection_controls = 0;
209 std::string reinj_group;
210 std::string voidage_group;
212 GuideRateInjTarget guide_rate_def = GuideRateInjTarget::NO_GUIDE_RATE;
221 ProductionCMode cmode = ProductionCMode::NONE;
227 double guide_rate = 0;
228 GuideRateProdTarget guide_rate_def = GuideRateProdTarget::NO_GUIDE_RATE;
229 double resv_target = 0;
230 bool available_group_control =
true;
233 int production_controls = 0;
239 template<
class Serializer>
244 serializer(group_limit_action);
245 serializer(oil_target);
246 serializer(water_target);
247 serializer(gas_target);
248 serializer(liquid_target);
249 serializer(guide_rate);
250 serializer(guide_rate_def);
251 serializer(resv_target);
252 serializer(available_group_control);
253 serializer(production_controls);
259 ProductionCMode cmode;
264 double liquid_target;
266 GuideRateProdTarget guide_rate_def = GuideRateProdTarget::NO_GUIDE_RATE;
267 double resv_target = 0;
268 int production_controls = 0;
272 Group(
const std::string& group_name, std::size_t insert_index_arg,
double udq_undefined_arg,
const UnitSystem& unit_system);
275 static Group serializationTestObject();
277 std::size_t insert_index()
const;
278 const std::string& name()
const;
279 bool is_field()
const;
281 bool update_gefac(
double gefac,
bool use_efficiency_in_network);
284 const std::string& parent()
const;
285 std::optional<std::string> control_group()
const;
286 std::optional<std::string> flow_group()
const;
288 bool updateParent(
const std::string& parent);
291 bool isProductionGroup()
const;
292 bool isInjectionGroup()
const;
293 void setProductionGroup();
294 void setInjectionGroup();
295 double getGroupEfficiencyFactor(
bool network =
false)
const;
296 bool useEfficiencyInNetwork()
const;
298 std::size_t numWells()
const;
299 bool addGroup(
const std::string& group_name);
300 bool hasGroup(
const std::string& group_name)
const;
301 void delGroup(
const std::string& group_name);
302 bool addWell(
const std::string& well_name);
303 bool hasWell(
const std::string& well_name)
const;
304 void delWell(
const std::string& well_name);
306 const std::vector<std::string>& wells()
const;
307 const std::vector<std::string>& groups()
const;
308 bool wellgroup()
const;
311 bool hasInjectionControl(Phase phase)
const;
313 const std::map<Phase , GroupInjectionProperties>& injectionProperties()
const;
315 const GroupType& getGroupType()
const;
316 ProductionCMode prod_cmode()
const;
317 InjectionCMode injection_cmode()
const;
318 Phase injection_phase()
const;
319 bool has_control(ProductionCMode control)
const;
320 bool has_control(Phase phase, InjectionCMode control)
const;
321 bool productionGroupControlAvailable()
const;
322 bool injectionGroupControlAvailable(
const Phase phase)
const;
323 const std::optional<GPMaint>& gpmaint()
const;
324 void set_gpmaint(
GPMaint gpmaint);
326 bool has_gpmaint_control(Phase phase, InjectionCMode cmode)
const;
327 bool has_gpmaint_control(ProductionCMode cmode)
const;
328 bool as_choke()
const;
329 void as_choke(
const std::string& group);
331 bool operator==(
const Group& data)
const;
332 const std::optional<Phase>& topup_phase()
const;
334 template<
class Serializer>
338 serializer(m_insert_index);
339 serializer(udq_undefined);
340 serializer(unit_system);
341 serializer(group_type);
343 serializer(use_efficiency_in_network);
344 serializer(parent_group);
346 serializer(m_groups);
347 serializer(injection_properties);
348 serializer(production_properties);
349 serializer(m_topup_phase);
350 serializer(m_gpmaint);
354 bool hasType(GroupType gtype)
const;
355 void addType(GroupType new_gtype);
358 std::size_t m_insert_index;
359 double udq_undefined;
361 GroupType group_type;
363 bool use_efficiency_in_network;
365 std::string parent_group;
369 std::map<Phase, GroupInjectionProperties> injection_properties;
370 GroupProductionProperties production_properties;
371 std::optional<Phase> m_topup_phase;
372 std::optional<GPMaint> m_gpmaint;
373 std::optional<std::string> m_choke_group;
Definition GPMaint.hpp:32