diff --git a/opm/simulators/wells/BlackoilWellModel_impl.hpp b/opm/simulators/wells/BlackoilWellModel_impl.hpp index 861bc328b..643cdc165 100644 --- a/opm/simulators/wells/BlackoilWellModel_impl.hpp +++ b/opm/simulators/wells/BlackoilWellModel_impl.hpp @@ -276,7 +276,7 @@ namespace Opm { + ScheduleEvents::INJECTION_UPDATE + ScheduleEvents::NEW_WELL; - if(!schedule().hasWellEvent(well.name(), effective_events_mask, timeStepIdx)) + if(!schedule().hasWellGroupEvent(well.name(), effective_events_mask, timeStepIdx)) continue; if (well.isProducer()) { @@ -1806,14 +1806,11 @@ namespace Opm { std::ostringstream ss; - if (oldControl != newControl) { - const std::string from = Group::ProductionCMode2String(oldControl); - ss << "Group " << group.name() << " exceeding " - << from << " limit \n"; - } switch(exceed_action) { case Group::ExceedAction::NONE: { - OPM_DEFLOG_THROW(std::runtime_error, "Group " + group.name() + "GroupProductionExceedLimit NONE not implemented", deferred_logger); + if (oldControl != newControl && oldControl != Group::ProductionCMode::NONE) { + ss << "Group production exceed limit is NONE for group " + group.name() + ". Nothing happens"; + } break; } case Group::ExceedAction::CON: { diff --git a/opm/simulators/wells/StandardWell_impl.hpp b/opm/simulators/wells/StandardWell_impl.hpp index d7fb3d92f..6c168a627 100644 --- a/opm/simulators/wells/StandardWell_impl.hpp +++ b/opm/simulators/wells/StandardWell_impl.hpp @@ -707,7 +707,7 @@ namespace Opm const auto& fs = intQuants.fluidState(); Eval perf_pressure = getPerfCellPressure(fs); const double drawdown = well_state.perfPress()[first_perf_ + perf] - perf_pressure.value(); - const bool new_well = schedule.hasWellEvent(name(), ScheduleEvents::NEW_WELL, current_step_); + const bool new_well = schedule.hasWellGroupEvent(name(), ScheduleEvents::NEW_WELL, current_step_); double productivity_index = cq_s[compIdx].value() / drawdown; scaleProductivityIndex(perf, productivity_index, new_well, deferred_logger); well_state.productivityIndex()[np*index_of_well_ + p] += productivity_index; diff --git a/opm/simulators/wells/WellGroupHelpers.hpp b/opm/simulators/wells/WellGroupHelpers.hpp index 7ad1e832d..32e525d77 100644 --- a/opm/simulators/wells/WellGroupHelpers.hpp +++ b/opm/simulators/wells/WellGroupHelpers.hpp @@ -35,21 +35,22 @@ namespace Opm { setCmodeGroup( schedule.getGroup(groupName, reportStepIdx), schedule, summaryState, reportStepIdx, wellState); } + // use NONE as default control if (!wellState.hasInjectionGroupControl(group.name())) { - // use NONE as default control wellState.setCurrentInjectionGroupControl(group.name(), Group::InjectionCMode::NONE); - if (group.isInjectionGroup()) { - const auto controls = group.injectionControls(summaryState); - wellState.setCurrentInjectionGroupControl(group.name(), controls.cmode); - } } if (!wellState.hasProductionGroupControl(group.name())) { - // use NONE as default control wellState.setCurrentProductionGroupControl(group.name(), Group::ProductionCMode::NONE); - if (group.isProductionGroup()) { - const auto controls = group.productionControls(summaryState); - wellState.setCurrentProductionGroupControl(group.name(), controls.cmode); - } + } + + if (group.isInjectionGroup() && schedule.hasWellGroupEvent(group.name(), ScheduleEvents::GROUP_INJECTION_UPDATE, reportStepIdx)) { + const auto controls = group.injectionControls(summaryState); + wellState.setCurrentInjectionGroupControl(group.name(), controls.cmode); + } + + if (group.isProductionGroup() && schedule.hasWellGroupEvent(group.name(), ScheduleEvents::GROUP_PRODUCTION_UPDATE, reportStepIdx)) { + const auto controls = group.productionControls(summaryState); + wellState.setCurrentProductionGroupControl(group.name(), controls.cmode); } } diff --git a/opm/simulators/wells/WellStateFullyImplicitBlackoil.hpp b/opm/simulators/wells/WellStateFullyImplicitBlackoil.hpp index 687e1e42b..727f3d73a 100644 --- a/opm/simulators/wells/WellStateFullyImplicitBlackoil.hpp +++ b/opm/simulators/wells/WellStateFullyImplicitBlackoil.hpp @@ -109,7 +109,7 @@ namespace Opm + ScheduleEvents::INJECTION_UPDATE; for (int w = 0; w < nw; ++w) { effective_events_occurred_[w] - = schedule.hasWellEvent(wells_ecl[w].name(), effective_events_mask, report_step); + = schedule.hasWellGroupEvent(wells_ecl[w].name(), effective_events_mask, report_step); } } // end of if (!well_ecl.empty() )