mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
it now uses the grid object which gets created by ebos for everything which should make the parallelization efforts easier. I also tried to cut back the use of the legacy property objects (i.e., for the fluid, geologic and rock properties), but this effort ran aground because of the initialization and output code. (also, if those two were fixed, there would probably be issues with the Newton update.) I ran Norne with this and there did not seem to be any notable performance regressions or benefits.
119 lines
3.3 KiB
C++
119 lines
3.3 KiB
C++
/*
|
|
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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef OPM_GRIDINIT_HEADER_INCLUDED
|
|
#define OPM_GRIDINIT_HEADER_INCLUDED
|
|
|
|
#include <opm/parser/eclipse/Deck/Deck.hpp>
|
|
#include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
|
|
#include <opm/core/grid/GridManager.hpp>
|
|
|
|
#if HAVE_OPM_GRID
|
|
#include <dune/grid/CpGrid.hpp>
|
|
#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 Grid>
|
|
class GridInit
|
|
{
|
|
public:
|
|
/// Initialize from a deck and/or an eclipse state and (logical cartesian) specified pore volumes.
|
|
GridInit(const EclipseState&, const std::vector<double>&)
|
|
{
|
|
OPM_THROW(std::logic_error, "Found no specialization for GridInit for the requested Grid class.");
|
|
}
|
|
};
|
|
|
|
|
|
/// Specialization for UnstructuredGrid.
|
|
template <>
|
|
class GridInit<UnstructuredGrid>
|
|
{
|
|
public:
|
|
/// Initialize from a deck and/or an eclipse state and (logical cartesian) specified pore volumes.
|
|
GridInit(const EclipseState& eclipse_state, const std::vector<double>& 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<Dune::CpGrid>
|
|
{
|
|
public:
|
|
GridInit()
|
|
{
|
|
gridSelfManaged_ = false;
|
|
}
|
|
|
|
/// Initialize from a deck and/or an eclipse state and (logical cartesian) specified pore volumes.
|
|
GridInit(const EclipseState& eclipse_state, const std::vector<double>& porv)
|
|
{
|
|
gridSelfManaged_ = true;
|
|
|
|
grid_ = new Dune::CpGrid;
|
|
grid_->processEclipseFormat(eclipse_state.getInputGrid(), false, false, false, porv);
|
|
}
|
|
|
|
~GridInit()
|
|
{
|
|
if (gridSelfManaged_)
|
|
delete grid_;
|
|
}
|
|
|
|
/// Access the created grid. Note that mutable access may be required for load balancing.
|
|
Dune::CpGrid& grid()
|
|
{
|
|
return *grid_;
|
|
}
|
|
|
|
/// set the grid from the outside
|
|
void setGrid(Dune::CpGrid& newGrid)
|
|
{
|
|
gridSelfManaged_ = false;
|
|
grid_ = &newGrid;
|
|
}
|
|
|
|
private:
|
|
Dune::CpGrid* grid_;
|
|
bool gridSelfManaged_;
|
|
};
|
|
#endif // HAVE_OPM_GRID
|
|
|
|
|
|
} // namespace Opm
|
|
|
|
#endif // OPM_GRIDINIT_HEADER_INCLUDED
|