Evaluate UDA variuables for group rates

This commit is contained in:
Joakim Hove
2019-08-05 17:44:21 +02:00
parent 93b53df02a
commit 6016cd43b3
9 changed files with 128 additions and 45 deletions

View File

@@ -23,6 +23,7 @@
#include <string>
#include <opm/parser/eclipse/Deck/UDAValue.hpp>
#include <opm/parser/eclipse/EclipseState/Util/IOrderSet.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/ScheduleEnums.hpp>
#include <opm/parser/eclipse/EclipseState/Runspec.hpp>
@@ -30,42 +31,59 @@
namespace Opm {
class SummaryState;
class Group2 {
public:
struct GroupInjectionProperties {
Phase phase = Phase::WATER;
GroupInjection::ControlEnum cmode = GroupInjection::NONE;
double surface_max_rate = 0;
double resv_max_rate = 0;
double target_reinj_fraction = 0;
double target_void_fraction = 0;
UDAValue surface_max_rate;
UDAValue resv_max_rate;
UDAValue target_reinj_fraction;
UDAValue target_void_fraction;
bool operator==(const GroupInjectionProperties& other) const;
bool operator!=(const GroupInjectionProperties& other) const;
};
struct InjectionControls {
Phase phase;
GroupInjection::ControlEnum cmode;
double surface_max_rate;
double resv_max_rate;
double target_reinj_fraction;
double target_void_fraction;
};
struct GroupProductionProperties {
GroupProduction::ControlEnum cmode = GroupProduction::NONE;
GroupProductionExceedLimit::ActionEnum exceed_action = GroupProductionExceedLimit::NONE;
double oil_target = 0;
double water_target = 0;
double gas_target = 0;
double liquid_target = 0;
UDAValue oil_target;
UDAValue water_target;
UDAValue gas_target;
UDAValue liquid_target;
double resv_target = 0;
bool operator==(const GroupProductionProperties& other) const;
bool operator!=(const GroupProductionProperties& other) const;
};
Group2(const std::string& group_name, std::size_t insert_index_arg, std::size_t init_step_arg, const UnitSystem& unit_system_arg);
struct ProductionControls {
GroupProduction::ControlEnum cmode;
GroupProductionExceedLimit::ActionEnum exceed_action;
double oil_target;
double water_target;
double gas_target;
double liquid_target;
double resv_target = 0;
};
Group2(const std::string& group_name, std::size_t insert_index_arg, std::size_t init_step_arg, double udq_undefined_arg, const UnitSystem& unit_system);
bool defined(std::size_t timeStep) const;
std::size_t insert_index() const;
const std::string& name() const;
const GroupProductionProperties& productionProperties() const;
const GroupInjectionProperties& injectionProperties() const;
int getGroupNetVFPTable() const;
bool updateNetVFPTable(int vfp_arg);
bool update_gefac(double gefac, bool transfer_gefac);
@@ -92,13 +110,18 @@ struct GroupProductionProperties {
const std::vector<std::string>& wells() const;
const std::vector<std::string>& groups() const;
bool wellgroup() const;
ProductionControls productionControls(const SummaryState& st) const;
InjectionControls injectionControls(const SummaryState& st) const;
private:
bool hasType(GroupType gtype) const;
void addType(GroupType new_gtype);
const GroupProductionProperties& productionProperties() const;
const GroupInjectionProperties& injectionProperties() const;
std::string m_name;
std::size_t m_insert_index;
std::size_t init_step;
double udq_undefined;
UnitSystem unit_system;
GroupType group_type;
double gefac;
@@ -109,8 +132,8 @@ private:
IOrderSet<std::string> m_wells;
IOrderSet<std::string> m_groups;
GroupInjectionProperties injection_properties;
GroupProductionProperties production_properties;
GroupInjectionProperties injection_properties{};
GroupProductionProperties production_properties{};
};
}

View File

@@ -268,7 +268,7 @@ namespace Opm
void handleWCONINJH(const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors);
void handleWELOPEN( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors, const std::vector<std::string>& matching_wells = {});
void handleWELTARG( const SCHEDULESection&, const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors);
void handleGCONINJE( const SCHEDULESection&, const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors);
void handleGCONINJE( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors);
void handleGCONPROD( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors);
void handleGEFAC( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors);
void handleWEFAC( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors);