fix issue when GRUP is used in WCONPROD and WCONINJE and NONE group control

Use a bhp control when a well is controlled by a unvalied group control
This commit is contained in:
Tor Harald Sandve 2019-11-21 09:58:32 +01:00
parent c922bf3b30
commit 9e64896054
2 changed files with 29 additions and 9 deletions

View File

@ -1998,8 +1998,12 @@ namespace Opm
return;
}
if (!group.isInjectionGroup())
if (!group.isInjectionGroup() || currentGroupControl == Group::InjectionCMode::NONE) {
// use bhp as control eq and let the updateControl code find a vallied control
const auto& controls = well.injectionControls(summaryState);
control_eq = getSegmentPressure(0) - controls.bhp_limit;
return;
}
const auto& groupcontrols = group.injectionControls(summaryState);
@ -2045,7 +2049,8 @@ namespace Opm
switch(currentGroupControl) {
case Group::InjectionCMode::NONE:
{
OPM_DEFLOG_THROW(std::runtime_error, "NONE group control not implemented for injectors" , deferred_logger);
// The NONE case is handled earlier
assert(false);
break;
}
case Group::InjectionCMode::RATE:
@ -2119,8 +2124,12 @@ namespace Opm
assembleGroupProductionControl(parent, well_state, schedule, summaryState, control_eq, efficiencyFactor, deferred_logger);
return;
}
if (!group.isProductionGroup())
if (!group.isProductionGroup() || currentGroupControl == Group::ProductionCMode::NONE) {
// use bhp as control eq and let the updateControl code find a vallied control
const auto& controls = well.productionControls(summaryState);
control_eq = getSegmentPressure(0) - controls.bhp_limit;
return;
}
const auto& groupcontrols = group.productionControls(summaryState);
const std::vector<double>& groupTargetReductions = well_state.currentProductionGroupReductionRates(group.name());
@ -2128,7 +2137,8 @@ namespace Opm
switch(currentGroupControl) {
case Group::ProductionCMode::NONE:
{
OPM_DEFLOG_THROW(std::runtime_error, "NONE group control not implemented for producers" , deferred_logger);
// The NONE case is handled earlier
assert(false);
break;
}
case Group::ProductionCMode::ORAT:

View File

@ -984,8 +984,13 @@ namespace Opm
return;
}
if (!group.isInjectionGroup())
if (!group.isInjectionGroup() || currentGroupControl == Group::InjectionCMode::NONE) {
// use bhp as control eq and let the updateControl code find a vallied control
const auto& controls = well.injectionControls(summaryState);
control_eq = getBhp() - controls.bhp_limit;
return;
}
int phasePos;
Well::GuideRateTarget wellTarget;
@ -1025,7 +1030,8 @@ namespace Opm
switch(currentGroupControl) {
case Group::InjectionCMode::NONE:
{
OPM_DEFLOG_THROW(std::runtime_error, "NONE group control not implemented for injectors" , deferred_logger);
// The NONE case is handled earlier
assert(false);
break;
}
case Group::InjectionCMode::RATE:
@ -1113,8 +1119,12 @@ namespace Opm
return;
}
if (!group.isProductionGroup())
if (!group.isProductionGroup() || currentGroupControl == Group::ProductionCMode::NONE) {
// use bhp as control eq and let the updateControl code find a vallied control
const auto& controls = well.productionControls(summaryState);
control_eq = getBhp() - controls.bhp_limit;
return;
}
const auto& groupcontrols = group.productionControls(summaryState);
@ -1123,8 +1133,8 @@ namespace Opm
switch(currentGroupControl) {
case Group::ProductionCMode::NONE:
{
OPM_DEFLOG_THROW(std::runtime_error, "NONE group control not implemented for producers" , deferred_logger);
break;
// The NONE case is handled earlier
assert(false);
}
case Group::ProductionCMode::ORAT:
{