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;
}