mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Shut production well if zero rate and disallowing crossflow.
This commit is contained in:
parent
a89e8f6457
commit
f09dcda21c
@ -636,6 +636,8 @@ namespace Opm {
|
||||
{
|
||||
std::vector<WellInterfacePtr> well_container;
|
||||
|
||||
Opm::DeferredLogger local_deferredLogger;
|
||||
|
||||
const int nw = numLocalWells();
|
||||
|
||||
if (nw > 0) {
|
||||
@ -684,6 +686,40 @@ namespace Opm {
|
||||
continue;
|
||||
}
|
||||
|
||||
// If a production well disallows crossflow and its
|
||||
// (prediction type) rate control is zero, then it is effectively shut.
|
||||
if (!well_ecl.getAllowCrossFlow() && well_ecl.isProducer() && well_ecl.predictionMode()) {
|
||||
const auto& summaryState = ebosSimulator_.vanguard().summaryState();
|
||||
auto prod_controls = well_ecl.productionControls(summaryState);
|
||||
bool zero_rate_control = false;
|
||||
switch (prod_controls.cmode) {
|
||||
case Well::ProducerCMode::ORAT:
|
||||
zero_rate_control = (prod_controls.oil_rate == 0.0);
|
||||
break;
|
||||
case Well::ProducerCMode::WRAT:
|
||||
zero_rate_control = (prod_controls.water_rate == 0.0);
|
||||
break;
|
||||
case Well::ProducerCMode::GRAT:
|
||||
zero_rate_control = (prod_controls.gas_rate == 0.0);
|
||||
break;
|
||||
case Well::ProducerCMode::LRAT:
|
||||
zero_rate_control = (prod_controls.liquid_rate == 0.0);
|
||||
break;
|
||||
case Well::ProducerCMode::RESV:
|
||||
zero_rate_control = (prod_controls.resv_rate == 0.0);
|
||||
break;
|
||||
default:
|
||||
// Might still have zero rate controls, but is pressure controlled.
|
||||
zero_rate_control = false;
|
||||
}
|
||||
if (zero_rate_control) {
|
||||
// Treat as shut, do not add to container.
|
||||
local_deferredLogger.info(" Well shut due to zero rate control and disallowing crossflow: " + well_ecl.name());
|
||||
well_state_.shutWell(w);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (well_status == Well::Status::STOP) {
|
||||
well_state_.thp()[w] = 0.;
|
||||
wellIsStopped = true;
|
||||
@ -721,6 +757,12 @@ namespace Opm {
|
||||
}
|
||||
}
|
||||
|
||||
// Collect log messages and print.
|
||||
Opm::DeferredLogger global_deferredLogger = gatherDeferredLogger(local_deferredLogger);
|
||||
if (terminal_output_) {
|
||||
global_deferredLogger.logMessages();
|
||||
}
|
||||
|
||||
return well_container;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user