From f7ea7674c0fbbc8498781e1605e733337e662742 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A5rd=20Skaflestad?= Date: Tue, 10 May 2022 10:03:27 +0200 Subject: [PATCH] Provide Accessor for WGRUPCON's Raw Phase Value Needed for restart file compatibility. --- opm/input/eclipse/Schedule/Well/Well.hpp | 3 + src/opm/input/eclipse/Schedule/Well/Well.cpp | 67 +++++++++++++------- 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/opm/input/eclipse/Schedule/Well/Well.hpp b/opm/input/eclipse/Schedule/Well/Well.hpp index 636d0a17e..b436792bb 100644 --- a/opm/input/eclipse/Schedule/Well/Well.hpp +++ b/opm/input/eclipse/Schedule/Well/Well.hpp @@ -509,6 +509,7 @@ public: bool isAvailableForGroupControl() const; double getGuideRate() const; GuideRateTarget getGuideRatePhase() const; + GuideRateTarget getRawGuideRatePhase() const; double getGuideRateScalingFactor() const; bool hasBeenDefined(size_t timeStep) const; @@ -690,6 +691,8 @@ private: void switchToInjector(); void switchToProducer(); + GuideRateTarget preferredPhaseAsGuideRatePhase() const; + std::string wname; std::string group_name; std::size_t init_step; diff --git a/src/opm/input/eclipse/Schedule/Well/Well.cpp b/src/opm/input/eclipse/Schedule/Well/Well.cpp index f63c0b949..7c1729d96 100644 --- a/src/opm/input/eclipse/Schedule/Well/Well.cpp +++ b/src/opm/input/eclipse/Schedule/Well/Well.cpp @@ -17,29 +17,40 @@ along with OPM. If not, see . */ -#include +#include -#include -#include #include #include -#include + +#include #include -#include +#include + +#include #include #include #include -#include -#include -#include + #include +#include + +#include +#include + #include "../MSW/Compsegs.hpp" #include +#include +#include +#include #include #include +#include #include +#include + +#include namespace Opm { @@ -804,26 +815,38 @@ double Well::getGuideRate() const { return this->guide_rate.guide_rate; } -Well::GuideRateTarget Well::getGuideRatePhase() const { - if (this->wtype.producer()) - return this->guide_rate.guide_phase; +Well::GuideRateTarget Well::getGuideRatePhase() const +{ + const auto target = this->getRawGuideRatePhase(); - if (this->guide_rate.guide_phase == GuideRateTarget::RAT) { - switch (this->getPreferredPhase()) { - case Phase::OIL: - return GuideRateTarget::OIL; - case Phase::GAS: - return GuideRateTarget::GAS; - case Phase::WATER: - return GuideRateTarget::WAT; - default: - throw std::logic_error("Can not convert well preferred phase to GuideRate target phase"); - } + if (this->isInjector() && (target == GuideRateTarget::RAT)) { + return this->preferredPhaseAsGuideRatePhase(); } + return target; +} + +Well::GuideRateTarget Well::getRawGuideRatePhase() const +{ return this->guide_rate.guide_phase; } +Well::GuideRateTarget Well::preferredPhaseAsGuideRatePhase() const +{ + switch (this->getPreferredPhase()) { + case Phase::OIL: return GuideRateTarget::OIL; + case Phase::GAS: return GuideRateTarget::GAS; + case Phase::WATER: return GuideRateTarget::WAT; + + default: + throw std::logic_error { + fmt::format("Unable to convert well preferred " + "phase {} to GuideRate target phase", + static_cast(this->getPreferredPhase())) + }; + } +} + double Well::getGuideRateScalingFactor() const { return this->guide_rate.scale_factor; }