23 #include <opm/input/eclipse/EclipseState/Phase.hpp> 24 #include <opm/input/eclipse/EclipseState/Util/IOrderSet.hpp> 26 #include <opm/input/eclipse/Schedule/Group/GPMaint.hpp> 28 #include <opm/input/eclipse/Deck/UDAValue.hpp> 30 #include <opm/input/eclipse/Units/UnitSystem.hpp> 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);
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;
152 int injection_controls = 0;
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;
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;
240 int production_controls = 0;
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();
319 double getGroupEfficiencyFactor(
bool network =
false)
const;
320 bool useEfficiencyInNetwork()
const;
348 std::size_t numWells()
const;
349 bool addGroup(
const std::string& group_name);
350 bool hasGroup(
const std::string& group_name)
const;
351 void delGroup(
const std::string& group_name);
352 bool addWell(
const std::string& well_name);
353 bool hasWell(
const std::string& well_name)
const;
354 void delWell(
const std::string& well_name);
356 const std::vector<std::string>& wells()
const;
357 const std::vector<std::string>& groups()
const;
358 bool wellgroup()
const;
359 ProductionControls productionControls(
const SummaryState& st)
const;
360 InjectionControls injectionControls(Phase phase,
const SummaryState& st)
const;
361 bool hasInjectionControl(Phase phase)
const;
362 const GroupProductionProperties& productionProperties()
const;
363 const std::map<Phase , GroupInjectionProperties>& injectionProperties()
const;
364 const GroupInjectionProperties& injectionProperties(Phase phase)
const;
365 const GroupType& getGroupType()
const;
366 ProductionCMode prod_cmode()
const;
367 InjectionCMode injection_cmode()
const;
368 Phase injection_phase()
const;
369 bool has_control(ProductionCMode control)
const;
370 bool has_control(Phase phase, InjectionCMode control)
const;
371 bool productionGroupControlAvailable()
const;
372 bool injectionGroupControlAvailable(
const Phase phase)
const;
373 const std::optional<GPMaint>& gpmaint()
const;
374 void set_gpmaint(
GPMaint gpmaint);
376 bool has_gpmaint_control(Phase phase, InjectionCMode cmode)
const;
377 bool has_gpmaint_control(ProductionCMode cmode)
const;
378 bool as_choke()
const;
379 void as_choke(
const std::string& group);
381 bool operator==(
const Group& data)
const;
382 const std::optional<Phase>& topup_phase()
const;
384 template<
class Serializer>
388 serializer(m_insert_index);
389 serializer(udq_undefined);
390 serializer(unit_system);
391 serializer(group_type);
393 serializer(use_efficiency_in_network);
394 serializer(satellite_status);
395 serializer(parent_group);
397 serializer(m_groups);
398 serializer(injection_properties);
399 serializer(production_properties);
400 serializer(m_topup_phase);
401 serializer(m_gpmaint);
402 serializer(m_is_slave_production_group);
403 serializer(m_is_slave_injection_group);
407 bool hasType(GroupType gtype)
const;
408 void addType(GroupType new_gtype);
410 std::string m_name{};
411 std::size_t m_insert_index{};
412 double udq_undefined{};
413 UnitSystem unit_system{};
414 GroupType group_type{};
416 bool use_efficiency_in_network{};
418 std::uint_least8_t satellite_status{};
420 std::string parent_group{};
421 IOrderSet<std::string> m_wells{};
422 IOrderSet<std::string> m_groups{};
424 std::map<Phase, GroupInjectionProperties> injection_properties{};
425 GroupProductionProperties production_properties{};
426 std::optional<Phase> m_topup_phase{};
427 std::optional<GPMaint> m_gpmaint{};
428 std::optional<std::string> m_choke_group{};
433 bool m_is_slave_production_group{
false};
434 bool m_is_slave_injection_group{
false};
437 Group::GroupType operator |(Group::GroupType lhs, Group::GroupType rhs);
438 Group::GroupType operator &(Group::GroupType lhs, Group::GroupType rhs);
442 #endif // OPM_GROUP_HPP Collection of all user-defined quantities in the current simulation run.
Definition: UDQConfig.hpp:68
Definition: Group.hpp:207
Definition: UDAValue.hpp:31
bool hasSatelliteProduction() const
Predicate for whether or not this group is tagged as a satellite producer.
Definition: Group.cpp:933
Definition: GPMaint.hpp:31
void setSlaveProductionGroup()
Mark this group as a reservoir coupling slave group that receives production targets from the master...
Definition: Group.hpp:313
Definition: Group.hpp:222
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30
Definition: Group.hpp:264
Definition: Group.hpp:131
Definition: Group.hpp:178
void recordSatelliteProduction()
Tag current group as being one with satellite production.
Definition: Group.cpp:926
Internalised representation of all UDAs in a simulation run.
Definition: UDQActive.hpp:49
bool hasSatelliteInjection() const
Predicate for whether or not this group is tagged as a satellite injector.
Definition: Group.cpp:946
Definition: UnitSystem.hpp:34
Definition: SummaryState.hpp:72
void recordSatelliteInjection()
Tag current group as being one with satellite injection.
Definition: Group.cpp:939
Definition: Aquancon.hpp:40
void setSlaveInjectionGroup()
Mark this group as a reservoir coupling slave group that receives injection targets from the master...
Definition: Group.hpp:318
Class for (de-)serializing.
Definition: Serializer.hpp:95