From 23dd41ba387e93fc1bbcc11cc238e1504dc10e11 Mon Sep 17 00:00:00 2001 From: Markus Blatt Date: Thu, 4 Jun 2020 20:19:51 +0200 Subject: [PATCH] Support querying GAP/NOGAP mode for Pinch form EclipseGrid. While we currently only support GAP and do not need this, we will need it eventually to support NOGAP in the simulator. --- .../eclipse/EclipseState/Grid/EclipseGrid.hpp | 2 ++ .../eclipse/EclipseState/Grid/PinchMode.hpp | 4 ++- .../eclipse/EclipseState/Grid/EclipseGrid.cpp | 18 ++++++++++--- .../eclipse/EclipseState/Grid/PinchMode.cpp | 9 +++++++ tests/parser/EclipseGridTests.cpp | 26 +++++++++++++++++++ 5 files changed, 54 insertions(+), 5 deletions(-) diff --git a/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp b/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp index 93a476809..a2a00bb13 100644 --- a/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp +++ b/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp @@ -110,6 +110,7 @@ namespace Opm { double getPinchThresholdThickness( ) const; PinchMode::ModeEnum getPinchOption( ) const; PinchMode::ModeEnum getMultzOption( ) const; + PinchMode::ModeEnum getPinchGapMode( ) const; MinpvMode::ModeEnum getMinpvMode() const; const std::vector& getMinpvVector( ) const; @@ -195,6 +196,7 @@ namespace Opm { Value m_pinch; PinchMode::ModeEnum m_pinchoutMode; PinchMode::ModeEnum m_multzMode; + PinchMode::ModeEnum m_pinchGapMode; bool m_circle = false; diff --git a/opm/parser/eclipse/EclipseState/Grid/PinchMode.hpp b/opm/parser/eclipse/EclipseState/Grid/PinchMode.hpp index 13abf082c..06ba68c0a 100644 --- a/opm/parser/eclipse/EclipseState/Grid/PinchMode.hpp +++ b/opm/parser/eclipse/EclipseState/Grid/PinchMode.hpp @@ -28,7 +28,9 @@ namespace Opm { enum ModeEnum { ALL = 1, TOPBOT = 2, - TOP = 3 + TOP = 3, + GAP = 4, + NOGAP = 5, }; const std::string PinchMode2String(const ModeEnum enumValue); diff --git a/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp b/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp index 6b813523e..91165d471 100644 --- a/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp +++ b/src/opm/parser/eclipse/EclipseState/Grid/EclipseGrid.cpp @@ -68,7 +68,8 @@ EclipseGrid::EclipseGrid(std::array& dims , m_minpvMode(MinpvMode::ModeEnum::Inactive), m_pinch("PINCH"), m_pinchoutMode(PinchMode::ModeEnum::TOPBOT), - m_multzMode(PinchMode::ModeEnum::TOP) + m_multzMode(PinchMode::ModeEnum::TOP), + m_pinchGapMode(PinchMode::ModeEnum::GAP) { initCornerPointGrid( coord , zcorn , actnum , mapaxes ); } @@ -84,7 +85,8 @@ EclipseGrid::EclipseGrid(const std::string& fileName ) m_minpvMode(MinpvMode::ModeEnum::Inactive), m_pinch("PINCH"), m_pinchoutMode(PinchMode::ModeEnum::TOPBOT), - m_multzMode(PinchMode::ModeEnum::TOP) + m_multzMode(PinchMode::ModeEnum::TOP), + m_pinchGapMode(PinchMode::ModeEnum::GAP) { Opm::EclIO::EclFile egridfile(fileName); @@ -99,7 +101,8 @@ EclipseGrid::EclipseGrid(size_t nx, size_t ny , size_t nz, m_minpvMode(MinpvMode::ModeEnum::Inactive), m_pinch("PINCH"), m_pinchoutMode(PinchMode::ModeEnum::TOPBOT), - m_multzMode(PinchMode::ModeEnum::TOP) + m_multzMode(PinchMode::ModeEnum::TOP), + m_pinchGapMode(PinchMode::ModeEnum::GAP) { m_coord.reserve((nx+1)*(ny+1)*6); @@ -207,7 +210,8 @@ EclipseGrid::EclipseGrid(const Deck& deck, const int * actnum) m_minpvMode(MinpvMode::ModeEnum::Inactive), m_pinch("PINCH"), m_pinchoutMode(PinchMode::ModeEnum::TOPBOT), - m_multzMode(PinchMode::ModeEnum::TOP) + m_multzMode(PinchMode::ModeEnum::TOP), + m_pinchGapMode(PinchMode::ModeEnum::GAP) { if (deck.hasKeyword("GDFILE")){ @@ -309,6 +313,8 @@ EclipseGrid::EclipseGrid(const Deck& deck, const int * actnum) auto multzString = record.getItem().get< std::string >(0); m_multzMode = PinchMode::PinchModeFromString(multzString); + auto pinchGapString = record.getItem().get< std::string >(0); + m_pinchGapMode = PinchMode::PinchModeFromString(pinchGapString); } if (deck.hasKeyword() && deck.hasKeyword()) { @@ -484,6 +490,10 @@ EclipseGrid::EclipseGrid(const Deck& deck, const int * actnum) return m_minpvMode; } + PinchMode::ModeEnum EclipseGrid::getPinchGapMode() const { + return m_pinchGapMode; + } + const std::vector& EclipseGrid::getMinpvVector( ) const { return m_minpvVector; } diff --git a/src/opm/parser/eclipse/EclipseState/Grid/PinchMode.cpp b/src/opm/parser/eclipse/EclipseState/Grid/PinchMode.cpp index e3d87d855..21169f624 100644 --- a/src/opm/parser/eclipse/EclipseState/Grid/PinchMode.cpp +++ b/src/opm/parser/eclipse/EclipseState/Grid/PinchMode.cpp @@ -40,6 +40,13 @@ namespace Opm { case ModeEnum::TOP: stringValue = "TOP"; break; + + case ModeEnum::GAP: + stringValue = "GAP"; + break; + case ModeEnum::NOGAP: + stringValue = "NOGAP"; + break; } return stringValue; @@ -52,6 +59,8 @@ namespace Opm { if (s == "ALL") { mode = ModeEnum::ALL; } else if (s == "TOPBOT") { mode = ModeEnum::TOPBOT; } else if (s == "TOP") { mode = ModeEnum::TOP; } + else if (s == "GAP") { mode = ModeEnum::GAP; } + else if (s == "NOGAP") { mode = ModeEnum::NOGAP; } else { std::string msg = "Unsupported pinchout mode " + s; throw std::invalid_argument(msg); diff --git a/tests/parser/EclipseGridTests.cpp b/tests/parser/EclipseGridTests.cpp index 86a91a9b9..ee409c6fb 100644 --- a/tests/parser/EclipseGridTests.cpp +++ b/tests/parser/EclipseGridTests.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include @@ -211,6 +212,27 @@ static Opm::Deck createPinchedCPDeck() { return parser.parseString( deckData) ; } +static Opm::Deck createPinchedNOGAPCPDeck() { + const char* deckData = + "RUNSPEC\n" + "\n" + "DIMENS\n" + " 10 10 10 /\n" + "GRID\n" + "COORD\n" + " 726*1 / \n" + "ZCORN \n" + " 8000*1 / \n" + "ACTNUM \n" + " 1000*1 / \n" + "PINCH \n" + " 0.2 NOGAP / \n" + "EDIT\n" + "\n"; + + Opm::Parser parser; + return parser.parseString( deckData) ; +} static Opm::Deck createMinpvDefaultCPDeck() { const char* deckData = @@ -794,9 +816,11 @@ BOOST_AUTO_TEST_CASE(ConstructorNoSections) { BOOST_AUTO_TEST_CASE(ConstructorNORUNSPEC_PINCH) { auto deck1 = createCPDeck(); auto deck2 = createPinchedCPDeck(); + auto deck3 = createPinchedNOGAPCPDeck(); Opm::EclipseGrid grid1(deck1); Opm::EclipseGrid grid2(deck2); + Opm::EclipseGrid grid3(deck3); BOOST_CHECK(!grid1.equal( grid2 )); @@ -804,6 +828,8 @@ BOOST_AUTO_TEST_CASE(ConstructorNORUNSPEC_PINCH) { BOOST_CHECK_THROW(grid1.getPinchThresholdThickness(), std::logic_error); BOOST_CHECK(grid2.isPinchActive()); BOOST_CHECK_EQUAL(grid2.getPinchThresholdThickness(), 0.2); + BOOST_CHECK_EQUAL(grid2.getPinchGapMode(), Opm::PinchMode::ModeEnum::GAP); + BOOST_CHECK_EQUAL(grid3.getPinchGapMode(), Opm::PinchMode::ModeEnum::NOGAP); } BOOST_AUTO_TEST_CASE(ConstructorMINPV) {