From 4ad160d2decee5f9a7326e49fec92f0dbd7d2a65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atgeirr=20Fl=C3=B8=20Rasmussen?= Date: Mon, 25 Aug 2014 15:20:41 +0200 Subject: [PATCH] Add new constructor, that can handle MINPV processing. --- opm/core/grid/GridManager.cpp | 26 +++++++++++++++++++++++--- opm/core/grid/GridManager.hpp | 13 +++++++++++-- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/opm/core/grid/GridManager.cpp b/opm/core/grid/GridManager.cpp index 180feee3..bb60c409 100644 --- a/opm/core/grid/GridManager.cpp +++ b/opm/core/grid/GridManager.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -32,11 +33,12 @@ namespace Opm { + /// Construct a 3d corner-point grid from a deck. GridManager::GridManager(Opm::EclipseGridConstPtr eclipseGrid) : ug_(0) { - initFromEclipseGrid(eclipseGrid); + initFromEclipseGrid(eclipseGrid, std::vector()); } @@ -44,10 +46,17 @@ namespace Opm : ug_(0) { auto eclipseGrid = std::make_shared(deck); - initFromEclipseGrid(eclipseGrid); + initFromEclipseGrid(eclipseGrid, std::vector()); } + GridManager::GridManager(Opm::EclipseGridConstPtr eclipseGrid, + const std::vector& poreVolumes) + : ug_(0) + { + initFromEclipseGrid(eclipseGrid, poreVolumes); + } + /// Construct a 2d cartesian grid with cells of unit size. GridManager::GridManager(int nx, int ny) @@ -124,7 +133,8 @@ namespace Opm // Construct corner-point grid from EclipseGrid. - void GridManager::initFromEclipseGrid(Opm::EclipseGridConstPtr eclipseGrid) + void GridManager::initFromEclipseGrid(Opm::EclipseGridConstPtr eclipseGrid, + const std::vector& poreVolumes) { struct grdecl g; std::vector actnum; @@ -146,6 +156,11 @@ namespace Opm g.actnum = actnum.data(); g.mapaxes = mapaxes.data(); + if (!poreVolumes.empty() && eclipseGrid->isMinpvActive()) { + MinpvProcessor mp(g.dims[0], g.dims[1], g.dims[2]); + mp.process(poreVolumes, eclipseGrid->getMinpvValue(), zcorn.data()); + } + const double z_tolerance = eclipseGrid->isPinchActive() ? eclipseGrid->getPinchThresholdThickness() : 0.0; ug_ = create_grid_cornerpoint(&g, z_tolerance); @@ -208,4 +223,9 @@ namespace Opm } + + + + + } // namespace Opm diff --git a/opm/core/grid/GridManager.hpp b/opm/core/grid/GridManager.hpp index 7e291ed2..31956a25 100644 --- a/opm/core/grid/GridManager.hpp +++ b/opm/core/grid/GridManager.hpp @@ -44,9 +44,17 @@ namespace Opm /// Construct a 3d corner-point grid or tensor grid from a deck. explicit GridManager(Opm::DeckConstPtr deck); - /// Construct a grid from an EclipseState::EclipseGrid instance + /// Construct a grid from an EclipseState::EclipseGrid instance. explicit GridManager(Opm::EclipseGridConstPtr eclipseGrid); + /// Construct a grid from an EclipseState::EclipseGrid instance, + /// giving an explicit set of pore volumes to be used for MINPV + /// considerations. + /// \input[in] eclipseGrid encapsulates a corner-point grid given from a deck + /// \input[in] poreVolumes one element per logical cartesian grid element + GridManager(Opm::EclipseGridConstPtr eclipseGrid, + const std::vector& poreVolumes); + /// Construct a 2d cartesian grid with cells of unit size. GridManager(int nx, int ny); @@ -81,7 +89,8 @@ namespace Opm GridManager& operator=(const GridManager& other); // Construct corner-point grid from EclipseGrid. - void initFromEclipseGrid(Opm::EclipseGridConstPtr eclipseGrid); + void initFromEclipseGrid(Opm::EclipseGridConstPtr eclipseGrid, + const std::vector& poreVolumes); // The managed UnstructuredGrid. UnstructuredGrid* ug_;