Provide Accessor for WGRUPCON's Raw Phase Value

Needed for restart file compatibility.
This commit is contained in:
Bård Skaflestad 2022-05-10 10:03:27 +02:00
parent c91bde8182
commit f7ea7674c0
2 changed files with 48 additions and 22 deletions

View File

@ -509,6 +509,7 @@ public:
bool isAvailableForGroupControl() const; bool isAvailableForGroupControl() const;
double getGuideRate() const; double getGuideRate() const;
GuideRateTarget getGuideRatePhase() const; GuideRateTarget getGuideRatePhase() const;
GuideRateTarget getRawGuideRatePhase() const;
double getGuideRateScalingFactor() const; double getGuideRateScalingFactor() const;
bool hasBeenDefined(size_t timeStep) const; bool hasBeenDefined(size_t timeStep) const;
@ -690,6 +691,8 @@ private:
void switchToInjector(); void switchToInjector();
void switchToProducer(); void switchToProducer();
GuideRateTarget preferredPhaseAsGuideRatePhase() const;
std::string wname; std::string wname;
std::string group_name; std::string group_name;
std::size_t init_step; std::size_t init_step;

View File

@ -17,29 +17,40 @@
along with OPM. If not, see <http://www.gnu.org/licenses/>. along with OPM. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <fmt/format.h> #include <opm/input/eclipse/Schedule/Well/Well.hpp>
#include <opm/input/eclipse/Deck/DeckRecord.hpp>
#include <opm/input/eclipse/Deck/DeckKeyword.hpp>
#include <opm/io/eclipse/rst/well.hpp> #include <opm/io/eclipse/rst/well.hpp>
#include <opm/output/eclipse/VectorItems/well.hpp> #include <opm/output/eclipse/VectorItems/well.hpp>
#include <opm/input/eclipse/Parser/ParserKeywords/W.hpp>
#include <opm/input/eclipse/EclipseState/Grid/EclipseGrid.hpp>
#include <opm/input/eclipse/EclipseState/Runspec.hpp> #include <opm/input/eclipse/EclipseState/Runspec.hpp>
#include <opm/input/eclipse/Schedule/Well/Well.hpp> #include <opm/input/eclipse/EclipseState/TracerConfig.hpp>
#include <opm/input/eclipse/Schedule/ScheduleGrid.hpp>
#include <opm/input/eclipse/Schedule/UDQ/UDQActive.hpp> #include <opm/input/eclipse/Schedule/UDQ/UDQActive.hpp>
#include <opm/input/eclipse/Schedule/Well/WellInjectionProperties.hpp> #include <opm/input/eclipse/Schedule/Well/WellInjectionProperties.hpp>
#include <opm/input/eclipse/Schedule/Well/WellProductionProperties.hpp> #include <opm/input/eclipse/Schedule/Well/WellProductionProperties.hpp>
#include <opm/input/eclipse/EclipseState/Grid/EclipseGrid.hpp>
#include <opm/input/eclipse/Schedule/ScheduleGrid.hpp>
#include <opm/input/eclipse/EclipseState/TracerConfig.hpp>
#include <opm/common/utility/shmatch.hpp> #include <opm/common/utility/shmatch.hpp>
#include <opm/input/eclipse/Parser/ParserKeywords/W.hpp>
#include <opm/input/eclipse/Deck/DeckRecord.hpp>
#include <opm/input/eclipse/Deck/DeckKeyword.hpp>
#include "../MSW/Compsegs.hpp" #include "../MSW/Compsegs.hpp"
#include <cmath> #include <cmath>
#include <cstddef>
#include <memory>
#include <optional>
#include <ostream> #include <ostream>
#include <stdexcept> #include <stdexcept>
#include <string>
#include <utility> #include <utility>
#include <vector>
#include <fmt/format.h>
namespace Opm { namespace Opm {
@ -804,26 +815,38 @@ double Well::getGuideRate() const {
return this->guide_rate.guide_rate; return this->guide_rate.guide_rate;
} }
Well::GuideRateTarget Well::getGuideRatePhase() const { Well::GuideRateTarget Well::getGuideRatePhase() const
if (this->wtype.producer()) {
return this->guide_rate.guide_phase; const auto target = this->getRawGuideRatePhase();
if (this->guide_rate.guide_phase == GuideRateTarget::RAT) { if (this->isInjector() && (target == GuideRateTarget::RAT)) {
switch (this->getPreferredPhase()) { return this->preferredPhaseAsGuideRatePhase();
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");
}
} }
return target;
}
Well::GuideRateTarget Well::getRawGuideRatePhase() const
{
return this->guide_rate.guide_phase; 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<int>(this->getPreferredPhase()))
};
}
}
double Well::getGuideRateScalingFactor() const { double Well::getGuideRateScalingFactor() const {
return this->guide_rate.scale_factor; return this->guide_rate.scale_factor;
} }