GasLiftSingleWellGeneric.hpp
Go to the documentation of this file.
1/*
2 Copyright 2020 Equinor ASA.
3
4 This file is part of the Open Porous Media project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18*/
19
20#ifndef OPM_GASLIFT_SINGLE_WELL_GENERIC_HEADER_INCLUDED
21#define OPM_GASLIFT_SINGLE_WELL_GENERIC_HEADER_INCLUDED
22
23#include <opm/input/eclipse/Schedule/Well/WellProductionControls.hpp>
24
27
28#include <optional>
29#include <set>
30#include <stdexcept>
31#include <string>
32#include <tuple>
33#include <utility>
34
35namespace Opm {
36
37class DeferredLogger;
38class GasLiftWell;
39template<class Scalar> class GasLiftWellState;
40class Schedule;
41class SummaryState;
42template<typename Scalar, typename IndexTraits> class WellInterfaceGeneric;
43template<typename Scalar, typename IndexTraits> class WellState;
44template<class Scalar> class GroupState;
45
46template<typename Scalar, typename IndexTraits>
47class GasLiftSingleWellGeneric : public GasLiftCommon<Scalar, IndexTraits>
48{
49protected:
50 static constexpr int Water = IndexTraits::waterPhaseIdx;
51 static constexpr int Oil = IndexTraits::oilPhaseIdx;
52 static constexpr int Gas = IndexTraits::gasPhaseIdx;
53 static constexpr int NUM_PHASES = 3;
54 static constexpr Scalar ALQ_EPSILON = 1e-8;
55
56public:
57 using GLiftSyncGroups = std::set<int>;
60
61 struct GradInfo
62 {
63 GradInfo() = default;
64 GradInfo(Scalar grad_,
65 Scalar new_oil_rate_,
66 bool oil_is_limited_,
67 Scalar new_gas_rate_,
68 bool gas_is_limited_,
69 Scalar new_water_rate_,
70 bool water_is_limited_,
71 Scalar alq_,
72 bool alq_is_limited_)
73 : grad{grad_}
74 , new_oil_rate{new_oil_rate_}
75 , oil_is_limited{oil_is_limited_}
76 , new_gas_rate{new_gas_rate_}
77 , gas_is_limited{gas_is_limited_}
78 , new_water_rate{new_water_rate_}
79 , water_is_limited{water_is_limited_}
80 , alq{alq_}
81 , alq_is_limited{alq_is_limited_}
82 {}
83
84 Scalar grad;
91 Scalar alq;
93 };
94
95 const std::string& name() const { return well_name_; }
96
97 std::optional<GradInfo> calcIncOrDecGradient(Scalar oil_rate,
98 Scalar gas_rate,
99 Scalar water_rate,
100 Scalar alq,
101 const std::string& gr_name_dont_limit,
102 bool increase,
103 bool debug_output = true) const;
104
105 std::unique_ptr<GasLiftWellState<Scalar>> runOptimize(const int iteration_idx);
106
107 std::pair<Scalar, bool> wellTestALQ();
108
110
111protected:
114 const GroupState<Scalar>& group_state,
115 const Well& ecl_well,
116 const SummaryState& summary_state,
118 const Schedule& schedule,
119 const int report_step_idx,
120 GLiftSyncGroups& sync_groups,
121 const Parallel::Communication& comm,
122 bool glift_debug);
123
124 struct LimitedRates;
126 {
127 BasicRates(const BasicRates& rates) :
128 oil{rates.oil},
129 gas{rates.gas},
130 water{rates.water},
132 {}
133
134 BasicRates(Scalar oil_,
135 Scalar gas_,
136 Scalar water_,
137 bool bhp_is_limited_)
138 : oil{oil_}
139 , gas{gas_}
140 , water{water_}
141 , bhp_is_limited{bhp_is_limited_}
142 {}
143
145 {
146 oil = rates.oil;
147 gas = rates.gas;
148 water = rates.water;
150 return *this;
151 }
152
153 // This copy constructor cannot be defined inline here since LimitedRates
154 // has not been defined yet (it is defined below). Instead it is defined in
155 // in the .cpp file
156 explicit BasicRates(const LimitedRates& rates);
157
158 Scalar operator[](Rate rate_type) const
159 {
160 switch (rate_type) {
161 case Rate::oil:
162 return this->oil;
163 case Rate::gas:
164 return this->gas;
165 case Rate::water:
166 return this->water;
167 case Rate::liquid:
168 return this->oil + this->water;
169 default:
170 throw std::runtime_error("This should not happen");
171 }
172 }
173
174 Scalar oil, gas, water;
176 };
177
178 struct LimitedRates : public BasicRates
179 {
180 enum class LimitType {well, group, none};
181 LimitedRates(Scalar oil_,
182 Scalar gas_,
183 Scalar water_,
184 bool oil_is_limited_,
185 bool gas_is_limited_,
186 bool water_is_limited_,
187 bool bhp_is_limited_,
188 std::optional<Rate> oil_limiting_target_,
189 std ::optional<Rate> water_limiting_target_)
190 : BasicRates(oil_, gas_, water_, bhp_is_limited_)
191 , oil_is_limited{oil_is_limited_}
192 , gas_is_limited{gas_is_limited_}
193 , water_is_limited{water_is_limited_}
194 , oil_limiting_target{oil_limiting_target_}
195 , water_limiting_target{water_limiting_target_}
196 {
197 set_initial_limit_type_();
198 }
199
201 bool oil_is_limited_,
202 bool gas_is_limited_,
203 bool water_is_limited_)
204 : BasicRates(rates)
205 , oil_is_limited{oil_is_limited_}
206 , gas_is_limited{gas_is_limited_}
207 , water_is_limited{water_is_limited_}
208 {
209 set_initial_limit_type_();
210 }
211
212 bool limited() const
213 {
215 }
216
217 // For a given ALQ value, were the rates limited due to group targets
218 // or due to well targets?
223 std::optional<Rate> oil_limiting_target;
224 std::optional<Rate> water_limiting_target;
225
226 private:
227 void set_initial_limit_type_()
228 {
230 }
231 };
232
234 {
235 OptimizeState( GasLiftSingleWellGeneric& parent_, bool increase_ )
236 : parent{parent_}
237 , increase{increase_}
238 , it{0}
239 , stop_iteration{false}
240 , bhp{-1}
241 {}
242
245 int it;
247 Scalar bhp;
248
249 std::pair<std::optional<Scalar>,bool> addOrSubtractAlqIncrement(Scalar alq);
250 Scalar calcEcoGradient(Scalar oil_rate,
251 Scalar new_oil_rate,
252 Scalar gas_rate,
253 Scalar new_gas_rate);
254
255 bool checkAlqOutsideLimits(Scalar alq, Scalar oil_rate);
256 bool checkEcoGradient(Scalar gradient);
257 bool checkOilRateExceedsTarget(Scalar oil_rate);
258 bool checkRatesViolated(const LimitedRates& rates) const;
259
260 void debugShowIterationInfo(Scalar alq);
261
263
264 void warn_(const std::string& msg) { parent.displayWarning_(msg); }
265 };
266
267 bool checkGroupALQrateExceeded(Scalar delta_alq,
268 const std::string& gr_name_dont_limit = "") const;
269 bool checkGroupTotalRateExceeded(Scalar delta_alq,
270 Scalar delta_gas_rate) const;
271
272 std::pair<std::optional<Scalar>, bool>
273 addOrSubtractAlqIncrement_(Scalar alq, bool increase) const;
274
275 Scalar calcEcoGradient_(Scalar oil_rate, Scalar new_oil_rate,
276 Scalar gas_rate, Scalar new_gas_rate, bool increase) const;
277
278 bool checkALQequal_(Scalar alq1, Scalar alq2) const;
279
281 const BasicRates& new_rates) const;
282 bool checkInitialALQmodified_(Scalar alq, Scalar initial_alq) const;
283
284 virtual bool checkThpControl_() const = 0;
285 virtual std::optional<Scalar > computeBhpAtThpLimit_(Scalar alq,
286 bool debug_output = true) const = 0;
287
288 std::pair<std::optional<Scalar>,Scalar>
290
291 std::pair<std::optional<BasicRates>,Scalar>
293
294 std::optional<LimitedRates>
296
297 virtual BasicRates computeWellRates_(Scalar bhp,
298 bool bhp_is_limited,
299 bool debug_output = true) const = 0;
300
301 std::optional<BasicRates> computeWellRatesWithALQ_(Scalar alq) const;
302
303 void debugCheckNegativeGradient_(Scalar grad, Scalar alq, Scalar new_alq,
304 Scalar oil_rate, Scalar new_oil_rate,
305 Scalar gas_rate, Scalar new_gas_rate,
306 bool increase) const;
307
311 void debugShowLimitingTargets_(const LimitedRates& rates) const;
313 void debugShowStartIteration_(Scalar alq, bool increase, Scalar oil_rate);
315 void displayDebugMessage_(const std::string& msg) const override;
316 void displayWarning_(const std::string& warning);
317
318 std::pair<Scalar, bool> getBhpWithLimit_(Scalar bhp) const;
319 std::pair<Scalar, bool> getGasRateWithLimit_(const BasicRates& rates) const;
320 std::pair<Scalar, bool> getGasRateWithGroupLimit_(Scalar new_gas_rate,
321 Scalar gas_rate,
322 const std::string& gr_name_dont_limit) const;
323
324 std::pair<std::optional<LimitedRates>,Scalar >
326
328
329 std::tuple<Scalar,Scalar,bool,bool>
330 getLiquidRateWithGroupLimit_(const Scalar new_oil_rate,
331 const Scalar oil_rate,
332 const Scalar new_water_rate,
333 const Scalar water_rate,
334 const std::string& gr_name_dont_limit) const;
335
336 std::pair<Scalar, bool>
337 getOilRateWithGroupLimit_(Scalar new_oil_rate,
338 Scalar oil_rate,
339 const std::string& gr_name_dont_limit) const;
340
341 std::pair<Scalar, bool> getOilRateWithLimit_(const BasicRates& rates) const;
342
343 std::pair<Scalar, std::optional<Rate>>
345
346 Scalar getProductionTarget_(Rate rate) const;
347 Scalar getRate_(Rate rate_type, const BasicRates& rates) const;
348
349 std::pair<Scalar, std::optional<Rate>>
350 getRateWithLimit_(Rate rate_type, const BasicRates& rates) const;
351
352 std::tuple<Scalar, const std::string*, Scalar>
354 const Scalar new_rate,
355 const Scalar old_rate,
356 const std::string& gr_name_dont_limit) const;
357
358 std::pair<Scalar, bool>
359 getWaterRateWithGroupLimit_(Scalar new_water_rate,
360 Scalar water_rate,
361 const std::string& gr_name_dont_limit) const;
362
363 std::pair<Scalar, bool> getWaterRateWithLimit_(const BasicRates& rates) const;
364
365 std::pair<Scalar, std::optional<Rate>>
367
369 bool hasProductionControl_(Rate rate) const;
370
371 std::pair<LimitedRates, Scalar>
373 const LimitedRates& orig_rates) const;
374
375 std::pair<LimitedRates, Scalar>
377 const LimitedRates& orig_rates) const;
378
379 void logSuccess_(Scalar alq,
380 const int iteration_idx);
381
382 std::pair<LimitedRates, Scalar>
384 Scalar alq,
385 bool increase) const;
386
387 std::pair<LimitedRates, Scalar>
389 const LimitedRates& rates) const;
390
391 std::pair<LimitedRates, Scalar>
393 const LimitedRates& rates) const;
394
395 std::pair<LimitedRates, Scalar>
397 const LimitedRates& rates) const;
398
399 std::unique_ptr<GasLiftWellState<Scalar>> runOptimize1_();
400 std::unique_ptr<GasLiftWellState<Scalar>> runOptimize2_();
401 std::unique_ptr<GasLiftWellState<Scalar>> runOptimizeLoop_(bool increase);
402
403 void setAlqMinRate_(const GasLiftWell& well);
404 std::unique_ptr<GasLiftWellState<Scalar>> tryIncreaseLiftGas_();
405 std::unique_ptr<GasLiftWellState<Scalar>> tryDecreaseLiftGas_();
406
408 const LimitedRates& new_rates,
409 Scalar delta_alq) const;
410
413 const LimitedRates& rates,
414 const std::string& gr_name = "") const;
415
416 void updateWellStateAlqFixedValue_(const GasLiftWell& well);
417 bool useFixedAlq_(const GasLiftWell& well);
418
420 const std::string& gr_name,
421 Scalar rate,
422 Scalar target) const;
424
425 const Well& ecl_well_;
426 const SummaryState& summary_state_;
429 const WellProductionControls controls_;
430
432 Scalar max_alq_;
433 Scalar min_alq_;
434 Scalar orig_alq_;
435
436 Scalar alpha_w_;
437 Scalar alpha_g_;
438 Scalar eco_grad_;
439
443
445
446 std::string well_name_;
447
448 const GasLiftWell* gl_well_;
449
454};
455
456} // namespace Opm
457
458#endif // OPM_GASLIFT_SINGLE_WELL_GENERIC_HEADER_INCLUDED
Definition: DeferredLogger.hpp:57
Definition: GasLiftCommon.hpp:35
MessageType
Definition: GasLiftCommon.hpp:46
Definition: GasLiftGroupInfo.hpp:46
Rate
Definition: GasLiftGroupInfo.hpp:62
Definition: GasLiftSingleWellGeneric.hpp:48
std::pair< Scalar, std::optional< Rate > > getRateWithLimit_(Rate rate_type, const BasicRates &rates) const
bool debug_limit_increase_decrease_
Definition: GasLiftSingleWellGeneric.hpp:451
Scalar max_alq_
Definition: GasLiftSingleWellGeneric.hpp:432
bool debug_abort_if_decrease_and_oil_is_limited_
Definition: GasLiftSingleWellGeneric.hpp:452
std::pair< Scalar, bool > getGasRateWithLimit_(const BasicRates &rates) const
std::pair< std::optional< BasicRates >, Scalar > computeInitialWellRates_() const
static constexpr int NUM_PHASES
Definition: GasLiftSingleWellGeneric.hpp:53
Scalar getRate_(Rate rate_type, const BasicRates &rates) const
bool checkGroupTargetsViolated(const BasicRates &rates, const BasicRates &new_rates) const
std::pair< LimitedRates, Scalar > reduceALQtoGroupTarget(Scalar alq, const LimitedRates &rates) const
virtual BasicRates computeWellRates_(Scalar bhp, bool bhp_is_limited, bool debug_output=true) const =0
Scalar alpha_w_
Definition: GasLiftSingleWellGeneric.hpp:436
GasLiftGroupInfo< Scalar, IndexTraits > & group_info_
Definition: GasLiftSingleWellGeneric.hpp:427
std::pair< Scalar, bool > getBhpWithLimit_(Scalar bhp) const
bool checkGroupALQrateExceeded(Scalar delta_alq, const std::string &gr_name_dont_limit="") const
Scalar increment_
Definition: GasLiftSingleWellGeneric.hpp:431
std::unique_ptr< GasLiftWellState< Scalar > > runOptimizeLoop_(bool increase)
static constexpr int Water
Definition: GasLiftSingleWellGeneric.hpp:50
std::pair< LimitedRates, Scalar > maybeAdjustALQbeforeOptimizeLoop_(const LimitedRates &rates, Scalar alq, bool increase) const
std::unique_ptr< GasLiftWellState< Scalar > > tryIncreaseLiftGas_()
std::pair< Scalar, std::optional< Rate > > getWaterRateWithLimit2_(const BasicRates &rates) const
std::unique_ptr< GasLiftWellState< Scalar > > runOptimize1_()
void debugShowStartIteration_(Scalar alq, bool increase, Scalar oil_rate)
void debugInfoGroupRatesExceedTarget(Rate rate_type, const std::string &gr_name, Scalar rate, Scalar target) const
Scalar eco_grad_
Definition: GasLiftSingleWellGeneric.hpp:438
std::pair< LimitedRates, Scalar > reduceALQtoGroupAlqLimits_(Scalar alq, const LimitedRates &rates) const
bool debug_abort_if_increase_and_gas_is_limited_
Definition: GasLiftSingleWellGeneric.hpp:453
std::set< int > GLiftSyncGroups
Definition: GasLiftSingleWellGeneric.hpp:57
void updateGroupRates_(const LimitedRates &rates, const LimitedRates &new_rates, Scalar delta_alq) const
void debugPrintWellStateRates() const
void debugCheckNegativeGradient_(Scalar grad, Scalar alq, Scalar new_alq, Scalar oil_rate, Scalar new_oil_rate, Scalar gas_rate, Scalar new_gas_rate, bool increase) const
std::optional< BasicRates > computeWellRatesWithALQ_(Scalar alq) const
void debugShowLimitingTargets_(const LimitedRates &rates) const
std::pair< Scalar, bool > getWaterRateWithLimit_(const BasicRates &rates) const
std::tuple< Scalar, const std::string *, Scalar > getRateWithGroupLimit_(Rate rate_type, const Scalar new_rate, const Scalar old_rate, const std::string &gr_name_dont_limit) const
Scalar min_alq_
Definition: GasLiftSingleWellGeneric.hpp:433
std::pair< LimitedRates, Scalar > increaseALQtoPositiveOilRate_(Scalar alq, const LimitedRates &orig_rates) const
std::pair< Scalar, std::optional< Rate > > getOilRateWithLimit2_(const BasicRates &rates) const
void displayDebugMessage_(const std::string &msg) const override
int water_pos_
Definition: GasLiftSingleWellGeneric.hpp:442
void updateWellStateAlqFixedValue_(const GasLiftWell &well)
const WellProductionControls controls_
Definition: GasLiftSingleWellGeneric.hpp:429
Scalar getProductionTarget_(Rate rate) const
std::string well_name_
Definition: GasLiftSingleWellGeneric.hpp:446
std::pair< std::optional< Scalar >, Scalar > computeConvergedBhpAtThpLimitByMaybeIncreasingALQ_() const
int max_iterations_
Definition: GasLiftSingleWellGeneric.hpp:444
void displayWarning_(const std::string &warning)
bool optimize_
Definition: GasLiftSingleWellGeneric.hpp:450
std::unique_ptr< GasLiftWellState< Scalar > > runOptimize(const int iteration_idx)
int oil_pos_
Definition: GasLiftSingleWellGeneric.hpp:441
Scalar orig_alq_
Definition: GasLiftSingleWellGeneric.hpp:434
const GasLiftWell * gl_well_
Definition: GasLiftSingleWellGeneric.hpp:448
bool useFixedAlq_(const GasLiftWell &well)
std::pair< Scalar, bool > getGasRateWithGroupLimit_(Scalar new_gas_rate, Scalar gas_rate, const std::string &gr_name_dont_limit) const
std::pair< Scalar, bool > getOilRateWithLimit_(const BasicRates &rates) const
std::pair< LimitedRates, Scalar > reduceALQtoWellTarget_(Scalar alq, const LimitedRates &rates) const
Scalar alpha_g_
Definition: GasLiftSingleWellGeneric.hpp:437
std::pair< LimitedRates, Scalar > increaseALQtoMinALQ_(Scalar alq, const LimitedRates &orig_rates) const
static constexpr int Oil
Definition: GasLiftSingleWellGeneric.hpp:51
const std::string & name() const
Definition: GasLiftSingleWellGeneric.hpp:95
bool checkGroupTotalRateExceeded(Scalar delta_alq, Scalar delta_gas_rate) const
bool hasProductionControl_(Rate rate) const
virtual bool checkThpControl_() const =0
std::optional< LimitedRates > computeLimitedWellRatesWithALQ_(Scalar alq) const
std::pair< std::optional< Scalar >, bool > addOrSubtractAlqIncrement_(Scalar alq, bool increase) const
std::pair< Scalar, bool > getWaterRateWithGroupLimit_(Scalar new_water_rate, Scalar water_rate, const std::string &gr_name_dont_limit) const
virtual const WellInterfaceGeneric< Scalar, IndexTraits > & getWell() const =0
static constexpr Scalar ALQ_EPSILON
Definition: GasLiftSingleWellGeneric.hpp:54
std::tuple< Scalar, Scalar, bool, bool > getLiquidRateWithGroupLimit_(const Scalar new_oil_rate, const Scalar oil_rate, const Scalar new_water_rate, const Scalar water_rate, const std::string &gr_name_dont_limit) const
LimitedRates getLimitedRatesFromRates_(const BasicRates &rates) const
void debugShowProducerControlMode() const
typename GasLiftGroupInfo< Scalar, IndexTraits >::Rate Rate
Definition: GasLiftSingleWellGeneric.hpp:58
GasLiftSingleWellGeneric(DeferredLogger &deferred_logger, WellState< Scalar, IndexTraits > &well_state, const GroupState< Scalar > &group_state, const Well &ecl_well, const SummaryState &summary_state, GasLiftGroupInfo< Scalar, IndexTraits > &group_info, const Schedule &schedule, const int report_step_idx, GLiftSyncGroups &sync_groups, const Parallel::Communication &comm, bool glift_debug)
static constexpr int Gas
Definition: GasLiftSingleWellGeneric.hpp:52
std::pair< std::optional< LimitedRates >, Scalar > getInitialRatesWithLimit_() const
bool checkInitialALQmodified_(Scalar alq, Scalar initial_alq) const
std::pair< Scalar, bool > wellTestALQ()
LimitedRates updateRatesToGroupLimits_(const BasicRates &old_rates, const LimitedRates &rates, const std::string &gr_name="") const
BasicRates getWellStateRates_() const
void logSuccess_(Scalar alq, const int iteration_idx)
std::unique_ptr< GasLiftWellState< Scalar > > tryDecreaseLiftGas_()
Scalar calcEcoGradient_(Scalar oil_rate, Scalar new_oil_rate, Scalar gas_rate, Scalar new_gas_rate, bool increase) const
int gas_pos_
Definition: GasLiftSingleWellGeneric.hpp:440
const SummaryState & summary_state_
Definition: GasLiftSingleWellGeneric.hpp:426
virtual std::optional< Scalar > computeBhpAtThpLimit_(Scalar alq, bool debug_output=true) const =0
std::optional< GradInfo > calcIncOrDecGradient(Scalar oil_rate, Scalar gas_rate, Scalar water_rate, Scalar alq, const std::string &gr_name_dont_limit, bool increase, bool debug_output=true) const
GLiftSyncGroups & sync_groups_
Definition: GasLiftSingleWellGeneric.hpp:428
std::pair< Scalar, bool > getOilRateWithGroupLimit_(Scalar new_oil_rate, Scalar oil_rate, const std::string &gr_name_dont_limit) const
bool checkALQequal_(Scalar alq1, Scalar alq2) const
std::unique_ptr< GasLiftWellState< Scalar > > runOptimize2_()
void setAlqMinRate_(const GasLiftWell &well)
const Well & ecl_well_
Definition: GasLiftSingleWellGeneric.hpp:425
Definition: GroupState.hpp:41
Definition: WellInterfaceGeneric.hpp:53
Definition: WellState.hpp:66
Dune::Communication< MPIComm > Communication
Definition: ParallelCommunication.hpp:30
Definition: blackoilboundaryratevector.hh:39
Definition: GasLiftSingleWellGeneric.hpp:126
BasicRates(Scalar oil_, Scalar gas_, Scalar water_, bool bhp_is_limited_)
Definition: GasLiftSingleWellGeneric.hpp:134
Scalar water
Definition: GasLiftSingleWellGeneric.hpp:174
Scalar operator[](Rate rate_type) const
Definition: GasLiftSingleWellGeneric.hpp:158
Scalar oil
Definition: GasLiftSingleWellGeneric.hpp:174
Scalar gas
Definition: GasLiftSingleWellGeneric.hpp:174
bool bhp_is_limited
Definition: GasLiftSingleWellGeneric.hpp:175
BasicRates & operator=(const BasicRates &rates)
Definition: GasLiftSingleWellGeneric.hpp:144
BasicRates(const LimitedRates &rates)
BasicRates(const BasicRates &rates)
Definition: GasLiftSingleWellGeneric.hpp:127
Definition: GasLiftSingleWellGeneric.hpp:62
bool oil_is_limited
Definition: GasLiftSingleWellGeneric.hpp:86
bool alq_is_limited
Definition: GasLiftSingleWellGeneric.hpp:92
Scalar new_oil_rate
Definition: GasLiftSingleWellGeneric.hpp:85
GradInfo(Scalar grad_, Scalar new_oil_rate_, bool oil_is_limited_, Scalar new_gas_rate_, bool gas_is_limited_, Scalar new_water_rate_, bool water_is_limited_, Scalar alq_, bool alq_is_limited_)
Definition: GasLiftSingleWellGeneric.hpp:64
Scalar alq
Definition: GasLiftSingleWellGeneric.hpp:91
Scalar new_water_rate
Definition: GasLiftSingleWellGeneric.hpp:89
Scalar new_gas_rate
Definition: GasLiftSingleWellGeneric.hpp:87
bool water_is_limited
Definition: GasLiftSingleWellGeneric.hpp:90
bool gas_is_limited
Definition: GasLiftSingleWellGeneric.hpp:88
Scalar grad
Definition: GasLiftSingleWellGeneric.hpp:84
Definition: GasLiftSingleWellGeneric.hpp:179
std::optional< Rate > water_limiting_target
Definition: GasLiftSingleWellGeneric.hpp:224
bool oil_is_limited
Definition: GasLiftSingleWellGeneric.hpp:220
bool water_is_limited
Definition: GasLiftSingleWellGeneric.hpp:222
LimitType
Definition: GasLiftSingleWellGeneric.hpp:180
LimitedRates(Scalar oil_, Scalar gas_, Scalar water_, bool oil_is_limited_, bool gas_is_limited_, bool water_is_limited_, bool bhp_is_limited_, std::optional< Rate > oil_limiting_target_, std ::optional< Rate > water_limiting_target_)
Definition: GasLiftSingleWellGeneric.hpp:181
bool limited() const
Definition: GasLiftSingleWellGeneric.hpp:212
bool gas_is_limited
Definition: GasLiftSingleWellGeneric.hpp:221
LimitedRates(const BasicRates &rates, bool oil_is_limited_, bool gas_is_limited_, bool water_is_limited_)
Definition: GasLiftSingleWellGeneric.hpp:200
LimitType limit_type
Definition: GasLiftSingleWellGeneric.hpp:219
std::optional< Rate > oil_limiting_target
Definition: GasLiftSingleWellGeneric.hpp:223
Definition: GasLiftSingleWellGeneric.hpp:234
bool checkRatesViolated(const LimitedRates &rates) const
bool stop_iteration
Definition: GasLiftSingleWellGeneric.hpp:246
Scalar calcEcoGradient(Scalar oil_rate, Scalar new_oil_rate, Scalar gas_rate, Scalar new_gas_rate)
void warn_(const std::string &msg)
Definition: GasLiftSingleWellGeneric.hpp:264
bool checkAlqOutsideLimits(Scalar alq, Scalar oil_rate)
Scalar bhp
Definition: GasLiftSingleWellGeneric.hpp:247
std::pair< std::optional< Scalar >, bool > addOrSubtractAlqIncrement(Scalar alq)
OptimizeState(GasLiftSingleWellGeneric &parent_, bool increase_)
Definition: GasLiftSingleWellGeneric.hpp:235
GasLiftSingleWellGeneric & parent
Definition: GasLiftSingleWellGeneric.hpp:243
int it
Definition: GasLiftSingleWellGeneric.hpp:245
bool increase
Definition: GasLiftSingleWellGeneric.hpp:244