49 using GLiftOptWells = std::map<std::string,std::unique_ptr<GasLiftSingleWell>>;
50 using GLiftProdWells = std::map<std::string,const WellInterfaceGeneric<Scalar>*>;
51 using GLiftWellStateMap = std::map<std::string,std::unique_ptr<GasLiftWellState<Scalar>>>;
52 using GradPair = std::pair<std::string, Scalar>;
53 using GradPairItr =
typename std::vector<GradPair>::iterator;
55 using GradMap = std::map<std::string, GradInfo>;
56 using MessageType =
typename GasLiftCommon<Scalar>::MessageType;
58 static const int Water = BlackoilPhases::Aqua;
59 static const int Oil = BlackoilPhases::Liquid;
60 static const int Gas = BlackoilPhases::Vapour;
64 const Parallel::Communication& comm,
79 void addOrRemoveALQincrement_(GradMap&
grad_map,
80 const std::string& well_name,
83 std::optional<GradInfo> calcIncOrDecGrad_(
const std::string name,
88 bool checkRateAlreadyLimited_(
const std::string& well_name,
92 GradInfo deleteDecGradItem_(
const std::string& name);
93 GradInfo deleteIncGradItem_(
const std::string& name);
94 GradInfo deleteGrad_(
const std::string& name,
bool increase);
96 void displayDebugMessage_(
const std::string&
msg)
const override;
97 void displayDebugMessage2B_(
const std::string&
msg);
98 void displayDebugMessage_(
const std::string&
msg,
100 void displayWarning_(
const std::string&
msg,
102 void displayWarning_(
const std::string&
msg);
104 std::tuple<Scalar, Scalar, Scalar, Scalar>
105 getCurrentGroupRates_(
const Group& group);
107 std::optional<Scalar> getGroupMaxALQ_(
const Group& group);
108 std::optional<Scalar> getGroupMaxTotalGas_(
const Group& group);
110 std::vector<GasLiftSingleWell*> getGroupGliftWells_(
const Group& group);
112 void getGroupGliftWellsRecursive_(
const Group& group,
113 std::vector<GasLiftSingleWell*>& wells);
115 void optimizeGroup_(
const Group& group);
116 void optimizeGroupsRecursive_(
const Group& group);
118 void recalculateGradientAndUpdateData_(GradPairItr&
grad_itr,
121 std::vector<GradPair>&
grads,
124 void redistributeALQ_(std::vector<GasLiftSingleWell*>& wells,
129 void removeSurplusALQ_(
const Group& group,
132 void saveGrad_(GradMap&
map,
const std::string& name, GradInfo& grad);
133 void saveDecGrad_(
const std::string& name, GradInfo& grad);
134 void saveIncGrad_(
const std::string& name, GradInfo& grad);
135 void sortGradients_(std::vector<GradPair>&
grads);
137 std::optional<GradInfo> updateGrad_(
const std::string& name,
138 GradInfo& grad,
bool increase);
140 void updateGradVector_(
const std::string& name,
141 std::vector<GradPair>&
grads,
144 void mpiSyncGlobalGradVector_(std::vector<GradPair>&
grads_global)
const;
145 void mpiSyncLocalToGlobalGradVector_(
const std::vector<GradPair>&
grads_local,
148 std::array<Scalar, 4> computeDelta(
const std::string& name,
bool add);
149 void updateGroupInfo(
const std::string& name,
bool add);
152 GLiftProdWells& prod_wells_;
153 GLiftOptWells& stage1_wells_;
155 GLiftWellStateMap& well_state_map_;
157 int report_step_idx_;
163 int max_iterations_ = 1000;
178 using GradInfo =
typename GasLiftStage2::GradInfo;
179 using GradPair =
typename GasLiftStage2::GradPair;
180 using GradPairItr =
typename GasLiftStage2::GradPairItr;
181 using GradMap =
typename GasLiftStage2::GradMap;
183 void calculateEcoGradients(std::vector<GasLiftSingleWell*>& wells,
187 bool checkAtLeastTwoWells(std::vector<GasLiftSingleWell*>& wells);
189 void debugShowIterationInfo();
191 std::pair<std::optional<GradPairItr>,std::optional<GradPairItr>>
192 getEcoGradients(std::vector<GradPair>&
inc_grads,
195 void recalculateGradients(std::vector<GradPair>&
inc_grads,
204 void displayDebugMessage_(
const std::string&
msg);
205 void displayWarning_(
const std::string&
msg);
220 Scalar water_target_,
221 Scalar liquid_target_,
226 , well_state(well_state_)
227 , oil_rate{oil_rate_}
228 , gas_rate{gas_rate_}
229 , water_rate{water_rate_}
232 , oil_target{oil_target_}
233 , gas_target{gas_target_}
234 , water_target(water_target_)
235 , liquid_target{liquid_target_}
248 const Scalar min_eco_grad;
249 const Scalar oil_target;
250 const Scalar gas_target;
251 const Scalar water_target;
252 const Scalar liquid_target;
253 std::optional<Scalar> max_glift;
254 std::optional<Scalar> max_total_gas;
257 void addOrRemoveALQincrement(GradMap &
grad_map,
258 const std::string& well_name,
261 bool checkALQlimit();
262 bool checkEcoGradient(
const std::string& well_name, Scalar
eco_grad);
267 std::array<Scalar, 4> computeDelta(
const std::string& name);
268 void updateRates(
const std::array<Scalar, 4>&
delta);
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:242