/* Copyright 2012 SINTEF ICT, Applied Mathematics. Copyright 2015 IRIS AS This file is part of the Open Porous Media project (OPM). OPM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OPM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OPM. If not, see . */ #ifndef OPM_BLACKOILSTATE_HEADER_INCLUDED #define OPM_BLACKOILSTATE_HEADER_INCLUDED #include #include #include #include namespace Opm { /// Simulator state for a blackoil simulator. class BlackoilState : public SimulatorState { public: using SimulatorState :: cellData ; virtual void init(const UnstructuredGrid& grid, int num_phases); virtual void init(int number_of_cells, int number_of_faces, int num_phases); /// Set the first saturation to either its min or max value in /// the indicated cells. The second saturation value s2 is set /// to (1.0 - s1) for each cell. Any further saturation values /// are unchanged. void setFirstSat(const std::vector& cells, const Opm::BlackoilPropertiesInterface& props, ExtremalSat es); virtual bool equals(const SimulatorState& other, double epsilon = 1e-8) const; std::vector& surfacevol () { return cellData()[ surfaceVolId_ ]; } std::vector& gasoilratio () { return cellData()[ gorId_ ] ; } std::vector& rv () {return cellData()[ rvId_ ] ; } const std::vector& surfacevol () const { return cellData()[ surfaceVolId_ ]; } const std::vector& gasoilratio () const { return cellData()[ gorId_ ] ; } const std::vector& rv () const { return cellData()[ rvId_ ] ; } private: int gorId_ ; // no entries = no cells (gas oil ratio id) int rvId_ ; // no entries = no cells ( rv id ) int surfaceVolId_ ; // no entries = no cells * no phases (surfaceVol id ) //std::vector surfvol_; // no entries = no cells * no phases //std::vector gor_ ; // no entries = no cells //std::vector rv_ ; // no entries = no cells }; } // namespace Opm #endif // OPM_BLACKOILSTATE_HEADER_INCLUDED