From 43bb6eac78b9a0b8df27b01007371638903e7fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A5rd=20Skaflestad?= Date: Tue, 15 May 2012 11:54:59 +0200 Subject: [PATCH 1/2] WellsManager(): Support grids that do not define "global_cell" Assume that the "global_cell" in that case corresponds to the identity mapping. --- opm/core/WellsManager.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/opm/core/WellsManager.cpp b/opm/core/WellsManager.cpp index 72354796d..6fe66a1ea 100644 --- a/opm/core/WellsManager.cpp +++ b/opm/core/WellsManager.cpp @@ -250,8 +250,16 @@ namespace Opm const int* global_cell = grid.global_cell; const int* cpgdim = grid.cartdims; std::map cartesian_to_compressed; - for (int i = 0; i < grid.number_of_cells; ++i) { - cartesian_to_compressed.insert(std::make_pair(global_cell[i], i)); + + if (global_cell) { + for (int i = 0; i < grid.number_of_cells; ++i) { + cartesian_to_compressed.insert(std::make_pair(global_cell[i], i)); + } + } + else { + for (int i = 0; i < grid.number_of_cells; ++i) { + cartesian_to_compressed.insert(std::make_pair(i, i)); + } } // Get COMPDAT data From 8ed2e18e15691953f8aefb953c872089fa39d174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A5rd=20Skaflestad?= Date: Tue, 15 May 2012 12:07:04 +0200 Subject: [PATCH 2/2] assignPermeability(): Don't build an Inspector to count global cells. Thus, assingPermeability() is applicable to simulation decks that aren't based on corner-point descriptions (e.g., the (DXV,DYV,DZV) grid type). --- opm/core/fluid/RockFromDeck.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/opm/core/fluid/RockFromDeck.cpp b/opm/core/fluid/RockFromDeck.cpp index 29c7a913a..4e45b0d18 100644 --- a/opm/core/fluid/RockFromDeck.cpp +++ b/opm/core/fluid/RockFromDeck.cpp @@ -35,6 +35,8 @@ namespace Opm PermeabilityKind fillTensor(const EclipseGridParser& parser, std::vector*>& tensor, std::tr1::array& kmap); + + int numGlobalCells(const EclipseGridParser& parser); } // anonymous namespace @@ -82,10 +84,8 @@ namespace Opm const std::vector& global_cell, double perm_threshold) { - const int dim = 3; - EclipseGridInspector insp(parser); - std::tr1::array dims = insp.gridSize(); - int num_global_cells = dims[0]*dims[1]*dims[2]; + const int dim = 3; + const int num_global_cells = numGlobalCells(parser); ASSERT (num_global_cells > 0); permeability_.assign(dim * dim * global_cell.size(), 0.0); @@ -330,6 +330,26 @@ namespace Opm return kind; } + int numGlobalCells(const EclipseGridParser& parser) + { + int ngc = -1; + + if (parser.hasField("DIMENS")) { + const std::vector& + dims = parser.getIntegerValue("DIMENS"); + + ngc = dims[0] * dims[1] * dims[2]; + } + else if (parser.hasField("SPECGRID")) { + const SPECGRID& sgr = parser.getSPECGRID(); + + ngc = sgr.dimensions[ 0 ]; + ngc *= sgr.dimensions[ 1 ]; + ngc *= sgr.dimensions[ 2 ]; + } + + return ngc; + } } // anonymous namespace } // namespace Opm