28 #include <opm/input/eclipse/Deck/UDAValue.hpp>
29 #include <opm/input/eclipse/EclipseState/Util/IOrderSet.hpp>
30 #include <opm/input/eclipse/EclipseState/Runspec.hpp>
31 #include <opm/input/eclipse/Schedule/Group/GPMaint.hpp>
32 #include <opm/input/eclipse/Units/UnitSystem.hpp>
49 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);
118 enum class GuideRateInjTarget {
126 static GuideRateInjTarget GuideRateInjTargetFromString(
const std::string& stringValue );
127 static GuideRateInjTarget GuideRateInjTargetFromInt(
int ecl_id);
128 static 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 surface_max_rate.serializeOp(serializer);
165 resv_max_rate.serializeOp(serializer);
166 target_reinj_fraction.serializeOp(serializer);
167 target_void_fraction.serializeOp(serializer);
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 InjectionCMode cmode;
180 double surface_max_rate;
181 double resv_max_rate;
182 double target_reinj_fraction;
183 double target_void_fraction;
184 int injection_controls = 0;
185 std::string reinj_group;
186 std::string voidage_group;
188 GuideRateInjTarget guide_rate_def = GuideRateInjTarget::NO_GUIDE_RATE;
196 ProductionCMode cmode = ProductionCMode::NONE;
197 ExceedAction exceed_action = ExceedAction::NONE;
202 double guide_rate = 0;
203 GuideRateProdTarget guide_rate_def = GuideRateProdTarget::NO_GUIDE_RATE;
204 double resv_target = 0;
205 bool available_group_control =
true;
208 int production_controls = 0;
214 template<
class Serializer>
219 serializer(exceed_action);
220 oil_target.serializeOp(serializer);
221 water_target.serializeOp(serializer);
222 gas_target.serializeOp(serializer);
223 liquid_target.serializeOp(serializer);
224 serializer(guide_rate);
225 serializer(guide_rate_def);
226 serializer(resv_target);
227 serializer(available_group_control);
228 serializer(production_controls);
234 ProductionCMode cmode;
235 ExceedAction exceed_action;
239 double liquid_target;
241 GuideRateProdTarget guide_rate_def = GuideRateProdTarget::NO_GUIDE_RATE;
242 double resv_target = 0;
243 int production_controls = 0;
248 Group(
const std::string& group_name, std::size_t insert_index_arg,
double udq_undefined_arg,
const UnitSystem& unit_system);
251 static Group serializeObject();
253 std::size_t insert_index()
const;
254 const std::string& name()
const;
255 bool is_field()
const;
256 int getGroupNetVFPTable()
const;
258 bool updateNetVFPTable(
int vfp_arg);
259 bool update_gefac(
double gefac,
bool transfer_gefac);
262 const std::string& parent()
const;
263 std::optional<std::string> control_group()
const;
264 std::optional<std::string> flow_group()
const;
266 bool updateParent(
const std::string& parent);
269 bool isProductionGroup()
const;
270 bool isInjectionGroup()
const;
271 void setProductionGroup();
272 void setInjectionGroup();
273 double getGroupEfficiencyFactor()
const;
274 bool getTransferGroupEfficiencyFactor()
const;
276 std::size_t numWells()
const;
277 bool addGroup(
const std::string& group_name);
278 bool hasGroup(
const std::string& group_name)
const;
279 void delGroup(
const std::string& group_name);
280 bool addWell(
const std::string& well_name);
281 bool hasWell(
const std::string& well_name)
const;
282 void delWell(
const std::string& well_name);
284 const std::vector<std::string>& wells()
const;
285 const std::vector<std::string>& groups()
const;
286 bool wellgroup()
const;
289 bool hasInjectionControl(Phase phase)
const;
291 const std::map<Phase , GroupInjectionProperties>& injectionProperties()
const;
293 const GroupType& getGroupType()
const;
294 ProductionCMode prod_cmode()
const;
295 InjectionCMode injection_cmode()
const;
296 Phase injection_phase()
const;
297 bool has_control(ProductionCMode control)
const;
298 bool has_control(Phase phase, InjectionCMode control)
const;
299 bool productionGroupControlAvailable()
const;
300 bool injectionGroupControlAvailable(
const Phase phase)
const;
301 const std::optional<GPMaint>& gpmaint()
const;
302 void set_gpmaint(
GPMaint gpmaint);
304 bool has_gpmaint_control(Phase phase, InjectionCMode cmode)
const;
305 bool has_gpmaint_control(ProductionCMode cmode)
const;
307 bool operator==(
const Group& data)
const;
308 const std::optional<Phase>& topup_phase()
const;
310 template<
class Serializer>
314 serializer(m_insert_index);
315 serializer(udq_undefined);
316 unit_system.serializeOp(serializer);
317 serializer(group_type);
319 serializer(transfer_gefac);
320 serializer(vfp_table);
321 serializer(parent_group);
322 m_wells.serializeOp(serializer);
323 m_groups.serializeOp(serializer);
324 serializer.map(injection_properties);
325 production_properties.serializeOp(serializer);
326 serializer(m_topup_phase);
327 serializer(m_gpmaint);
331 bool hasType(GroupType gtype)
const;
332 void addType(GroupType new_gtype);
335 std::size_t m_insert_index;
336 double udq_undefined;
338 GroupType group_type;
343 std::string parent_group;
347 std::map<Phase, GroupInjectionProperties> injection_properties;
348 GroupProductionProperties production_properties;
349 std::optional<Phase> m_topup_phase;
350 std::optional<GPMaint> m_gpmaint;
353 Group::GroupType operator |(Group::GroupType lhs, Group::GroupType rhs);
354 Group::GroupType operator &(Group::GroupType lhs, Group::GroupType rhs);
Definition: GPMaint.hpp:30
Definition: Serializer.hpp:38
Definition: SummaryState.hpp:69
Definition: UDAValue.hpp:32
Definition: UDQActive.hpp:43
Definition: UDQConfig.hpp:51
Definition: UnitSystem.hpp:34
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:29
Definition: Group.hpp:131
Definition: Group.hpp:191
Definition: Group.hpp:177
Definition: Group.hpp:233