mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Merge pull request #4579 from hakonhagland/glwtest_it
Check all ALQ values when testing a gaslift well for reopening
This commit is contained in:
commit
ec4a927d1b
@ -267,6 +267,13 @@ public:
|
|||||||
|
|
||||||
void checkWellOperability(const Simulator& ebos_simulator, const WellState& well_state, DeferredLogger& deferred_logger);
|
void checkWellOperability(const Simulator& ebos_simulator, const WellState& well_state, DeferredLogger& deferred_logger);
|
||||||
|
|
||||||
|
bool gliftBeginTimeStepWellTestIterateWellEquations(
|
||||||
|
const Simulator& ebos_simulator,
|
||||||
|
const double dt,
|
||||||
|
WellState& well_state,
|
||||||
|
const GroupState &group_state,
|
||||||
|
DeferredLogger& deferred_logger);
|
||||||
|
|
||||||
void gliftBeginTimeStepWellTestUpdateALQ(const Simulator& ebos_simulator,
|
void gliftBeginTimeStepWellTestUpdateALQ(const Simulator& ebos_simulator,
|
||||||
WellState& well_state,
|
WellState& well_state,
|
||||||
DeferredLogger& deferred_logger);
|
DeferredLogger& deferred_logger);
|
||||||
|
@ -382,12 +382,16 @@ namespace Opm
|
|||||||
const double dt = ebosSimulator.timeStepSize();
|
const double dt = ebosSimulator.timeStepSize();
|
||||||
const auto& summary_state = ebosSimulator.vanguard().summaryState();
|
const auto& summary_state = ebosSimulator.vanguard().summaryState();
|
||||||
const bool has_thp_limit = this->wellHasTHPConstraints(summary_state);
|
const bool has_thp_limit = this->wellHasTHPConstraints(summary_state);
|
||||||
if (has_thp_limit)
|
bool converged;
|
||||||
|
if (has_thp_limit) {
|
||||||
well_state.well(this->indexOfWell()).production_cmode = Well::ProducerCMode::THP;
|
well_state.well(this->indexOfWell()).production_cmode = Well::ProducerCMode::THP;
|
||||||
else
|
converged = gliftBeginTimeStepWellTestIterateWellEquations(
|
||||||
|
ebosSimulator, dt, well_state, group_state, deferred_logger);
|
||||||
|
}
|
||||||
|
else {
|
||||||
well_state.well(this->indexOfWell()).production_cmode = Well::ProducerCMode::BHP;
|
well_state.well(this->indexOfWell()).production_cmode = Well::ProducerCMode::BHP;
|
||||||
|
converged = iterateWellEquations(ebosSimulator, dt, well_state, group_state, deferred_logger);
|
||||||
const bool converged = iterateWellEquations(ebosSimulator, dt, well_state, group_state, deferred_logger);
|
}
|
||||||
if (converged) {
|
if (converged) {
|
||||||
deferred_logger.debug("WellTest: Well equation for well " + this->name() + " converged");
|
deferred_logger.debug("WellTest: Well equation for well " + this->name() + " converged");
|
||||||
return true;
|
return true;
|
||||||
@ -584,6 +588,42 @@ namespace Opm
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename TypeTag>
|
||||||
|
bool
|
||||||
|
WellInterface<TypeTag>::
|
||||||
|
gliftBeginTimeStepWellTestIterateWellEquations(
|
||||||
|
const Simulator& ebos_simulator,
|
||||||
|
const double dt,
|
||||||
|
WellState& well_state,
|
||||||
|
const GroupState &group_state,
|
||||||
|
DeferredLogger& deferred_logger)
|
||||||
|
{
|
||||||
|
const auto& well_name = this->name();
|
||||||
|
const auto& summary_state = ebos_simulator.vanguard().summaryState();
|
||||||
|
assert(this->wellHasTHPConstraints(summary_state));
|
||||||
|
const auto& schedule = ebos_simulator.vanguard().schedule();
|
||||||
|
auto report_step_idx = ebos_simulator.episodeIndex();
|
||||||
|
const auto& glo = schedule.glo(report_step_idx);
|
||||||
|
if(glo.has_well(well_name)) {
|
||||||
|
auto increment = glo.gaslift_increment();
|
||||||
|
auto alq = well_state.getALQ(well_name);
|
||||||
|
bool converged;
|
||||||
|
while (alq > 0) {
|
||||||
|
well_state.setALQ(well_name, alq);
|
||||||
|
if ((converged =
|
||||||
|
iterateWellEquations(ebos_simulator, dt, well_state, group_state, deferred_logger)))
|
||||||
|
{
|
||||||
|
return converged;
|
||||||
|
}
|
||||||
|
alq -= increment;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return iterateWellEquations(ebos_simulator, dt, well_state, group_state, deferred_logger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template<typename TypeTag>
|
template<typename TypeTag>
|
||||||
void
|
void
|
||||||
WellInterface<TypeTag>::
|
WellInterface<TypeTag>::
|
||||||
|
Loading…
Reference in New Issue
Block a user