mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Iterate ALQ when testing gaslift well
When testing a gaslift well under THP control, if the well does not converge with maximum alq, try to reduce alq in increments until well equations converge.
This commit is contained in:
parent
c52ab4ccd5
commit
4ba5e3efad
@ -263,6 +263,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,38 @@ 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);
|
||||||
|
assert(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;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename TypeTag>
|
template<typename TypeTag>
|
||||||
void
|
void
|
||||||
WellInterface<TypeTag>::
|
WellInterface<TypeTag>::
|
||||||
|
Loading…
Reference in New Issue
Block a user