From a033329b144d812fe1227a99f9d07f94b8b2e2fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A5rd=20Skaflestad?= Date: Tue, 3 Dec 2013 15:56:18 +0100 Subject: [PATCH] Add a facility for checking/assigning presence of free phases This is intentionally black-oil specific because we presently do no know how to handle other cases (e.g., more phases or number of phases different from number of components). --- opm/core/props/BlackoilPhases.hpp | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/opm/core/props/BlackoilPhases.hpp b/opm/core/props/BlackoilPhases.hpp index eb01f752..ebfd1f72 100644 --- a/opm/core/props/BlackoilPhases.hpp +++ b/opm/core/props/BlackoilPhases.hpp @@ -40,6 +40,40 @@ namespace Opm int phase_pos[MaxNumPhases]; }; + /// Check or assign presence of a formed, free phase. Limited to + /// the 'BlackoilPhases'. + /// + /// Use a std::vector to represent the conditions + /// in an entire model. + class PhasePresence + { + public: + PhasePresence() + : present_(0) + {} + + bool hasFreeWater() const { return present(BlackoilPhases::Aqua ); } + bool hasFreeOil () const { return present(BlackoilPhases::Liquid); } + bool hasFreeGas () const { return present(BlackoilPhases::Vapour); } + + void setFreeWater() { insert(BlackoilPhases::Aqua ); } + void setFreeOil () { insert(BlackoilPhases::Liquid); } + void setFreeGas () { insert(BlackoilPhases::Vapour); } + + private: + unsigned char present_; + + bool present(const BlackoilPhases::PhaseIndex i) const + { + return present_ & (1 << i); + } + + void insert(const BlackoilPhases::PhaseIndex i) + { + present_ |= (1 << i); + } + }; + } // namespace Opm #endif // OPM_BLACKOILPHASES_HEADER_INCLUDED