51 using GLiftOptWells = std::map<std::string,std::unique_ptr<GasLiftSingleWell>>;
52 using GLiftProdWells = std::map<std::string,const WellInterfaceGeneric*>;
53 using GLiftWellStateMap = std::map<std::string,std::unique_ptr<GasLiftWellState>>;
54 using GradPair = std::pair<std::string, double>;
55 using GradPairItr = std::vector<GradPair>::iterator;
57 using GradMap = std::map<std::string, GradInfo>;
58 using MPIComm =
typename Dune::MPIHelper::MPICommunicator;
59 static const int Water = BlackoilPhases::Aqua;
60 static const int Oil = BlackoilPhases::Liquid;
61 static const int Gas = BlackoilPhases::Vapour;
65 const Parallel::Communication& comm,
79 void addOrRemoveALQincrement_(
80 GradMap&
grad_map,
const std::string& well_name,
bool add);
81 std::optional<GradInfo> calcIncOrDecGrad_(
84 GradInfo deleteDecGradItem_(
const std::string& name);
85 GradInfo deleteIncGradItem_(
const std::string& name);
86 GradInfo deleteGrad_(
const std::string& name,
bool increase);
87 void displayDebugMessage_(
const std::string&
msg)
const override;
88 void displayDebugMessage2B_(
const std::string&
msg);
89 void displayDebugMessage_(
const std::string&
msg,
const std::string&
group_name);
90 void displayWarning_(
const std::string&
msg,
const std::string&
group_name);
91 void displayWarning_(
const std::string&
msg);
92 std::tuple<double, double, double, double> getCurrentGroupRates_(
const Group& group);
93 std::optional<double> getGroupMaxALQ_(
const Group &group);
94 std::optional<double> getGroupMaxTotalGas_(
const Group &group);
95 std::vector<GasLiftSingleWell *> getGroupGliftWells_(
97 void getGroupGliftWellsRecursive_(
98 const Group& group, std::vector<GasLiftSingleWell *>& wells);
99 void optimizeGroup_(
const Group& group);
100 void optimizeGroupsRecursive_(
const Group& group);
101 void recalculateGradientAndUpdateData_(
104 void redistributeALQ_(
105 std::vector<GasLiftSingleWell *>& wells,
const Group& group,
107 void removeSurplusALQ_(
110 void saveGrad_(GradMap&
map,
const std::string& name, GradInfo& grad);
111 void saveDecGrad_(
const std::string& name, GradInfo& grad);
112 void saveIncGrad_(
const std::string& name, GradInfo& grad);
113 void sortGradients_(std::vector<GradPair>&
grads);
114 std::optional<GradInfo> updateGrad_(
115 const std::string& name, GradInfo& grad,
bool increase);
116 void updateGradVector_(
117 const std::string& name, std::vector<GradPair>&
grads,
double grad);
118 void mpiSyncGlobalGradVector_(std::vector<GradPair>&
grads_global)
const;
119 void mpiSyncLocalToGlobalGradVector_(
124 GLiftProdWells& prod_wells_;
125 GLiftOptWells& stage1_wells_;
127 GLiftWellStateMap& well_state_map_;
129 int report_step_idx_;
135 int max_iterations_ = 1000;
148 using GradInfo =
typename GasLiftStage2::GradInfo;
149 using GradPair =
typename GasLiftStage2::GradPair;
150 using GradPairItr =
typename GasLiftStage2::GradPairItr;
151 using GradMap =
typename GasLiftStage2::GradMap;
152 void calculateEcoGradients(std::vector<GasLiftSingleWell *>& wells,
154 bool checkAtLeastTwoWells(std::vector<GasLiftSingleWell *>& wells);
155 void debugShowIterationInfo();
156 std::pair<std::optional<GradPairItr>,std::optional<GradPairItr>>
159 void recalculateGradients(
165 void displayDebugMessage_(
const std::string&
msg);
166 void displayWarning_(
const std::string&
msg);
172 double oil_rate_,
double gas_rate_,
double water_rate_,
double alq_,
174 double oil_target_,
double gas_target_,
double water_target_,
double liquid_target_,
180 water_rate{water_rate_},
183 oil_target{oil_target_},
184 gas_target{gas_target_},
185 water_target(water_target_),
186 liquid_target{liquid_target_},
197 const double min_eco_grad;
198 const double oil_target;
199 const double gas_target;
200 const double water_target;
201 const double liquid_target;
202 std::optional<double> max_glift;
203 std::optional<double> max_total_gas;
206 void addOrRemoveALQincrement(
207 GradMap &
grad_map,
const std::string& well_name,
bool add);
209 bool checkEcoGradient(
const std::string& well_name,
double eco_grad);
214 std::array<double, 4> computeDelta(
const std::string& name);
215 void updateRates(
const std::array<double, 4>&
delta);