47 using GLiftOptWells = std::map<std::string,std::unique_ptr<GasLiftSingleWell>>;
48 using GLiftProdWells = std::map<std::string,const WellInterfaceGeneric<Scalar, IndexTraits>*>;
49 using GLiftWellStateMap = std::map<std::string,std::unique_ptr<GasLiftWellState<Scalar>>>;
50 using GradPair = std::pair<std::string, Scalar>;
51 using GradPairItr =
typename std::vector<GradPair>::iterator;
53 using GradMap = std::map<std::string, GradInfo>;
54 using MessageType =
typename GasLiftCommon<Scalar, IndexTraits>::MessageType;
58 const Parallel::Communication& comm,
73 void addOrRemoveALQincrement_(GradMap&
grad_map,
74 const std::string& well_name,
77 std::optional<GradInfo> calcIncOrDecGrad_(
const std::string name,
82 bool checkRateAlreadyLimited_(
const std::string& well_name,
86 GradInfo deleteDecGradItem_(
const std::string& name);
87 GradInfo deleteIncGradItem_(
const std::string& name);
88 GradInfo deleteGrad_(
const std::string& name,
bool increase);
90 void displayDebugMessage_(
const std::string&
msg)
const override;
91 void displayDebugMessage2B_(
const std::string&
msg);
92 void displayDebugMessage_(
const std::string&
msg,
94 void displayWarning_(
const std::string&
msg,
96 void displayWarning_(
const std::string&
msg);
98 std::tuple<Scalar, Scalar, Scalar, Scalar>
99 getCurrentGroupRates_(
const Group& group);
101 std::optional<Scalar> getGroupMaxALQ_(
const Group& group);
102 std::optional<Scalar> getGroupMaxTotalGas_(
const Group& group);
104 std::vector<GasLiftSingleWell*> getGroupGliftWells_(
const Group& group);
106 void getGroupGliftWellsRecursive_(
const Group& group,
107 std::vector<GasLiftSingleWell*>& wells);
109 void optimizeGroup_(
const Group& group);
110 void optimizeGroupsRecursive_(
const Group& group);
112 void recalculateGradientAndUpdateData_(GradPairItr&
grad_itr,
115 std::vector<GradPair>&
grads,
118 void redistributeALQ_(std::vector<GasLiftSingleWell*>& wells,
123 void removeSurplusALQ_(
const Group& group,
126 void saveGrad_(GradMap&
map,
const std::string& name, GradInfo& grad);
127 void saveDecGrad_(
const std::string& name, GradInfo& grad);
128 void saveIncGrad_(
const std::string& name, GradInfo& grad);
129 void sortGradients_(std::vector<GradPair>&
grads);
131 std::optional<GradInfo> updateGrad_(
const std::string& name,
132 GradInfo& grad,
bool increase);
134 void updateGradVector_(
const std::string& name,
135 std::vector<GradPair>&
grads,
138 void mpiSyncGlobalGradVector_(std::vector<GradPair>&
grads_global)
const;
139 void mpiSyncLocalToGlobalGradVector_(
const std::vector<GradPair>&
grads_local,
142 std::array<Scalar, 4> computeDelta(
const std::string& name,
bool add);
143 void updateGroupInfo(
const std::string& name,
bool add);
146 GLiftProdWells& prod_wells_;
147 GLiftOptWells& stage1_wells_;
149 GLiftWellStateMap& well_state_map_;
151 int report_step_idx_;
157 int max_iterations_ = 1000;
172 using GradInfo =
typename GasLiftStage2::GradInfo;
173 using GradPair =
typename GasLiftStage2::GradPair;
174 using GradPairItr =
typename GasLiftStage2::GradPairItr;
175 using GradMap =
typename GasLiftStage2::GradMap;
177 void calculateEcoGradients(std::vector<GasLiftSingleWell*>& wells,
181 bool checkAtLeastTwoWells(std::vector<GasLiftSingleWell*>& wells);
183 void debugShowIterationInfo();
185 std::pair<std::optional<GradPairItr>,std::optional<GradPairItr>>
186 getEcoGradients(std::vector<GradPair>&
inc_grads,
189 void recalculateGradients(std::vector<GradPair>&
inc_grads,
198 void displayDebugMessage_(
const std::string&
msg);
199 void displayWarning_(
const std::string&
msg);
214 Scalar water_target_,
215 Scalar liquid_target_,
220 , well_state(well_state_)
221 , oil_rate{oil_rate_}
222 , gas_rate{gas_rate_}
223 , water_rate{water_rate_}
226 , oil_target{oil_target_}
227 , gas_target{gas_target_}
228 , water_target(water_target_)
229 , liquid_target{liquid_target_}
242 const Scalar min_eco_grad;
243 const Scalar oil_target;
244 const Scalar gas_target;
245 const Scalar water_target;
246 const Scalar liquid_target;
247 std::optional<Scalar> max_glift;
248 std::optional<Scalar> max_total_gas;
251 void addOrRemoveALQincrement(GradMap &
grad_map,
252 const std::string& well_name,
255 bool checkALQlimit();
256 bool checkEcoGradient(
const std::string& well_name, Scalar
eco_grad);
261 std::array<Scalar, 4> computeDelta(
const std::string& name);
262 void updateRates(
const std::array<Scalar, 4>&
delta);
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:240