From d312f760e1b0e89f64b1deece458bb539ed0429f 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/PvtPropertiesBasic.cpp | 24 +++++++++++++++++++ opm/core/props/pvt/PvtPropertiesBasic.hpp | 5 ++++ 7 files changed, 52 insertions(+) diff --git a/opm/core/props/BlackoilPropertiesBasic.cpp b/opm/core/props/BlackoilPropertiesBasic.cpp index d8835a5e2..d0ef2f4dd 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 a5b9f48d0..ad84b1a32 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 f0eeb5050..4ffff9bfd 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 da8732a5b..00a034545 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 501c8a406..adad4bccb 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/PvtPropertiesBasic.cpp b/opm/core/props/pvt/PvtPropertiesBasic.cpp index 6e5beff60..2d155969d 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 002b99542..e9198ff97 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;