diff --git a/opm/parser/eclipse/EclipseState/Grid/GridDims.hpp b/opm/parser/eclipse/EclipseState/Grid/GridDims.hpp index 4237da466..c5a304999 100644 --- a/opm/parser/eclipse/EclipseState/Grid/GridDims.hpp +++ b/opm/parser/eclipse/EclipseState/Grid/GridDims.hpp @@ -65,7 +65,7 @@ namespace Opm { private: void init(const DeckKeyword& keyword); - void binary_init(const DeckKeyword& gdfile); + void binary_init(const Deck& deck); }; } diff --git a/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp b/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp index 455c2ead8..c6e557619 100644 --- a/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp +++ b/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp @@ -297,8 +297,10 @@ namespace Opm { void EclipseGrid::initBinaryGrid(const Deck& deck) { - const auto& gdfile_record = deck.getKeyword().getRecord(0); - const std::string& filename = gdfile_record.getItem("filename").get(0); + const DeckKeyword& gdfile_kw = deck.getKeyword("GDFILE"); + const std::string& gdfile_arg = gdfile_kw.getRecord(0).getItem("filename").get(0); + std::string filename = deck.makeDeckPath(gdfile_arg); + ecl_grid_type * grid_ptr = ecl_grid_load_case__( filename.c_str(), false); if (grid_ptr) this->m_grid.reset( grid_ptr ); diff --git a/src/opm/parser/eclipse/EclipseState/Grid/GridDims.cpp b/src/opm/parser/eclipse/EclipseState/Grid/GridDims.cpp index 494a45565..894d73e1d 100644 --- a/src/opm/parser/eclipse/EclipseState/Grid/GridDims.cpp +++ b/src/opm/parser/eclipse/EclipseState/Grid/GridDims.cpp @@ -49,7 +49,7 @@ namespace Opm { else if (deck.hasKeyword("DIMENS")) init(deck.getKeyword("DIMENS")); else if (deck.hasKeyword("GDFILE")) - binary_init(deck.getKeyword("GDFILE")); + binary_init(deck); else throw std::invalid_argument("Must have either SPECGRID or DIMENS to indicate grid dimensions"); } @@ -137,8 +137,10 @@ namespace Opm { m_nz = dims[2]; } - void GridDims::binary_init(const DeckKeyword& gdfile) { - const std::string& filename = gdfile.getRecord(0).getItem("filename").get(0); + void GridDims::binary_init(const Deck& deck) { + const DeckKeyword& gdfile_kw = deck.getKeyword("GDFILE"); + const std::string& gdfile_arg = gdfile_kw.getRecord(0).getItem("filename").get(0); + std::string filename = deck.makeDeckPath(gdfile_arg); ecl_grid_dims_type * grid_dims = ecl_grid_dims_alloc( filename.c_str(), nullptr ); if (grid_dims) { const auto& dims = ecl_grid_dims_iget_dims(grid_dims, 0); @@ -146,7 +148,7 @@ namespace Opm { m_ny = dims->ny; m_nz = dims->nz; } else - throw std::invalid_argument("Could not determine grid dimensions from " + filename); + throw std::invalid_argument("Could not determine grid dimensions from: " + filename); } } diff --git a/tests/parser/EclipseGridTests.cpp b/tests/parser/EclipseGridTests.cpp index b23448e77..de7ed5b7c 100644 --- a/tests/parser/EclipseGridTests.cpp +++ b/tests/parser/EclipseGridTests.cpp @@ -23,6 +23,7 @@ #include #include + #define BOOST_TEST_MODULE EclipseGridTests #include #include @@ -792,15 +793,21 @@ BOOST_AUTO_TEST_CASE(GDFILE) { const char* gdfile_deck = "GRID\n" "GDFILE\n" - "CASE.EGRID /\n" + "'grid/CASE.EGRID' /\n" "\n"; Opm::EclipseGrid grid1(createCPDeck()); test_work_area_type * work_area = test_work_area_alloc("GDFILE"); - grid1.save("CASE.EGRID", Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC); + util_mkdir_p("ecl/grid"); + grid1.save("ecl/grid/CASE.EGRID", Opm::UnitSystem::UnitType::UNIT_TYPE_METRIC); + { + FILE * stream = fopen("ecl/DECK.DATA", "w"); + fputs(gdfile_deck, stream); + fclose(stream); + } { Opm::Parser parser; - Opm::EclipseGrid grid2(parser.parseString(gdfile_deck, Opm::ParseContext() )); + Opm::EclipseGrid grid2(parser.parseFile("ecl/DECK.DATA", Opm::ParseContext() )); BOOST_CHECK(grid1.equal(grid2)); } test_work_area_free( work_area );