/* Copyright 2015 SINTEF ICT, Applied Mathematics. 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_GRIDINIT_HEADER_INCLUDED #define OPM_GRIDINIT_HEADER_INCLUDED #include #include #include #if HAVE_OPM_GRID #include #endif namespace Opm { /// A class intended to give a generic interface to /// initializing and accessing UnstructuredGrid and CpGrid, /// using specialized templates to accomplish this. template class GridInit { public: /// Initialize from a deck and/or an eclipse state and (logical cartesian) specified pore volumes. GridInit(EclipseStateConstPtr, const std::vector&) { OPM_THROW(std::logic_error, "Found no specialization for GridInit for the requested Grid class."); } }; /// Specialization for UnstructuredGrid. template <> class GridInit { public: /// Initialize from a deck and/or an eclipse state and (logical cartesian) specified pore volumes. GridInit(EclipseStateConstPtr eclipse_state, const std::vector& porv) : grid_manager_(eclipse_state->getInputGrid(), porv) { } /// Access the created grid. const UnstructuredGrid& grid() { return *grid_manager_.c_grid(); } private: GridManager grid_manager_; }; #if HAVE_OPM_GRID /// Specialization for CpGrid. template <> class GridInit { public: /// Initialize from a deck and/or an eclipse state and (logical cartesian) specified pore volumes. GridInit(EclipseStateConstPtr eclipse_state, const std::vector& porv) { grid_.processEclipseFormat(eclipse_state->getInputGrid(), false, false, false, porv); } /// Access the created grid. Note that mutable access may be required for load balancing. Dune::CpGrid& grid() { return grid_; } private: Dune::CpGrid grid_; }; #endif // HAVE_OPM_GRID } // namespace Opm #endif // OPM_GRIDINIT_HEADER_INCLUDED