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 {
125 static GuideRateInjTarget GuideRateInjTargetFromString(
const std::string& stringValue );
126 static GuideRateInjTarget GuideRateInjTargetFromInt(
int ecl_id);
127 static int GuideRateInjTargetToInt(GuideRateInjTarget target);
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 serializer(surface_max_rate);
164 serializer(resv_max_rate);
165 serializer(target_reinj_fraction);
166 serializer(target_void_fraction);
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 ExceedAction allRates{ExceedAction::NONE};
179 ExceedAction water{ExceedAction::NONE};
180 ExceedAction gas{ExceedAction::NONE};
181 ExceedAction liquid{ExceedAction::NONE};
183 template<
class Serializer>
186 serializer(allRates);
194 return (this->allRates == other.allRates)
195 && (this->water == other.water)
196 && (this->gas == other.gas)
197 && (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;
222 ProductionCMode cmode = ProductionCMode::NONE;
228 double guide_rate = 0;
229 GuideRateProdTarget guide_rate_def = GuideRateProdTarget::NO_GUIDE_RATE;
230 double resv_target = 0;
231 bool available_group_control =
true;
234 int production_controls = 0;
240 template<
class Serializer>
245 serializer(group_limit_action);
246 serializer(oil_target);
247 serializer(water_target);
248 serializer(gas_target);
249 serializer(liquid_target);
250 serializer(guide_rate);
251 serializer(guide_rate_def);
252 serializer(resv_target);
253 serializer(available_group_control);
254 serializer(production_controls);
260 ProductionCMode cmode;
265 double liquid_target;
267 GuideRateProdTarget guide_rate_def = GuideRateProdTarget::NO_GUIDE_RATE;
268 double resv_target = 0;
269 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