2019-07-03 10:58:57 +02:00
|
|
|
/*
|
|
|
|
|
Copyright 2019 Equinor ASA.
|
|
|
|
|
|
|
|
|
|
This file is part of the Open Porous Media project (OPM).
|
|
|
|
|
|
|
|
|
|
OPM is free software: you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
|
|
OPM is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
|
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#ifndef GROUP2_HPP
|
|
|
|
|
#define GROUP2_HPP
|
|
|
|
|
|
2021-05-25 22:18:13 +02:00
|
|
|
#include <algorithm>
|
2020-01-14 08:16:46 +01:00
|
|
|
#include <map>
|
2020-03-19 15:30:41 +01:00
|
|
|
#include <optional>
|
|
|
|
|
#include <string>
|
2019-07-03 10:58:57 +02:00
|
|
|
|
2021-12-14 08:06:42 +01:00
|
|
|
#include <opm/input/eclipse/Deck/UDAValue.hpp>
|
|
|
|
|
#include <opm/input/eclipse/EclipseState/Util/IOrderSet.hpp>
|
|
|
|
|
#include <opm/input/eclipse/EclipseState/Runspec.hpp>
|
2021-12-14 08:13:41 +01:00
|
|
|
#include <opm/input/eclipse/Schedule/Group/GPMaint.hpp>
|
2021-12-14 08:06:42 +01:00
|
|
|
#include <opm/input/eclipse/Units/UnitSystem.hpp>
|
2019-07-03 10:58:57 +02:00
|
|
|
|
|
|
|
|
namespace Opm {
|
|
|
|
|
|
2020-10-05 14:04:25 +02:00
|
|
|
namespace RestartIO {
|
2020-10-06 15:54:11 +02:00
|
|
|
struct RstGroup;
|
2020-10-05 14:04:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2019-08-05 17:44:21 +02:00
|
|
|
class SummaryState;
|
2020-05-14 17:49:26 +02:00
|
|
|
class UDQConfig;
|
|
|
|
|
class UDQActive;
|
2019-11-12 08:29:28 +01:00
|
|
|
class Group {
|
2019-07-03 10:58:57 +02:00
|
|
|
public:
|
|
|
|
|
|
2019-09-02 10:07:20 +02:00
|
|
|
// A group can have both injection controls and production controls set at
|
|
|
|
|
// the same time, i.e. this enum is used as a bitmask.
|
|
|
|
|
enum class GroupType : unsigned {
|
|
|
|
|
NONE = 0,
|
|
|
|
|
PRODUCTION = 1,
|
|
|
|
|
INJECTION = 2,
|
|
|
|
|
MIXED = 3
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-09-02 08:28:36 +02:00
|
|
|
enum class ExceedAction {
|
|
|
|
|
NONE = 0,
|
|
|
|
|
CON = 1,
|
|
|
|
|
CON_PLUS = 2, // String: "+CON"
|
|
|
|
|
WELL = 3,
|
|
|
|
|
PLUG = 4,
|
|
|
|
|
RATE = 5
|
|
|
|
|
};
|
|
|
|
|
static const std::string ExceedAction2String( ExceedAction enumValue );
|
|
|
|
|
static ExceedAction ExceedActionFromString( const std::string& stringValue );
|
2021-10-06 14:31:04 +02:00
|
|
|
static ExceedAction ExceedActionFromInt(const int value);
|
2019-09-02 08:28:36 +02:00
|
|
|
|
2019-09-02 09:54:50 +02:00
|
|
|
enum class InjectionCMode : int {
|
|
|
|
|
NONE = 0,
|
|
|
|
|
RATE = 1,
|
|
|
|
|
RESV = 2,
|
|
|
|
|
REIN = 4,
|
|
|
|
|
VREP = 8,
|
2019-11-26 08:52:04 +01:00
|
|
|
FLD = 16,
|
|
|
|
|
SALE = 32
|
2019-09-02 09:54:50 +02:00
|
|
|
};
|
|
|
|
|
static const std::string InjectionCMode2String( InjectionCMode enumValue );
|
|
|
|
|
static InjectionCMode InjectionCModeFromString( const std::string& stringValue );
|
2020-10-20 08:34:27 +02:00
|
|
|
static InjectionCMode InjectionCModeFromInt(int ecl_int);
|
2021-06-16 08:49:54 +02:00
|
|
|
static int InjectionCMode2Int(InjectionCMode enumValue);
|
2019-09-02 13:09:42 +02:00
|
|
|
|
2019-09-02 10:49:23 +02:00
|
|
|
enum class ProductionCMode : int {
|
|
|
|
|
NONE = 0,
|
|
|
|
|
ORAT = 1,
|
|
|
|
|
WRAT = 2,
|
|
|
|
|
GRAT = 4,
|
|
|
|
|
LRAT = 8,
|
|
|
|
|
CRAT = 16,
|
|
|
|
|
RESV = 32,
|
|
|
|
|
PRBL = 64,
|
|
|
|
|
FLD = 128
|
|
|
|
|
};
|
|
|
|
|
static const std::string ProductionCMode2String( ProductionCMode enumValue );
|
|
|
|
|
static ProductionCMode ProductionCModeFromString( const std::string& stringValue );
|
2020-10-20 08:34:27 +02:00
|
|
|
static ProductionCMode ProductionCModeFromInt(int ecl_int);
|
2021-06-16 08:29:14 +02:00
|
|
|
static int ProductionCMode2Int(Group::ProductionCMode cmode);
|
2019-09-02 13:09:42 +02:00
|
|
|
|
2021-03-09 20:01:49 +01:00
|
|
|
enum class GuideRateProdTarget {
|
2019-09-02 13:09:42 +02:00
|
|
|
OIL = 0,
|
|
|
|
|
WAT = 1,
|
|
|
|
|
GAS = 2,
|
|
|
|
|
LIQ = 3,
|
2019-09-30 12:30:22 +02:00
|
|
|
RES = 4,
|
|
|
|
|
COMB = 5,
|
|
|
|
|
WGA = 6,
|
|
|
|
|
CVAL = 7,
|
|
|
|
|
INJV = 8,
|
|
|
|
|
POTN = 9,
|
|
|
|
|
FORM = 10,
|
|
|
|
|
NO_GUIDE_RATE = 11
|
2019-09-02 13:09:42 +02:00
|
|
|
};
|
2021-03-09 20:01:49 +01:00
|
|
|
static GuideRateProdTarget GuideRateProdTargetFromString( const std::string& stringValue );
|
|
|
|
|
static GuideRateProdTarget GuideRateProdTargetFromInt(int ecl_id);
|
2019-09-02 13:09:42 +02:00
|
|
|
|
|
|
|
|
|
2021-03-09 19:47:39 +01:00
|
|
|
enum class GuideRateInjTarget {
|
|
|
|
|
RATE = 1,
|
|
|
|
|
VOID = 2,
|
|
|
|
|
NETV = 3,
|
|
|
|
|
RESV = 4,
|
|
|
|
|
POTN = 5,
|
|
|
|
|
NO_GUIDE_RATE = 6
|
|
|
|
|
};
|
|
|
|
|
static GuideRateInjTarget GuideRateInjTargetFromString( const std::string& stringValue );
|
|
|
|
|
static GuideRateInjTarget GuideRateInjTargetFromInt(int ecl_id);
|
2021-12-08 13:32:33 +01:00
|
|
|
static int GuideRateInjTargetToInt(GuideRateInjTarget target);
|
2021-03-09 19:47:39 +01:00
|
|
|
|
|
|
|
|
|
2019-07-24 08:38:39 +02:00
|
|
|
struct GroupInjectionProperties {
|
2021-05-25 22:18:13 +02:00
|
|
|
GroupInjectionProperties() = default;
|
|
|
|
|
explicit GroupInjectionProperties(std::string group_name_arg);
|
|
|
|
|
GroupInjectionProperties(std::string group_name_arg, Phase phase, const UnitSystem& unit_system);
|
2020-10-29 15:39:46 +01:00
|
|
|
|
2021-08-25 15:04:45 +02:00
|
|
|
std::string name{};
|
2019-07-24 08:38:39 +02:00
|
|
|
Phase phase = Phase::WATER;
|
2019-09-02 09:54:50 +02:00
|
|
|
InjectionCMode cmode = InjectionCMode::NONE;
|
2019-08-05 17:44:21 +02:00
|
|
|
UDAValue surface_max_rate;
|
|
|
|
|
UDAValue resv_max_rate;
|
|
|
|
|
UDAValue target_reinj_fraction;
|
|
|
|
|
UDAValue target_void_fraction;
|
2020-10-19 17:06:04 +02:00
|
|
|
std::optional<std::string> reinj_group;
|
|
|
|
|
std::optional<std::string> voidage_group;
|
2020-06-17 14:32:15 +02:00
|
|
|
bool available_group_control = true;
|
2021-03-09 19:47:39 +01:00
|
|
|
double guide_rate = 0;
|
|
|
|
|
GuideRateInjTarget guide_rate_def = GuideRateInjTarget::NO_GUIDE_RATE;
|
2019-07-24 08:38:39 +02:00
|
|
|
|
2020-03-19 15:21:20 +01:00
|
|
|
static GroupInjectionProperties serializeObject();
|
|
|
|
|
|
2019-08-08 18:39:13 +02:00
|
|
|
int injection_controls = 0;
|
2019-07-24 08:38:39 +02:00
|
|
|
bool operator==(const GroupInjectionProperties& other) const;
|
|
|
|
|
bool operator!=(const GroupInjectionProperties& other) const;
|
2021-05-25 22:35:35 +02:00
|
|
|
bool updateUDQActive(const UDQConfig& udq_config, UDQActive& active) const;
|
2021-08-27 11:55:24 +02:00
|
|
|
bool uda_phase() const;
|
2021-08-25 15:04:45 +02:00
|
|
|
void update_uda(const UDQConfig& udq_config, UDQActive& udq_active, UDAControl control, const UDAValue& value);
|
2020-03-18 13:35:00 +01:00
|
|
|
|
|
|
|
|
template<class Serializer>
|
|
|
|
|
void serializeOp(Serializer& serializer)
|
|
|
|
|
{
|
2021-08-25 15:04:45 +02:00
|
|
|
serializer(this->name);
|
2020-03-18 13:35:00 +01:00
|
|
|
serializer(phase);
|
|
|
|
|
serializer(cmode);
|
2022-09-08 11:33:07 +02:00
|
|
|
serializer(surface_max_rate);
|
|
|
|
|
serializer(resv_max_rate);
|
|
|
|
|
serializer(target_reinj_fraction);
|
|
|
|
|
serializer(target_void_fraction);
|
2020-03-18 13:35:00 +01:00
|
|
|
serializer(reinj_group);
|
|
|
|
|
serializer(voidage_group);
|
|
|
|
|
serializer(injection_controls);
|
2020-04-16 12:31:14 +02:00
|
|
|
serializer(available_group_control);
|
2021-03-09 19:47:39 +01:00
|
|
|
serializer(guide_rate);
|
|
|
|
|
serializer(guide_rate_def);
|
2020-03-18 13:35:00 +01:00
|
|
|
}
|
2019-07-24 08:38:39 +02:00
|
|
|
};
|
|
|
|
|
|
2019-08-05 17:44:21 +02:00
|
|
|
struct InjectionControls {
|
|
|
|
|
Phase phase;
|
2019-09-02 09:54:50 +02:00
|
|
|
InjectionCMode cmode;
|
2019-08-05 17:44:21 +02:00
|
|
|
double surface_max_rate;
|
|
|
|
|
double resv_max_rate;
|
|
|
|
|
double target_reinj_fraction;
|
|
|
|
|
double target_void_fraction;
|
2019-08-08 18:39:13 +02:00
|
|
|
int injection_controls = 0;
|
2019-11-01 12:46:16 +01:00
|
|
|
std::string reinj_group;
|
|
|
|
|
std::string voidage_group;
|
2021-03-09 19:47:39 +01:00
|
|
|
double guide_rate;
|
|
|
|
|
GuideRateInjTarget guide_rate_def = GuideRateInjTarget::NO_GUIDE_RATE;
|
2019-08-05 17:44:21 +02:00
|
|
|
};
|
2019-07-24 08:38:39 +02:00
|
|
|
|
|
|
|
|
struct GroupProductionProperties {
|
2020-10-29 15:39:46 +01:00
|
|
|
GroupProductionProperties();
|
|
|
|
|
GroupProductionProperties(const UnitSystem& unit_system, const std::string& gname);
|
2020-05-14 17:49:26 +02:00
|
|
|
|
|
|
|
|
std::string name;
|
2021-03-30 16:37:35 +02:00
|
|
|
ProductionCMode cmode = ProductionCMode::NONE;
|
2019-09-02 08:28:36 +02:00
|
|
|
ExceedAction exceed_action = ExceedAction::NONE;
|
2019-08-05 17:44:21 +02:00
|
|
|
UDAValue oil_target;
|
|
|
|
|
UDAValue water_target;
|
|
|
|
|
UDAValue gas_target;
|
|
|
|
|
UDAValue liquid_target;
|
2020-09-30 16:02:20 +02:00
|
|
|
double guide_rate = 0;
|
2021-03-09 20:01:49 +01:00
|
|
|
GuideRateProdTarget guide_rate_def = GuideRateProdTarget::NO_GUIDE_RATE;
|
2019-07-24 08:38:39 +02:00
|
|
|
double resv_target = 0;
|
2020-04-16 12:31:14 +02:00
|
|
|
bool available_group_control = true;
|
2020-03-19 15:21:20 +01:00
|
|
|
static GroupProductionProperties serializeObject();
|
|
|
|
|
|
2019-08-08 18:39:13 +02:00
|
|
|
int production_controls = 0;
|
2019-07-24 08:38:39 +02:00
|
|
|
bool operator==(const GroupProductionProperties& other) const;
|
|
|
|
|
bool operator!=(const GroupProductionProperties& other) const;
|
2020-05-14 17:49:26 +02:00
|
|
|
bool updateUDQActive(const UDQConfig& udq_config, UDQActive& active) const;
|
2021-08-25 15:04:45 +02:00
|
|
|
void update_uda(const UDQConfig& udq_config, UDQActive& udq_active, UDAControl control, const UDAValue& value);
|
2020-03-18 13:35:00 +01:00
|
|
|
|
|
|
|
|
template<class Serializer>
|
|
|
|
|
void serializeOp(Serializer& serializer)
|
|
|
|
|
{
|
2020-05-14 17:49:26 +02:00
|
|
|
serializer(name);
|
2021-03-30 16:37:35 +02:00
|
|
|
serializer(cmode);
|
2020-03-18 13:35:00 +01:00
|
|
|
serializer(exceed_action);
|
2022-09-08 11:33:07 +02:00
|
|
|
serializer(oil_target);
|
|
|
|
|
serializer(water_target);
|
|
|
|
|
serializer(gas_target);
|
|
|
|
|
serializer(liquid_target);
|
2020-03-18 13:35:00 +01:00
|
|
|
serializer(guide_rate);
|
|
|
|
|
serializer(guide_rate_def);
|
|
|
|
|
serializer(resv_target);
|
2020-04-16 12:31:14 +02:00
|
|
|
serializer(available_group_control);
|
2020-03-18 13:35:00 +01:00
|
|
|
serializer(production_controls);
|
|
|
|
|
}
|
2019-07-24 08:38:39 +02:00
|
|
|
};
|
|
|
|
|
|
2020-04-16 12:31:14 +02:00
|
|
|
|
2019-08-05 17:44:21 +02:00
|
|
|
struct ProductionControls {
|
2019-09-02 10:49:23 +02:00
|
|
|
ProductionCMode cmode;
|
2019-09-02 08:28:36 +02:00
|
|
|
ExceedAction exceed_action;
|
2019-08-05 17:44:21 +02:00
|
|
|
double oil_target;
|
|
|
|
|
double water_target;
|
|
|
|
|
double gas_target;
|
|
|
|
|
double liquid_target;
|
2019-08-19 10:47:22 +02:00
|
|
|
double guide_rate;
|
2021-03-09 20:01:49 +01:00
|
|
|
GuideRateProdTarget guide_rate_def = GuideRateProdTarget::NO_GUIDE_RATE;
|
2019-08-05 17:44:21 +02:00
|
|
|
double resv_target = 0;
|
2019-08-08 18:39:13 +02:00
|
|
|
int production_controls = 0;
|
2019-08-05 17:44:21 +02:00
|
|
|
};
|
|
|
|
|
|
2019-09-02 08:28:36 +02:00
|
|
|
|
2019-12-12 11:12:46 +01:00
|
|
|
Group();
|
2021-01-18 12:19:54 +01:00
|
|
|
Group(const std::string& group_name, std::size_t insert_index_arg, double udq_undefined_arg, const UnitSystem& unit_system);
|
|
|
|
|
Group(const RestartIO::RstGroup& rst_group, std::size_t insert_index_arg, double udq_undefined_arg, const UnitSystem& unit_system);
|
2019-12-12 11:12:46 +01:00
|
|
|
|
2020-03-19 15:21:20 +01:00
|
|
|
static Group serializeObject();
|
2019-07-24 08:38:39 +02:00
|
|
|
|
|
|
|
|
std::size_t insert_index() const;
|
|
|
|
|
const std::string& name() const;
|
2020-11-05 09:43:26 +01:00
|
|
|
bool is_field() const;
|
2019-07-24 08:38:39 +02:00
|
|
|
int getGroupNetVFPTable() const;
|
2019-12-12 11:12:46 +01:00
|
|
|
|
2019-07-24 08:38:39 +02:00
|
|
|
bool updateNetVFPTable(int vfp_arg);
|
|
|
|
|
bool update_gefac(double gefac, bool transfer_gefac);
|
2019-07-25 11:46:15 +02:00
|
|
|
|
2020-03-06 13:44:56 +01:00
|
|
|
// [[deprecated("use Group::control_group() or Group::flow_group()")]]
|
2019-07-25 11:46:15 +02:00
|
|
|
const std::string& parent() const;
|
2020-03-19 15:30:41 +01:00
|
|
|
std::optional<std::string> control_group() const;
|
|
|
|
|
std::optional<std::string> flow_group() const;
|
2020-03-06 13:44:56 +01:00
|
|
|
|
2019-07-25 11:46:15 +02:00
|
|
|
bool updateParent(const std::string& parent);
|
2019-07-24 08:38:39 +02:00
|
|
|
bool updateInjection(const GroupInjectionProperties& injection);
|
|
|
|
|
bool updateProduction(const GroupProductionProperties& production);
|
|
|
|
|
bool isProductionGroup() const;
|
|
|
|
|
bool isInjectionGroup() const;
|
|
|
|
|
void setProductionGroup();
|
|
|
|
|
void setInjectionGroup();
|
|
|
|
|
double getGroupEfficiencyFactor() const;
|
|
|
|
|
bool getTransferGroupEfficiencyFactor() const;
|
|
|
|
|
|
|
|
|
|
std::size_t numWells() const;
|
|
|
|
|
bool addGroup(const std::string& group_name);
|
|
|
|
|
bool hasGroup(const std::string& group_name) const;
|
|
|
|
|
void delGroup(const std::string& group_name);
|
|
|
|
|
bool addWell(const std::string& well_name);
|
|
|
|
|
bool hasWell(const std::string& well_name) const;
|
|
|
|
|
void delWell(const std::string& well_name);
|
|
|
|
|
|
|
|
|
|
const std::vector<std::string>& wells() const;
|
|
|
|
|
const std::vector<std::string>& groups() const;
|
2019-07-30 17:47:19 +02:00
|
|
|
bool wellgroup() const;
|
2019-08-05 17:44:21 +02:00
|
|
|
ProductionControls productionControls(const SummaryState& st) const;
|
2020-01-14 08:16:46 +01:00
|
|
|
InjectionControls injectionControls(Phase phase, const SummaryState& st) const;
|
|
|
|
|
bool hasInjectionControl(Phase phase) const;
|
2019-09-06 07:56:42 +02:00
|
|
|
const GroupProductionProperties& productionProperties() const;
|
2020-01-23 09:04:42 +01:00
|
|
|
const std::map<Phase , GroupInjectionProperties>& injectionProperties() const;
|
2021-08-26 17:22:55 +02:00
|
|
|
const GroupInjectionProperties& injectionProperties(Phase phase) const;
|
2019-10-16 15:47:03 +02:00
|
|
|
const GroupType& getGroupType() const;
|
2021-03-30 16:37:35 +02:00
|
|
|
ProductionCMode prod_cmode() const;
|
2019-09-02 09:54:50 +02:00
|
|
|
InjectionCMode injection_cmode() const;
|
2019-08-08 17:28:34 +02:00
|
|
|
Phase injection_phase() const;
|
2019-09-02 10:49:23 +02:00
|
|
|
bool has_control(ProductionCMode control) const;
|
2021-09-02 14:31:10 +02:00
|
|
|
bool has_control(Phase phase, InjectionCMode control) const;
|
2020-04-16 12:31:14 +02:00
|
|
|
bool productionGroupControlAvailable() const;
|
|
|
|
|
bool injectionGroupControlAvailable(const Phase phase) const;
|
2020-05-26 13:29:01 +02:00
|
|
|
const std::optional<GPMaint>& gpmaint() const;
|
|
|
|
|
void set_gpmaint(GPMaint gpmaint);
|
|
|
|
|
void set_gpmaint();
|
2021-09-02 17:23:09 +02:00
|
|
|
bool has_gpmaint_control(Phase phase, InjectionCMode cmode) const;
|
|
|
|
|
bool has_gpmaint_control(ProductionCMode cmode) const;
|
2019-12-12 11:12:46 +01:00
|
|
|
|
|
|
|
|
bool operator==(const Group& data) const;
|
2021-04-14 11:27:02 +02:00
|
|
|
const std::optional<Phase>& topup_phase() const;
|
2019-12-12 11:12:46 +01:00
|
|
|
|
2020-03-18 13:39:57 +01:00
|
|
|
template<class Serializer>
|
|
|
|
|
void serializeOp(Serializer& serializer)
|
|
|
|
|
{
|
|
|
|
|
serializer(m_name);
|
|
|
|
|
serializer(m_insert_index);
|
|
|
|
|
serializer(udq_undefined);
|
2022-09-08 11:33:07 +02:00
|
|
|
serializer(unit_system);
|
2020-03-18 13:39:57 +01:00
|
|
|
serializer(group_type);
|
|
|
|
|
serializer(gefac);
|
|
|
|
|
serializer(transfer_gefac);
|
|
|
|
|
serializer(vfp_table);
|
|
|
|
|
serializer(parent_group);
|
2022-09-08 11:33:07 +02:00
|
|
|
serializer(m_wells);
|
|
|
|
|
serializer(m_groups);
|
|
|
|
|
serializer(injection_properties);
|
|
|
|
|
serializer(production_properties);
|
2020-03-18 13:39:57 +01:00
|
|
|
serializer(m_topup_phase);
|
2020-05-26 13:29:01 +02:00
|
|
|
serializer(m_gpmaint);
|
2020-03-18 13:39:57 +01:00
|
|
|
}
|
|
|
|
|
|
2019-07-03 10:58:57 +02:00
|
|
|
private:
|
2019-07-24 08:38:39 +02:00
|
|
|
bool hasType(GroupType gtype) const;
|
|
|
|
|
void addType(GroupType new_gtype);
|
|
|
|
|
|
|
|
|
|
std::string m_name;
|
|
|
|
|
std::size_t m_insert_index;
|
2019-08-05 17:44:21 +02:00
|
|
|
double udq_undefined;
|
2019-08-05 18:37:01 +02:00
|
|
|
UnitSystem unit_system;
|
2019-07-24 08:38:39 +02:00
|
|
|
GroupType group_type;
|
|
|
|
|
double gefac;
|
|
|
|
|
bool transfer_gefac;
|
|
|
|
|
int vfp_table;
|
|
|
|
|
|
2019-07-25 11:46:15 +02:00
|
|
|
std::string parent_group;
|
2019-07-24 08:38:39 +02:00
|
|
|
IOrderSet<std::string> m_wells;
|
|
|
|
|
IOrderSet<std::string> m_groups;
|
|
|
|
|
|
2020-01-14 08:16:46 +01:00
|
|
|
std::map<Phase, GroupInjectionProperties> injection_properties;
|
2020-05-14 17:49:26 +02:00
|
|
|
GroupProductionProperties production_properties;
|
2021-04-03 11:33:33 +02:00
|
|
|
std::optional<Phase> m_topup_phase;
|
2020-05-26 13:29:01 +02:00
|
|
|
std::optional<GPMaint> m_gpmaint;
|
2019-07-03 10:58:57 +02:00
|
|
|
};
|
|
|
|
|
|
2019-11-12 08:29:28 +01:00
|
|
|
Group::GroupType operator |(Group::GroupType lhs, Group::GroupType rhs);
|
|
|
|
|
Group::GroupType operator &(Group::GroupType lhs, Group::GroupType rhs);
|
2019-09-02 10:07:20 +02:00
|
|
|
|
2019-07-03 10:58:57 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|