mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
fixes to the wlift implementation
This commit is contained in:
parent
4f1bed2890
commit
bd370c6470
@ -67,7 +67,6 @@ namespace Opm
|
|||||||
const Simulator &ebos_simulator,
|
const Simulator &ebos_simulator,
|
||||||
const SummaryState &summary_state,
|
const SummaryState &summary_state,
|
||||||
DeferredLogger &deferred_logger,
|
DeferredLogger &deferred_logger,
|
||||||
std::vector<double> &potentials,
|
|
||||||
const WellState &well_state,
|
const WellState &well_state,
|
||||||
const Well::ProductionControls &controls
|
const Well::ProductionControls &controls
|
||||||
);
|
);
|
||||||
@ -95,7 +94,7 @@ namespace Opm
|
|||||||
const Well::ProductionControls &controls_;
|
const Well::ProductionControls &controls_;
|
||||||
DeferredLogger &deferred_logger_;
|
DeferredLogger &deferred_logger_;
|
||||||
const Simulator &ebos_simulator_;
|
const Simulator &ebos_simulator_;
|
||||||
std::vector<double> &potentials_;
|
std::vector<double> potentials_;
|
||||||
const StdWell &std_well_;
|
const StdWell &std_well_;
|
||||||
const SummaryState &summary_state_;
|
const SummaryState &summary_state_;
|
||||||
const WellState &well_state_;
|
const WellState &well_state_;
|
||||||
|
@ -35,14 +35,13 @@ GasLiftRuntime(
|
|||||||
const Simulator &ebos_simulator,
|
const Simulator &ebos_simulator,
|
||||||
const SummaryState &summary_state,
|
const SummaryState &summary_state,
|
||||||
DeferredLogger &deferred_logger,
|
DeferredLogger &deferred_logger,
|
||||||
std::vector<double> &potentials,
|
|
||||||
const WellState &well_state,
|
const WellState &well_state,
|
||||||
const Well::ProductionControls &controls
|
const Well::ProductionControls &controls
|
||||||
) :
|
) :
|
||||||
controls_{controls},
|
controls_{controls},
|
||||||
deferred_logger_{deferred_logger},
|
deferred_logger_{deferred_logger},
|
||||||
ebos_simulator_{ebos_simulator},
|
ebos_simulator_{ebos_simulator},
|
||||||
potentials_{potentials},
|
potentials_(well_state.numPhases(),0.0),
|
||||||
std_well_{std_well},
|
std_well_{std_well},
|
||||||
summary_state_{summary_state},
|
summary_state_{summary_state},
|
||||||
well_state_{well_state},
|
well_state_{well_state},
|
||||||
@ -237,6 +236,15 @@ getOilRateWithLimit_(std::vector<double> &potentials)
|
|||||||
if (new_rate > target)
|
if (new_rate > target)
|
||||||
new_rate = target;
|
new_rate = target;
|
||||||
}
|
}
|
||||||
|
if (this->controls_.hasControl(Well::ProducerCMode::LRAT)) {
|
||||||
|
auto target = this->controls_.liquid_rate;
|
||||||
|
auto oil_rate = -potentials[this->oil_pos_];
|
||||||
|
auto water_rate = -potentials[this->water_pos_];
|
||||||
|
auto liq_rate = oil_rate + water_rate;
|
||||||
|
if (liq_rate > target) {
|
||||||
|
new_rate = oil_rate * (target/liq_rate);
|
||||||
|
}
|
||||||
|
}
|
||||||
return new_rate;
|
return new_rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -342,6 +350,9 @@ runOptimizeLoop_(bool increase)
|
|||||||
auto gas_rate = -cur_potentials[this->gas_pos_];
|
auto gas_rate = -cur_potentials[this->gas_pos_];
|
||||||
bool success = false; // did we succeed to increase alq?
|
bool success = false; // did we succeed to increase alq?
|
||||||
auto cur_alq = this->orig_alq_;
|
auto cur_alq = this->orig_alq_;
|
||||||
|
if (cur_alq == 0 && !increase) // we don't decrease alq below zero
|
||||||
|
return false;
|
||||||
|
|
||||||
auto alq = cur_alq;
|
auto alq = cur_alq;
|
||||||
OptimizeState state {*this, increase};
|
OptimizeState state {*this, increase};
|
||||||
if (this->debug) debugShowStartIteration_(alq, increase);
|
if (this->debug) debugShowStartIteration_(alq, increase);
|
||||||
|
@ -2758,12 +2758,11 @@ namespace Opm
|
|||||||
= well_state.currentProductionControls()[this->index_of_well_];
|
= well_state.currentProductionControls()[this->index_of_well_];
|
||||||
if ( this->Base::wellHasTHPConstraints(summary_state)
|
if ( this->Base::wellHasTHPConstraints(summary_state)
|
||||||
&& current_control != Well::ProducerCMode::BHP ) {
|
&& current_control != Well::ProducerCMode::BHP ) {
|
||||||
std::vector<double> potentials = well_state.wellPotentials();
|
|
||||||
if (doGasLiftOptimize(well_state, ebos_simulator, deferred_logger)) {
|
if (doGasLiftOptimize(well_state, ebos_simulator, deferred_logger)) {
|
||||||
const auto& controls = well.productionControls(summary_state);
|
const auto& controls = well.productionControls(summary_state);
|
||||||
GasLiftHandler glift {
|
GasLiftHandler glift {
|
||||||
*this, ebos_simulator, summary_state,
|
*this, ebos_simulator, summary_state,
|
||||||
deferred_logger, potentials, well_state, controls };
|
deferred_logger, well_state, controls };
|
||||||
glift.runOptimize();
|
glift.runOptimize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user