mirror of
https://github.com/OPM/opm-simulators.git
synced 2024-11-23 09:46:24 -06:00
Merge pull request #5696 from totto82/speedup_gaslift
Dont iterate when computing bhp from thp for computing of the well potentials for gaslift optimization
This commit is contained in:
commit
dd0fbbdede
@ -143,7 +143,8 @@ computeBhpAtThpLimit_(Scalar alq, bool debug_output) const
|
|||||||
this->simulator_,
|
this->simulator_,
|
||||||
this->summary_state_,
|
this->summary_state_,
|
||||||
alq,
|
alq,
|
||||||
this->deferred_logger_);
|
this->deferred_logger_,
|
||||||
|
/*iterate_if_no_solution */ false);
|
||||||
if (bhp_at_thp_limit) {
|
if (bhp_at_thp_limit) {
|
||||||
if (*bhp_at_thp_limit < this->controls_.bhp_limit) {
|
if (*bhp_at_thp_limit < this->controls_.bhp_limit) {
|
||||||
if (debug_output && this->debug) {
|
if (debug_output && this->debug) {
|
||||||
|
@ -157,7 +157,8 @@ namespace Opm {
|
|||||||
computeBhpAtThpLimitProdWithAlq(const Simulator& simulator,
|
computeBhpAtThpLimitProdWithAlq(const Simulator& simulator,
|
||||||
const SummaryState& summary_state,
|
const SummaryState& summary_state,
|
||||||
const Scalar alq_value,
|
const Scalar alq_value,
|
||||||
DeferredLogger& deferred_logger) const override;
|
DeferredLogger& deferred_logger,
|
||||||
|
bool iterate_if_no_solution) const override;
|
||||||
|
|
||||||
std::vector<Scalar> getPrimaryVars() const override;
|
std::vector<Scalar> getPrimaryVars() const override;
|
||||||
|
|
||||||
|
@ -2042,7 +2042,8 @@ namespace Opm
|
|||||||
simulator,
|
simulator,
|
||||||
summary_state,
|
summary_state,
|
||||||
this->getALQ(well_state),
|
this->getALQ(well_state),
|
||||||
deferred_logger);
|
deferred_logger,
|
||||||
|
/*iterate_if_no_solution */ true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2053,7 +2054,8 @@ namespace Opm
|
|||||||
computeBhpAtThpLimitProdWithAlq(const Simulator& simulator,
|
computeBhpAtThpLimitProdWithAlq(const Simulator& simulator,
|
||||||
const SummaryState& summary_state,
|
const SummaryState& summary_state,
|
||||||
const Scalar alq_value,
|
const Scalar alq_value,
|
||||||
DeferredLogger& deferred_logger) const
|
DeferredLogger& deferred_logger,
|
||||||
|
bool iterate_if_no_solution) const
|
||||||
{
|
{
|
||||||
// Make the frates() function.
|
// Make the frates() function.
|
||||||
auto frates = [this, &simulator, &deferred_logger](const Scalar bhp) {
|
auto frates = [this, &simulator, &deferred_logger](const Scalar bhp) {
|
||||||
@ -2079,6 +2081,9 @@ namespace Opm
|
|||||||
if (bhpAtLimit)
|
if (bhpAtLimit)
|
||||||
return bhpAtLimit;
|
return bhpAtLimit;
|
||||||
|
|
||||||
|
if (!iterate_if_no_solution)
|
||||||
|
return std::nullopt;
|
||||||
|
|
||||||
auto fratesIter = [this, &simulator, &deferred_logger](const Scalar bhp) {
|
auto fratesIter = [this, &simulator, &deferred_logger](const Scalar bhp) {
|
||||||
// Solver the well iterations to see if we are
|
// Solver the well iterations to see if we are
|
||||||
// able to get a solution with an update
|
// able to get a solution with an update
|
||||||
|
@ -234,7 +234,8 @@ namespace Opm
|
|||||||
computeBhpAtThpLimitProdWithAlq(const Simulator& ebos_simulator,
|
computeBhpAtThpLimitProdWithAlq(const Simulator& ebos_simulator,
|
||||||
const SummaryState& summary_state,
|
const SummaryState& summary_state,
|
||||||
const Scalar alq_value,
|
const Scalar alq_value,
|
||||||
DeferredLogger& deferred_logger) const override;
|
DeferredLogger& deferred_logger,
|
||||||
|
bool iterate_if_no_solution) const override;
|
||||||
|
|
||||||
void updateIPRImplicit(const Simulator& simulator,
|
void updateIPRImplicit(const Simulator& simulator,
|
||||||
WellState<Scalar>& well_state,
|
WellState<Scalar>& well_state,
|
||||||
|
@ -1699,7 +1699,7 @@ namespace Opm
|
|||||||
{
|
{
|
||||||
Scalar bhp;
|
Scalar bhp;
|
||||||
auto bhp_at_thp_limit = computeBhpAtThpLimitProdWithAlq(
|
auto bhp_at_thp_limit = computeBhpAtThpLimitProdWithAlq(
|
||||||
simulator, summary_state, alq, deferred_logger);
|
simulator, summary_state, alq, deferred_logger, /*iterate_if_no_solution */ true);
|
||||||
if (bhp_at_thp_limit) {
|
if (bhp_at_thp_limit) {
|
||||||
const auto& controls = this->well_ecl_.productionControls(summary_state);
|
const auto& controls = this->well_ecl_.productionControls(summary_state);
|
||||||
bhp = std::max(*bhp_at_thp_limit,
|
bhp = std::max(*bhp_at_thp_limit,
|
||||||
@ -2213,7 +2213,8 @@ namespace Opm
|
|||||||
return computeBhpAtThpLimitProdWithAlq(simulator,
|
return computeBhpAtThpLimitProdWithAlq(simulator,
|
||||||
summary_state,
|
summary_state,
|
||||||
this->getALQ(well_state),
|
this->getALQ(well_state),
|
||||||
deferred_logger);
|
deferred_logger,
|
||||||
|
/*iterate_if_no_solution */ true);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename TypeTag>
|
template<typename TypeTag>
|
||||||
@ -2222,7 +2223,8 @@ namespace Opm
|
|||||||
computeBhpAtThpLimitProdWithAlq(const Simulator& simulator,
|
computeBhpAtThpLimitProdWithAlq(const Simulator& simulator,
|
||||||
const SummaryState& summary_state,
|
const SummaryState& summary_state,
|
||||||
const Scalar alq_value,
|
const Scalar alq_value,
|
||||||
DeferredLogger& deferred_logger) const
|
DeferredLogger& deferred_logger,
|
||||||
|
bool iterate_if_no_solution) const
|
||||||
{
|
{
|
||||||
// Make the frates() function.
|
// Make the frates() function.
|
||||||
auto frates = [this, &simulator, &deferred_logger](const Scalar bhp) {
|
auto frates = [this, &simulator, &deferred_logger](const Scalar bhp) {
|
||||||
@ -2260,6 +2262,8 @@ namespace Opm
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!iterate_if_no_solution)
|
||||||
|
return std::nullopt;
|
||||||
|
|
||||||
auto fratesIter = [this, &simulator, &deferred_logger](const Scalar bhp) {
|
auto fratesIter = [this, &simulator, &deferred_logger](const Scalar bhp) {
|
||||||
// Solver the well iterations to see if we are
|
// Solver the well iterations to see if we are
|
||||||
|
@ -190,7 +190,8 @@ public:
|
|||||||
computeBhpAtThpLimitProdWithAlq(const Simulator& ebos_simulator,
|
computeBhpAtThpLimitProdWithAlq(const Simulator& ebos_simulator,
|
||||||
const SummaryState& summary_state,
|
const SummaryState& summary_state,
|
||||||
const Scalar alq_value,
|
const Scalar alq_value,
|
||||||
DeferredLogger& deferred_logger) const = 0;
|
DeferredLogger& deferred_logger,
|
||||||
|
bool iterate_if_no_solution) const = 0;
|
||||||
|
|
||||||
/// using the solution x to recover the solution xw for wells and applying
|
/// using the solution x to recover the solution xw for wells and applying
|
||||||
/// xw to update Well State
|
/// xw to update Well State
|
||||||
|
@ -1886,7 +1886,7 @@ namespace Opm
|
|||||||
const auto& summary_state = simulator.vanguard().summaryState();
|
const auto& summary_state = simulator.vanguard().summaryState();
|
||||||
|
|
||||||
auto bhp_at_thp_limit = computeBhpAtThpLimitProdWithAlq(
|
auto bhp_at_thp_limit = computeBhpAtThpLimitProdWithAlq(
|
||||||
simulator, summary_state, this->getALQ(well_state), deferred_logger);
|
simulator, summary_state, this->getALQ(well_state), deferred_logger, /*iterate_if_no_solution */ true);
|
||||||
if (bhp_at_thp_limit) {
|
if (bhp_at_thp_limit) {
|
||||||
std::vector<Scalar> rates(this->number_of_phases_, 0.0);
|
std::vector<Scalar> rates(this->number_of_phases_, 0.0);
|
||||||
if (thp_update_iterations) {
|
if (thp_update_iterations) {
|
||||||
|
Loading…
Reference in New Issue
Block a user