From 280bf30a26fdf4b44c0581a75f24797faea6ba40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atgeirr=20Fl=C3=B8=20Rasmussen?= Date: Mon, 13 May 2013 16:20:00 +0200 Subject: [PATCH] Add phaseUsage() method to BlackoilPropertiesInterface. Also implement method in derived classes. --- opm/core/props/BlackoilPropertiesBasic.cpp | 6 +++++ opm/core/props/BlackoilPropertiesBasic.hpp | 3 +++ opm/core/props/BlackoilPropertiesFromDeck.cpp | 6 +++++ opm/core/props/BlackoilPropertiesFromDeck.hpp | 3 +++ .../props/BlackoilPropertiesInterface.hpp | 5 ++++ opm/core/props/pvt/BlackoilPvtProperties.cpp | 5 ++++ opm/core/props/pvt/BlackoilPvtProperties.hpp | 3 +++ opm/core/props/pvt/PvtPropertiesBasic.cpp | 24 +++++++++++++++++++ opm/core/props/pvt/PvtPropertiesBasic.hpp | 5 ++++ 9 files changed, 60 insertions(+) diff --git a/opm/core/props/BlackoilPropertiesBasic.cpp b/opm/core/props/BlackoilPropertiesBasic.cpp index d8835a5e..d0ef2f4d 100644 --- a/opm/core/props/BlackoilPropertiesBasic.cpp +++ b/opm/core/props/BlackoilPropertiesBasic.cpp @@ -83,6 +83,12 @@ namespace Opm return pvt_.numPhases(); } + /// \return Object describing the active phases. + PhaseUsage BlackoilPropertiesBasic::phaseUsage() const + { + return pvt_.phaseUsage(); + } + /// \param[in] n Number of data points. /// \param[in] p Array of n pressure values. /// \param[in] z Array of nP surface volume values. diff --git a/opm/core/props/BlackoilPropertiesBasic.hpp b/opm/core/props/BlackoilPropertiesBasic.hpp index a5b9f48d..ad84b1a3 100644 --- a/opm/core/props/BlackoilPropertiesBasic.hpp +++ b/opm/core/props/BlackoilPropertiesBasic.hpp @@ -73,6 +73,9 @@ namespace Opm /// \return P, the number of phases (also the number of components). virtual int numPhases() const; + /// \return Object describing the active phases. + virtual PhaseUsage phaseUsage() const; + /// \param[in] n Number of data points. /// \param[in] p Array of n pressure values. /// \param[in] z Array of nP surface volume values. diff --git a/opm/core/props/BlackoilPropertiesFromDeck.cpp b/opm/core/props/BlackoilPropertiesFromDeck.cpp index f0eeb505..4ffff9bf 100644 --- a/opm/core/props/BlackoilPropertiesFromDeck.cpp +++ b/opm/core/props/BlackoilPropertiesFromDeck.cpp @@ -147,6 +147,12 @@ namespace Opm return pvt_.numPhases(); } + /// \return Object describing the active phases. + PhaseUsage BlackoilPropertiesFromDeck::phaseUsage() const + { + return pvt_.phaseUsage(); + } + /// \param[in] n Number of data points. /// \param[in] p Array of n pressure values. /// \param[in] z Array of nP surface volume values. diff --git a/opm/core/props/BlackoilPropertiesFromDeck.hpp b/opm/core/props/BlackoilPropertiesFromDeck.hpp index da8732a5..00a03454 100644 --- a/opm/core/props/BlackoilPropertiesFromDeck.hpp +++ b/opm/core/props/BlackoilPropertiesFromDeck.hpp @@ -89,6 +89,9 @@ namespace Opm /// \return P, the number of phases (also the number of components). virtual int numPhases() const; + /// \return Object describing the active phases. + virtual PhaseUsage phaseUsage() const; + /// \param[in] n Number of data points. /// \param[in] p Array of n pressure values. /// \param[in] z Array of nP surface volume values. diff --git a/opm/core/props/BlackoilPropertiesInterface.hpp b/opm/core/props/BlackoilPropertiesInterface.hpp index 501c8a40..adad4bcc 100644 --- a/opm/core/props/BlackoilPropertiesInterface.hpp +++ b/opm/core/props/BlackoilPropertiesInterface.hpp @@ -23,6 +23,8 @@ namespace Opm { + class PhaseUsage; + /// Abstract base class for blackoil fluid and reservoir properties. /// Supports variable number of spatial dimensions, called D. /// Supports variable number of phases, but assumes that @@ -59,6 +61,9 @@ namespace Opm /// \return P, the number of phases (also the number of components). virtual int numPhases() const = 0; + /// \return Object describing the active phases. + virtual PhaseUsage phaseUsage() const = 0; + /// \param[in] n Number of data points. /// \param[in] p Array of n pressure values. /// \param[in] z Array of nP surface volume values. diff --git a/opm/core/props/pvt/BlackoilPvtProperties.cpp b/opm/core/props/pvt/BlackoilPvtProperties.cpp index c3145c16..bebbc1d1 100644 --- a/opm/core/props/pvt/BlackoilPvtProperties.cpp +++ b/opm/core/props/pvt/BlackoilPvtProperties.cpp @@ -120,6 +120,11 @@ namespace Opm } + PhaseUsage BlackoilPvtProperties::phaseUsage() const + { + return phase_usage_; + } + int BlackoilPvtProperties::numPhases() const { return phase_usage_.num_phases; diff --git a/opm/core/props/pvt/BlackoilPvtProperties.hpp b/opm/core/props/pvt/BlackoilPvtProperties.hpp index 385cc295..26fee791 100644 --- a/opm/core/props/pvt/BlackoilPvtProperties.hpp +++ b/opm/core/props/pvt/BlackoilPvtProperties.hpp @@ -55,6 +55,9 @@ namespace Opm /// data without fitting a spline. void init(const EclipseGridParser& deck, const int samples); + /// \return Object describing the active phases. + PhaseUsage phaseUsage() const; + /// Number of active phases. int numPhases() const; diff --git a/opm/core/props/pvt/PvtPropertiesBasic.cpp b/opm/core/props/pvt/PvtPropertiesBasic.cpp index 6e5beff6..2d155969 100644 --- a/opm/core/props/pvt/PvtPropertiesBasic.cpp +++ b/opm/core/props/pvt/PvtPropertiesBasic.cpp @@ -85,6 +85,30 @@ namespace Opm return density_.size(); } + PhaseUsage PvtPropertiesBasic::phaseUsage() const + { + PhaseUsage pu; + pu.num_phases = numPhases(); + if (pu.num_phases == 2) { + // Might just as well assume water-oil. + pu.phase_used[BlackoilPhases::Aqua] = true; + pu.phase_used[BlackoilPhases::Liquid] = true; + pu.phase_used[BlackoilPhases::Vapour] = false; + pu.phase_pos[BlackoilPhases::Aqua] = 0; + pu.phase_pos[BlackoilPhases::Liquid] = 1; + pu.phase_pos[BlackoilPhases::Vapour] = 1; // Unused. + } else { + ASSERT(pu.num_phases == 3); + pu.phase_used[BlackoilPhases::Aqua] = true; + pu.phase_used[BlackoilPhases::Liquid] = true; + pu.phase_used[BlackoilPhases::Vapour] = true; + pu.phase_pos[BlackoilPhases::Aqua] = 0; + pu.phase_pos[BlackoilPhases::Liquid] = 1; + pu.phase_pos[BlackoilPhases::Vapour] = 2; + } + return pu; + } + void PvtPropertiesBasic::mu(const int n, diff --git a/opm/core/props/pvt/PvtPropertiesBasic.hpp b/opm/core/props/pvt/PvtPropertiesBasic.hpp index 002b9954..e9198ff9 100644 --- a/opm/core/props/pvt/PvtPropertiesBasic.hpp +++ b/opm/core/props/pvt/PvtPropertiesBasic.hpp @@ -21,6 +21,8 @@ #define OPM_PVTPROPERTIESBASIC_HEADER_INCLUDED #include +#include +#include namespace Opm { @@ -53,6 +55,9 @@ namespace Opm /// Number of active phases. int numPhases() const; + /// \return Object describing the active phases. + PhaseUsage phaseUsage() const; + /// Densities of stock components at surface conditions. /// \return Array of size numPhases(). const double* surfaceDensities() const;