Merge pull request #1810 from blattms/support-pinch-nogap

Support querying GAP/NOGAP mode for Pinch form EclipseGrid.
This commit is contained in:
Markus Blatt
2020-06-15 17:27:15 +02:00
committed by GitHub
5 changed files with 54 additions and 5 deletions

View File

@@ -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<double>& getMinpvVector( ) const;
@@ -196,6 +197,7 @@ namespace Opm {
Value<double> m_pinch;
PinchMode::ModeEnum m_pinchoutMode;
PinchMode::ModeEnum m_multzMode;
PinchMode::ModeEnum m_pinchGapMode;
bool m_circle = false;

View File

@@ -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);

View File

@@ -68,7 +68,8 @@ EclipseGrid::EclipseGrid(std::array<int, 3>& 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<ParserKeywords::PINCH::MULTZ_OPTION>().get< std::string >(0);
m_multzMode = PinchMode::PinchModeFromString(multzString);
auto pinchGapString = record.getItem<ParserKeywords::PINCH::CONTROL_OPTION>().get< std::string >(0);
m_pinchGapMode = PinchMode::PinchModeFromString(pinchGapString);
}
if (deck.hasKeyword<ParserKeywords::MINPV>() && deck.hasKeyword<ParserKeywords::MINPVFIL>()) {
@@ -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<double>& EclipseGrid::getMinpvVector( ) const {
return m_minpvVector;
}

View File

@@ -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);

View File

@@ -43,6 +43,7 @@
#include <opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/GridDims.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/NNC.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/PinchMode.hpp>
#include <opm/parser/eclipse/Parser/Parser.hpp>
@@ -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) {