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