Add phaseUsage() method to BlackoilPropertiesInterface.

Also implement method in derived classes.
This commit is contained in:
Atgeirr Flø Rasmussen 2013-05-13 16:20:00 +02:00
parent 66b6dda219
commit 280bf30a26
9 changed files with 60 additions and 0 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -120,6 +120,11 @@ namespace Opm
}
PhaseUsage BlackoilPvtProperties::phaseUsage() const
{
return phase_usage_;
}
int BlackoilPvtProperties::numPhases() const
{
return phase_usage_.num_phases;

View File

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

View File

@ -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,

View File

@ -21,6 +21,8 @@
#define OPM_PVTPROPERTIESBASIC_HEADER_INCLUDED
#include <opm/core/utility/parameters/ParameterGroup.hpp>
#include <opm/core/props/BlackoilPhases.hpp>
#include <vector>
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;