49enum class GroupType :
unsigned {
58enum class ExceedAction {
66static const std::string ExceedAction2String( ExceedAction enumValue );
67static ExceedAction ExceedActionFromString(
const std::string& stringValue );
68static ExceedAction ExceedActionFromInt(
const int value);
70enum class InjectionCMode :
int {
79static const std::string InjectionCMode2String( InjectionCMode enumValue );
80static InjectionCMode InjectionCModeFromString(
const std::string& stringValue );
81static InjectionCMode InjectionCModeFromInt(
int ecl_int);
82static int InjectionCMode2Int(InjectionCMode enumValue);
84enum class ProductionCMode :
int {
95static const std::string ProductionCMode2String( ProductionCMode enumValue );
96static ProductionCMode ProductionCModeFromString(
const std::string& stringValue );
97static ProductionCMode ProductionCModeFromInt(
int ecl_int);
98static int ProductionCMode2Int(Group::ProductionCMode cmode);
100enum class GuideRateProdTarget {
114static GuideRateProdTarget GuideRateProdTargetFromString(
const std::string& stringValue );
115static GuideRateProdTarget GuideRateProdTargetFromInt(
int ecl_id);
118enum class GuideRateInjTarget {
126static GuideRateInjTarget GuideRateInjTargetFromString(
const std::string& stringValue );
127static GuideRateInjTarget GuideRateInjTargetFromInt(
int ecl_id);
128static int GuideRateInjTargetToInt(GuideRateInjTarget target);
137 Phase phase = Phase::WATER;
138 InjectionCMode cmode = InjectionCMode::NONE;
143 std::optional<std::string> reinj_group;
144 std::optional<std::string> voidage_group;
145 bool available_group_control =
true;
146 double guide_rate = 0;
147 GuideRateInjTarget guide_rate_def = GuideRateInjTarget::NO_GUIDE_RATE;
151 int injection_controls = 0;
155 bool uda_phase()
const;
158 template<
class Serializer>
161 serializer(this->name);
164 serializer(surface_max_rate);
165 serializer(resv_max_rate);
166 serializer(target_reinj_fraction);
167 serializer(target_void_fraction);
168 serializer(reinj_group);
169 serializer(voidage_group);
170 serializer(injection_controls);
171 serializer(available_group_control);
172 serializer(guide_rate);
173 serializer(guide_rate_def);
179 ExceedAction allRates{ExceedAction::NONE};
180 ExceedAction water{ExceedAction::NONE};
181 ExceedAction gas{ExceedAction::NONE};
182 ExceedAction liquid{ExceedAction::NONE};
184 template<
class Serializer>
187 serializer(allRates);
195 return (this->allRates == other.allRates)
196 && (this->water == other.water)
197 && (this->gas == other.gas)
198 && (this->liquid == other.liquid);
204 InjectionCMode cmode;
205 double surface_max_rate;
206 double resv_max_rate;
207 double target_reinj_fraction;
208 double target_void_fraction;
209 int injection_controls = 0;
210 std::string reinj_group;
211 std::string voidage_group;
213 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;
273 Group(
const std::string& group_name, std::size_t insert_index_arg,
double udq_undefined_arg,
const UnitSystem& unit_system);
276 static Group serializationTestObject();
278 std::size_t insert_index()
const;
279 const std::string& name()
const;
280 bool is_field()
const;
282 bool update_gefac(
double gefac,
bool transfer_gefac);
285 const std::string& parent()
const;
286 std::optional<std::string> control_group()
const;
287 std::optional<std::string> flow_group()
const;
289 bool updateParent(
const std::string& parent);
292 bool isProductionGroup()
const;
293 bool isInjectionGroup()
const;
294 void setProductionGroup();
295 void setInjectionGroup();
296 double getGroupEfficiencyFactor()
const;
297 bool getTransferGroupEfficiencyFactor()
const;
299 std::size_t numWells()
const;
300 bool addGroup(
const std::string& group_name);
301 bool hasGroup(
const std::string& group_name)
const;
302 void delGroup(
const std::string& group_name);
303 bool addWell(
const std::string& well_name);
304 bool hasWell(
const std::string& well_name)
const;
305 void delWell(
const std::string& well_name);
307 const std::vector<std::string>& wells()
const;
308 const std::vector<std::string>& groups()
const;
309 bool wellgroup()
const;
312 bool hasInjectionControl(Phase phase)
const;
314 const std::map<Phase , GroupInjectionProperties>& injectionProperties()
const;
316 const GroupType& getGroupType()
const;
317 ProductionCMode prod_cmode()
const;
318 InjectionCMode injection_cmode()
const;
319 Phase injection_phase()
const;
320 bool has_control(ProductionCMode control)
const;
321 bool has_control(Phase phase, InjectionCMode control)
const;
322 bool productionGroupControlAvailable()
const;
323 bool injectionGroupControlAvailable(
const Phase phase)
const;
324 const std::optional<GPMaint>& gpmaint()
const;
325 void set_gpmaint(
GPMaint gpmaint);
327 bool has_gpmaint_control(Phase phase, InjectionCMode cmode)
const;
328 bool has_gpmaint_control(ProductionCMode cmode)
const;
330 bool operator==(
const Group& data)
const;
331 const std::optional<Phase>& topup_phase()
const;
333 template<
class Serializer>
337 serializer(m_insert_index);
338 serializer(udq_undefined);
339 serializer(unit_system);
340 serializer(group_type);
342 serializer(transfer_gefac);
343 serializer(parent_group);
345 serializer(m_groups);
346 serializer(injection_properties);
347 serializer(production_properties);
348 serializer(m_topup_phase);
349 serializer(m_gpmaint);
353 bool hasType(GroupType gtype)
const;
354 void addType(GroupType new_gtype);
357 std::size_t m_insert_index;
358 double udq_undefined;
360 GroupType group_type;
364 std::string parent_group;
368 std::map<Phase, GroupInjectionProperties> injection_properties;
369 GroupProductionProperties production_properties;
370 std::optional<Phase> m_topup_phase;
371 std::optional<GPMaint> m_gpmaint;
Definition GPMaint.hpp:31