Provide Accessor for WGRUPCON's Raw Phase Value
Needed for restart file compatibility.
This commit is contained in:
parent
c91bde8182
commit
f7ea7674c0
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user