diff --git a/opm/parser/eclipse/IntegrationTests/ParseEQUIL.cpp b/opm/parser/eclipse/IntegrationTests/ParseEQUIL.cpp index d11b7b64b..134322ab3 100644 --- a/opm/parser/eclipse/IntegrationTests/ParseEQUIL.cpp +++ b/opm/parser/eclipse/IntegrationTests/ParseEQUIL.cpp @@ -35,6 +35,24 @@ using namespace Opm; +BOOST_AUTO_TEST_CASE( parse_EQUIL_MISSING_DIMS ) { + Parser parser; + const std::string equil = "EQUIL\n" + "2469 382.4 1705.0 0.0 500 0.0 1 1 20 /"; + std::shared_ptr deck = parser.parseString(equil); + DeckKeywordConstPtr kw1 = deck->getKeyword("EQUIL" , 0); + BOOST_CHECK_EQUAL( 1U , kw1->size() ); + + DeckRecordConstPtr rec1 = kw1->getRecord(0); + DeckItemPtr item1 = rec1->getItem("OWC"); + DeckItemPtr item1_index = rec1->getItem(2); + + BOOST_CHECK_EQUAL( item1 , item1_index ); + BOOST_CHECK( fabs(item1->getSIDouble(0) - 1705) < 0.001); + +} + + BOOST_AUTO_TEST_CASE( parse_EQUIL_OK ) { ParserPtr parser(new Parser()); boost::filesystem::path pvtgFile("testdata/integration_tests/EQUIL/EQUIL1"); diff --git a/opm/parser/eclipse/Parser/Parser.cpp b/opm/parser/eclipse/Parser/Parser.cpp index 55c1c24aa..543217c5a 100644 --- a/opm/parser/eclipse/Parser/Parser.cpp +++ b/opm/parser/eclipse/Parser/Parser.cpp @@ -21,6 +21,7 @@ #include +#include #include #include #include @@ -360,13 +361,22 @@ namespace Opm { targetSize = parserKeyword->getFixedSize(); else { const std::pair sizeKeyword = parserKeyword->getSizeDefinitionPair(); - DeckKeywordConstPtr sizeDefinitionKeyword = parserState->deck->getKeyword(sizeKeyword.first); - DeckItemPtr sizeDefinitionItem; - { - DeckRecordConstPtr record = sizeDefinitionKeyword->getRecord(0); - sizeDefinitionItem = record->getItem(sizeKeyword.second); + DeckConstPtr deck = parserState->deck; + if (deck->hasKeyword(sizeKeyword.first)) { + DeckKeywordConstPtr sizeDefinitionKeyword = deck->getKeyword(sizeKeyword.first); + DeckItemPtr sizeDefinitionItem; + { + DeckRecordConstPtr record = sizeDefinitionKeyword->getRecord(0); + sizeDefinitionItem = record->getItem(sizeKeyword.second); + } + targetSize = sizeDefinitionItem->getInt(0); + } else { + auto keyword = getKeyword( sizeKeyword.first ); + auto record = keyword->getRecord(); + auto int_item = std::dynamic_pointer_cast( record->get( sizeKeyword.second ) ); + + targetSize = int_item->getDefault( ); } - targetSize = sizeDefinitionItem->getInt(0); } return RawKeywordPtr(new RawKeyword(keywordString, parserState->dataFile.string() , parserState->lineNR , targetSize , parserKeyword->isTableCollection())); }