From 618595e5382350947193451bd0d1905dcf6728d2 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Thu, 5 Nov 2020 08:53:21 +0100 Subject: [PATCH] Rewrite branching logic in AggregateGroupData --- src/opm/output/eclipse/AggregateGroupData.cpp | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/src/opm/output/eclipse/AggregateGroupData.cpp b/src/opm/output/eclipse/AggregateGroupData.cpp index ceb86bebf..1a63ba72b 100644 --- a/src/opm/output/eclipse/AggregateGroupData.cpp +++ b/src/opm/output/eclipse/AggregateGroupData.cpp @@ -440,7 +440,6 @@ void productionGroup(const Opm::Schedule& sched, */ // default value - iGrp[nwgmax + 5] = -1; const auto& cgroup = controlGroup(sched, sumState, group, simStep); const auto& deck_cmode = group.gconprod_cmode(); // Start branching for determining iGrp[nwgmax + 5] @@ -450,38 +449,52 @@ void productionGroup(const Opm::Schedule& sched, throw std::logic_error("Got cgroup == FIELD - uncertain logic"); + iGrp[nwgmax + 5] = -1; if (groupProductionControllable(sched, sumState, group, simStep)) { // this section applies if group is controllable - i.e. has wells that may be controlled if (!group.productionGroupControlAvailable() && (!cgroup)) { // group can respond to higher level control iGrp[nwgmax + 5] = 0; - } else if (((active_cmode != Opm::Group::ProductionCMode::NONE)) && (!cgroup)) { + goto CGROUP_DONE; + } + + + if (((active_cmode != Opm::Group::ProductionCMode::NONE)) && (!cgroup)) { // group is constrained by its own limits or controls // if (active_cmode != Opm::Group::ProductionCMode::FLD) - need to use this test? - else remove iGrp[nwgmax + 5] = -1; // only value that seems to work when no group at higher level has active control - } else if (cgroup) { + goto CGROUP_DONE; + } + + + if (cgroup) { if (((deck_cmode == Opm::Group::ProductionCMode::FLD) || (deck_cmode == Opm::Group::ProductionCMode::NONE)) && (prod_guide_rate_def != Opm::Group::GuideRateTarget::NO_GUIDE_RATE)) { iGrp[nwgmax + 5] = cgroup->insert_index(); } else { iGrp[nwgmax + 5] = 1; } - } else if (higherLevelProdCMode_NotNoneFld(sched, group, simStep)) { - if (!((deck_cmode == Opm::Group::ProductionCMode::FLD) - || (deck_cmode == Opm::Group::ProductionCMode::NONE))) { - iGrp[nwgmax + 5] = -1; - } else { - iGrp[nwgmax + 5] = 1; - } - } else if ((deck_cmode == Opm::Group::ProductionCMode::FLD) - || (deck_cmode == Opm::Group::ProductionCMode::NONE)) { - iGrp[nwgmax + 5] = -1; - } else { - iGrp[nwgmax + 5] = -1; + goto CGROUP_DONE; } + + + if (higherLevelProdCMode_NotNoneFld(sched, group, simStep)) { + iGrp[nwgmax + 5] = -1; + + if (deck_cmode == Opm::Group::ProductionCMode::FLD) + iGrp[nwgmax] = 1; + if (deck_cmode == Opm::Group::ProductionCMode::NONE) + iGrp[nwgmax] = 1; + + goto CGROUP_DONE; + } + + goto CGROUP_DONE; } else if (deck_cmode == Opm::Group::ProductionCMode::NONE) { iGrp[nwgmax + 5] = 1; } + CGROUP_DONE: + // Set iGrp for [nwgmax + 7] /*