From a8f5dc635401344a14cbbccc2e04f3a2746b9b65 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Mon, 2 Nov 2020 14:12:05 +0100 Subject: [PATCH 1/6] Add SummaryConfig::operator[](const std::size_t index) --- .../eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp | 3 +++ .../eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp b/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp index ab167229d..e8cdc11f9 100644 --- a/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp +++ b/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp @@ -212,6 +212,9 @@ namespace Opm { return runSummaryConfig.create; } + const SummaryConfigNode& operator[](std::size_t index) const; + + private: SummaryConfig( const Deck& deck, const Schedule& schedule, diff --git a/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp b/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp index 7dbc9fde7..f0ea388f9 100644 --- a/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp +++ b/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp @@ -1327,6 +1327,10 @@ bool SummaryConfig::hasSummaryKey(const std::string& keyword ) const { return summary_keywords.find(keyword) != summary_keywords.end(); } +const SummaryConfigNode& SummaryConfig::operator[](std::size_t index) const { + return this->m_keywords[index]; +} + bool SummaryConfig::match(const std::string& keywordPattern) const { int flags = 0; From 7d596e4e41dba9a149dab9d4df37be14c57ac671 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Mon, 2 Nov 2020 14:13:51 +0100 Subject: [PATCH 2/6] Make function parseKeyworType() in SummaryConfig public --- opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp | 2 +- .../parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp b/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp index e8cdc11f9..4c400c121 100644 --- a/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp +++ b/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp @@ -95,7 +95,7 @@ namespace Opm { }; SummaryConfigNode::Category parseKeywordCategory(const std::string& keyword); - SummaryConfigNode::Type parseKeywordType(const std::string& keyword); + SummaryConfigNode::Type parseKeywordType(std::string keyword); bool operator==(const SummaryConfigNode& lhs, const SummaryConfigNode& rhs); bool operator<(const SummaryConfigNode& lhs, const SummaryConfigNode& rhs); diff --git a/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp b/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp index f0ea388f9..a5f88c729 100644 --- a/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp +++ b/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp @@ -999,7 +999,7 @@ inline void handleKW( SummaryConfig::keyword_list& list, // ===================================================================== -SummaryConfigNode::Type parseKeywordType(const std::string& keyword) { +SummaryConfigNode::Type parseKeywordType(std::string keyword) { if (is_rate(keyword)) return SummaryConfigNode::Type::Rate; if (is_total(keyword)) return SummaryConfigNode::Type::Total; if (is_ratio(keyword)) return SummaryConfigNode::Type::Ratio; From f02437cdcb175472960fccf2b7b20645b5709086 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Mon, 2 Nov 2020 14:15:06 +0100 Subject: [PATCH 3/6] Use name based lookup in function getijk() --- .../SummaryConfig/SummaryConfig.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp b/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp index a5f88c729..28d3f3ff1 100644 --- a/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp +++ b/src/opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.cpp @@ -395,6 +395,14 @@ inline void keywordAquifer( SummaryConfig::keyword_list& list, } } +inline std::array< int, 3 > getijk( const DeckRecord& record ) { + return {{ + record.getItem( "I" ).get< int >( 0 ) - 1, + record.getItem( "J" ).get< int >( 0 ) - 1, + record.getItem( "K" ).get< int >( 0 ) - 1 + }}; +} + inline void keywordW( SummaryConfig::keyword_list& list, const std::string& keyword, KeywordLocation loc, @@ -577,14 +585,6 @@ inline void keywordF( SummaryConfig::keyword_list& list, keywordF( list, keyword.name(), keyword.location() ); } -inline std::array< int, 3 > getijk( const DeckRecord& record, - int offset = 0 ) { - return {{ - record.getItem( offset + 0 ).get< int >( 0 ) - 1, - record.getItem( offset + 1 ).get< int >( 0 ) - 1, - record.getItem( offset + 2 ).get< int >( 0 ) - 1 - }}; -} inline std::array< int, 3 > getijk( const Connection& completion ) { return { { completion.getI(), completion.getJ(), completion.getK() }}; @@ -711,7 +711,7 @@ inline void keywordMISC( SummaryConfig::keyword_list& list, auto cijk = getijk( connection ); int global_index = 1 + dims.getGlobalIndex(cijk[0], cijk[1], cijk[2]); - if( ijk_defaulted || ( cijk == getijk(record, 1) ) ) + if( ijk_defaulted || ( cijk == getijk(record) ) ) list.push_back( param.number(global_index) ); } } From 64b9a49a2042f67c9aaf591681e958ba36b268b5 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Mon, 2 Nov 2020 14:20:12 +0100 Subject: [PATCH 4/6] Use multiline string literal for test data --- tests/parser/SummaryConfigTests.cpp | 121 +++++++++++++++------------- 1 file changed, 66 insertions(+), 55 deletions(-) diff --git a/tests/parser/SummaryConfigTests.cpp b/tests/parser/SummaryConfigTests.cpp index 94ef64be6..4475d9083 100644 --- a/tests/parser/SummaryConfigTests.cpp +++ b/tests/parser/SummaryConfigTests.cpp @@ -73,61 +73,72 @@ static Deck createDeck_no_wells( const std::string& summary ) { static Deck createDeck( const std::string& summary ) { Opm::Parser parser; - std::string input = - "START -- 0 \n" - "10 MAI 2007 / \n" - "RUNSPEC\n" - "\n" - "DIMENS\n" - " 10 10 10 /\n" - "REGDIMS\n" - " 3/\n" - "AQUDIMS\n" - "1* 1* 1* 1* 3 200 1* 1* /\n" - "GRID\n" - "DXV \n 10*400 /\n" - "DYV \n 10*400 /\n" - "DZV \n 10*400 /\n" - "TOPS \n 100*2202 / \n" - "PERMX\n" - " 1000*0.25 /\n" - "COPY\n" - " PERMX PERMY /\n" - " PERMX PERMZ /\n" - "/\n" - "PORO \n" - " 1000*0.15 /\n" - "REGIONS\n" - "FIPNUM\n" - "200*1 300*2 500*3 /\n" - "FIPREG\n" - "200*10 300*20 500*30 /\n" - "SOLUTION\n" - "AQUCT\n" - "1 2040 1* 1000 .3 3.0e-5 1330 10 360.0 1 1* /\n" - "2 2040 1* 1000 .3 3.0e-5 1330 10 360.0 1 1* /\n" - "3 2040 1* 1000 .3 3.0e-5 1330 10 360.0 1 1* /\n" - "/\n" - "AQUANCON\n" - "1 1 10 10 2 10 10 'I-' 0.88 1 /\n" - "2 9 10 10 10 10 10 'I+' 0.88 1 /\n" - "3 9 9 8 10 9 8 'I+' 0.88 1 /\n" - "/\n" - "SCHEDULE\n" - "WELSPECS\n" - " \'W_1\' \'OP\' 1 1 3.33 \'OIL\' 7* / \n" - " \'WX2\' \'OP\' 2 2 3.33 \'OIL\' 7* / \n" - " \'W_3\' \'OP\' 2 5 3.92 \'OIL\' 7* / \n" - " 'PRODUCER' 'G' 5 5 2000 'GAS' /\n" - "/\n" - "COMPDAT\n" - "'PRODUCER' 5 5 1 1 'OPEN' 1* -1 0.5 / \n" - "'W_1' 3 7 2 2 'OPEN' 1* * 0.311 4332.346 2* 'X' 22.123 / \n" - "'W_1' 2 2 1 1 /\n" - "'WX2' 2 2 1 1 /\n" - "/\n" - "SUMMARY\n" - + summary; + std::string input = R"( +START -- 0 +10 MAI 2007 / +RUNSPEC + +DIMENS + 10 10 10 / +REGDIMS + 3/ +AQUDIMS +1* 1* 1* 1* 3 200 1* 1* / +GRID +DXV + 10*400 / +DYV + 10*400 / +DZV + 10*400 / +TOPS + 100*2202 / +PERMX + 1000*0.25 / +COPY + PERMX PERMY / + PERMX PERMZ / +/ +PORO + 1000*0.15 / +REGIONS +FIPNUM +200*1 300*2 500*3 / +FIPREG +200*10 300*20 500*30 / +SOLUTION +AQUCT +1 2040 1* 1000 .3 3.0e-5 1330 10 360.0 1 1* / +2 2040 1* 1000 .3 3.0e-5 1330 10 360.0 1 1* / +3 2040 1* 1000 .3 3.0e-5 1330 10 360.0 1 1* / +/ +AQUANCON +1 1 10 10 2 10 10 'I-' 0.88 1 / +2 9 10 10 10 10 10 'I+' 0.88 1 / +3 9 9 8 10 9 8 'I+' 0.88 1 / +/ +SCHEDULE +WELSPECS + 'W_1' 'OP' 1 1 3.33 'OIL' 7* / + 'WX2' 'OP' 2 2 3.33 'OIL' 7* / + 'W_3' 'OP' 2 5 3.92 'OIL' 7* / + 'PRODUCER' 'G' 5 5 2000 'GAS' / +/ +COMPDAT +'PRODUCER' 5 5 1 1 'OPEN' 1* -1 0.5 / +'W_1' 3 7 2 2 'OPEN' 1* * 0.311 4332.346 2* 'X' 22.123 / +'W_1' 2 2 1 1 / +'WX2' 2 2 1 1 / +/ + +COMPLUMP +W_1 3 7 2 2 2 / +W_1 2 2 2 2 2 / +W_1 2 2 1 1 4 / +/ + +SUMMARY +)" + summary; return parser.parseString(input); } From f3e9a02123070a94d72855147762e9844e12ece4 Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Mon, 2 Nov 2020 14:23:34 +0100 Subject: [PATCH 5/6] Add additional connection in testdata --- tests/parser/SummaryConfigTests.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/parser/SummaryConfigTests.cpp b/tests/parser/SummaryConfigTests.cpp index 4475d9083..1c3a8879e 100644 --- a/tests/parser/SummaryConfigTests.cpp +++ b/tests/parser/SummaryConfigTests.cpp @@ -128,6 +128,7 @@ COMPDAT 'PRODUCER' 5 5 1 1 'OPEN' 1* -1 0.5 / 'W_1' 3 7 2 2 'OPEN' 1* * 0.311 4332.346 2* 'X' 22.123 / 'W_1' 2 2 1 1 / +'W_1' 2 2 2 2 / 'WX2' 2 2 1 1 / / @@ -364,11 +365,11 @@ BOOST_AUTO_TEST_CASE(completions) { "/\n"; const auto summary = createSummary( input ); - const auto keywords = { "CGIR", "CGIR", "CGIR", "CGIR", + const auto keywords = { "CGIR", "CGIR", "CGIR", "CGIR", "CGIR", "CGIT", "CGIT", - "CPRL", "CPRL", "CPRL", "CPRL", + "CPRL", "CPRL", "CPRL", "CPRL", "CPRL", "CWIR", "CWIR", - "CWIT", "CWIT" }; + "CWIT", "CWIT", "CWIT" }; const auto names = sorted_keywords( summary ); BOOST_CHECK_EQUAL_COLLECTIONS( From 5316d193ea64ff0dcf511334881b972cba5e71bf Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Mon, 2 Nov 2020 14:24:23 +0100 Subject: [PATCH 6/6] White space --- opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp | 4 +--- src/opm/parser/eclipse/EclipseState/Schedule/Well/Well.cpp | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp b/opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp index c49031c8e..d684bf6a5 100644 --- a/opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp +++ b/opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp @@ -488,6 +488,7 @@ public: const std::string& groupName() const; Phase getPreferredPhase() const; + const std::vector getConnections(int completion) const; const WellConnections& getConnections() const; const WellSegments& getSegments() const; @@ -530,9 +531,6 @@ public: connections. The integer ID is assigned with the COMPLUMP keyword. */ bool hasCompletion(int completion) const; - const std::vector getConnections(int completion) const; - - bool updatePrediction(bool prediction_mode); bool updateAutoShutin(bool auto_shutin); bool updateCrossFlow(bool allow_cross_flow); diff --git a/src/opm/parser/eclipse/EclipseState/Schedule/Well/Well.cpp b/src/opm/parser/eclipse/EclipseState/Schedule/Well/Well.cpp index 981fb92fb..28444584f 100644 --- a/src/opm/parser/eclipse/EclipseState/Schedule/Well/Well.cpp +++ b/src/opm/parser/eclipse/EclipseState/Schedule/Well/Well.cpp @@ -1036,8 +1036,8 @@ bool Well::handleWELOPEN(const DeckRecord& record, Connection::State state_arg, bool Well::handleCOMPLUMP(const DeckRecord& record) { auto match = [=]( const Connection &c) -> bool { - if (!match_eq(c.getI(), record, "I" , -1)) return false; - if (!match_eq(c.getJ(), record, "J" , -1)) return false; + if (!match_eq(c.getI(), record, "I" , -1)) return false; + if (!match_eq(c.getJ(), record, "J" , -1)) return false; if (!match_ge(c.getK(), record, "K1", -1)) return false; if (!match_le(c.getK(), record, "K2", -1)) return false;