20#ifndef OPM_GROUP_ECONOMIC_LIMITS_CHECKER_HEADER_INCLUDED
21#define OPM_GROUP_ECONOMIC_LIMITS_CHECKER_HEADER_INCLUDED
23#include <opm/input/eclipse/Schedule/Group/GroupEconProductionLimits.hpp>
24#include <opm/input/eclipse/Units/UnitSystem.hpp>
35template<
typename Scalar,
typename IndexTraits>
class BlackoilWellModelGeneric;
38template<
typename Scalar,
typename IndexTraits>
class WellState;
41template<
typename Scalar,
typename IndexTraits>
62 WellTestState& well_test_state,
64 const double simulation_time,
65 const int report_step_idx,
71 std::optional<RatioDetails>
GOR();
72 std::optional<RatioDetails>
WGR();
80 const size_t sep_length = 110)
const
81 {
return std::string(sep_length, sep_char); }
86 void displayDebugMessage(
const std::string& msg)
const;
87 void addPrintMessage(
const std::string& msg,
90 const UnitSystem::measure measure);
91 bool closeWellsRecursive(
const Group& group,
int level = 0);
92 void throwNotImplementedError(
const std::string& error)
const;
95 void collectProducerWells(
const Group& group,
96 std::vector<std::string>& well_names)
const;
101 std::optional<Scalar> computeWellRatio(
const std::string& well_name,
107 void closeWorstOffendingRatioWell(
const RatioDetails& ratio_details);
109 std::optional<RatioDetails> groupRatioDetails(
const RatioViolation ratio_violation)
const;
113 const double simulation_time_;
114 const int report_step_idx_;
116 const std::string date_string_;
117 const UnitSystem& unit_system_;
119 WellTestState& well_test_state_;
120 const Schedule& schedule_;
121 GroupEconProductionLimits::GEconGroupProp gecon_props_;
123 std::array<Scalar,NUM_PHASES> production_rates_;
124 std::map<int, unsigned> phase_idx_map_ = {
125 {0, IndexTraits::oilPhaseIdx},
126 {1, IndexTraits::gasPhaseIdx},
127 {2, IndexTraits::waterPhaseIdx}
129 std::map<unsigned, int> phase_idx_reverse_map_;
130 std::string message_;
Definition: DeferredLogger.hpp:57
Definition: GroupEconomicLimitsChecker.hpp:43
GroupEconomicLimitsChecker(const BlackoilWellModelGeneric< Scalar, IndexTraits > &well_model, WellTestState &well_test_state, const Group &group, const double simulation_time, const int report_step_idx, DeferredLogger &deferred_logger)
std::optional< RatioDetails > WGR()
std::string message_separator(const char sep_char=' *', const size_t sep_length=110) const
Definition: GroupEconomicLimitsChecker.hpp:79
std::optional< RatioDetails > waterCut()
RatioViolation
Definition: GroupEconomicLimitsChecker.hpp:45
void doWorkOver(const RatioDetails &ratio_details)
std::optional< RatioDetails > ratioViolation()
static constexpr int NUM_PHASES
Definition: GroupEconomicLimitsChecker.hpp:83
int numProducersOpenInitially()
std::optional< RatioDetails > GOR()
Definition: WellState.hpp:66
Definition: blackoilbioeffectsmodules.hh:45
Definition: GroupEconomicLimitsChecker.hpp:53
std::string ratio_type
Definition: GroupEconomicLimitsChecker.hpp:55
RatioViolation violation
Definition: GroupEconomicLimitsChecker.hpp:54
Scalar limit
Definition: GroupEconomicLimitsChecker.hpp:57
UnitSystem::measure measure
Definition: GroupEconomicLimitsChecker.hpp:58
Scalar ratio
Definition: GroupEconomicLimitsChecker.hpp:56