static void check_parser(ParserPtr parser) { DeckPtr deck = parser->parseString(pvtoData, ParseMode()); DeckKeywordConstPtr kw1 = deck->getKeyword("PVTO" , 0); BOOST_CHECK_EQUAL(5U , kw1->size()); DeckRecordConstPtr record0 = kw1->getRecord(0); DeckRecordConstPtr record1 = kw1->getRecord(1); DeckRecordConstPtr record2 = kw1->getRecord(2); DeckRecordConstPtr record3 = kw1->getRecord(3); DeckRecordConstPtr record4 = kw1->getRecord(4); DeckItemConstPtr item0_0 = record0->getItem("RS"); DeckItemConstPtr item0_1 = record0->getItem("DATA"); BOOST_CHECK_EQUAL(1U , item0_0->size()); BOOST_CHECK_EQUAL(9U , item0_1->size()); BOOST_CHECK_EQUAL(2U , record0->size()); DeckItemConstPtr item1_0 = record1->getItem("RS"); DeckItemConstPtr item1_1 = record1->getItem("DATA"); BOOST_CHECK_EQUAL(1U , item1_0->size()); BOOST_CHECK_EQUAL(9U , item1_1->size()); BOOST_CHECK_EQUAL(2U , record1->size()); DeckItemConstPtr item2_0 = record2->getItem("RS"); DeckItemConstPtr item2_1 = record2->getItem("DATA"); BOOST_CHECK(item2_0->defaultApplied(0)); BOOST_CHECK_EQUAL(0U , item2_1->size()); BOOST_CHECK_EQUAL(2U , record2->size()); DeckItemConstPtr item3_0 = record3->getItem("RS"); DeckItemConstPtr item3_1 = record3->getItem("DATA"); BOOST_CHECK_EQUAL(1U , item3_0->size()); BOOST_CHECK_EQUAL(9U , item3_1->size()); BOOST_CHECK_EQUAL(2U , record3->size()); DeckItemConstPtr item4_0 = record4->getItem("RS"); DeckItemConstPtr item4_1 = record4->getItem("DATA"); BOOST_CHECK_EQUAL(1U , item4_0->size()); BOOST_CHECK_EQUAL(9U , item4_1->size()); BOOST_CHECK_EQUAL(2U , record4->size()); Opm::PvtoTable pvtoTable; pvtoTable.initFORUNITTESTONLY(kw1, /*tableIdx=*/0); const auto &outerTable = *pvtoTable.getOuterTable(); const auto &innerTable0 = *pvtoTable.getInnerTable(0); BOOST_CHECK_EQUAL(2, outerTable.numRows()); BOOST_CHECK_EQUAL(4, outerTable.numColumns()); BOOST_CHECK_EQUAL(3, innerTable0.numRows()); BOOST_CHECK_EQUAL(3, innerTable0.numColumns()); BOOST_CHECK_EQUAL(1e-3, outerTable.getGasSolubilityColumn()[0]); BOOST_CHECK_EQUAL(1.0e5, outerTable.getPressureColumn()[0]); BOOST_CHECK_EQUAL(outerTable.getPressureColumn()[0], innerTable0.getPressureColumn()[0]); BOOST_CHECK_EQUAL(1.01, outerTable.getOilFormationFactorColumn()[0]); BOOST_CHECK_EQUAL(outerTable.getOilFormationFactorColumn()[0], innerTable0.getOilFormationFactorColumn()[0]); BOOST_CHECK_EQUAL(1.02e-3, outerTable.getOilViscosityColumn()[0]); BOOST_CHECK_EQUAL(outerTable.getOilViscosityColumn()[0], innerTable0.getOilViscosityColumn()[0]); }
static void check_parser(ParserPtr parser) { DeckPtr deck = parser->parseString(pvtoData, ParseContext()); const auto& kw1 = deck->getKeyword("PVTO" , 0); BOOST_CHECK_EQUAL(5U , kw1.size()); const auto& record0 = kw1.getRecord(0); const auto& record1 = kw1.getRecord(1); const auto& record2 = kw1.getRecord(2); const auto& record3 = kw1.getRecord(3); const auto& record4 = kw1.getRecord(4); const auto& item0_0 = record0.getItem("RS"); const auto& item0_1 = record0.getItem("DATA"); BOOST_CHECK_EQUAL(1U , item0_0.size()); BOOST_CHECK_EQUAL(9U , item0_1.size()); BOOST_CHECK_EQUAL(2U , record0.size()); const auto& item1_0 = record1.getItem("RS"); const auto& item1_1 = record1.getItem("DATA"); BOOST_CHECK_EQUAL(1U , item1_0.size()); BOOST_CHECK_EQUAL(9U , item1_1.size()); BOOST_CHECK_EQUAL(2U , record1.size()); const auto& item2_0 = record2.getItem("RS"); const auto& item2_1 = record2.getItem("DATA"); BOOST_CHECK(item2_0.defaultApplied(0)); BOOST_CHECK_EQUAL(0U , item2_1.size()); BOOST_CHECK_EQUAL(2U , record2.size()); const auto& item3_0 = record3.getItem("RS"); const auto& item3_1 = record3.getItem("DATA"); BOOST_CHECK_EQUAL(1U , item3_0.size()); BOOST_CHECK_EQUAL(9U , item3_1.size()); BOOST_CHECK_EQUAL(2U , record3.size()); const auto& item4_0 = record4.getItem("RS"); const auto& item4_1 = record4.getItem("DATA"); BOOST_CHECK_EQUAL(1U , item4_0.size()); BOOST_CHECK_EQUAL(9U , item4_1.size()); BOOST_CHECK_EQUAL(2U , record4.size()); Opm::PvtoTable pvtoTable(kw1 , 0); BOOST_CHECK_EQUAL(2, pvtoTable.size()); const auto &table0 = pvtoTable.getUnderSaturatedTable(0); const auto& BO = table0.getColumn( "BO" ); BOOST_CHECK_EQUAL( 3, table0.numRows()); BOOST_CHECK_EQUAL( 3, table0.numColumns()); BOOST_CHECK_EQUAL( BO.front( ) , 1.01 ); BOOST_CHECK_EQUAL( BO.back( ) , 1.20 ); BOOST_CHECK_CLOSE(1.15 , table0.evaluate( "BO" , 250*1e5 ) , 1e-6); BOOST_CHECK_CLOSE( 1.15 , pvtoTable.evaluate( "BO" , 1e-3 , 250*1e5 ) , 1e-6 ); BOOST_CHECK_CLOSE( 1.15 , pvtoTable.evaluate( "BO" , 0.0 , 250*1e5 ) , 1e-6 ); }
void check_SgofTable(ParserPtr parser) { DeckPtr deck = parser->parseString(parserData); Opm::SgofTable sgofTable(deck->getKeyword("SGOF")); BOOST_CHECK_EQUAL(10U, sgofTable.getSgColumn().size()); BOOST_CHECK_EQUAL(0.1, sgofTable.getSgColumn()[0]); BOOST_CHECK_EQUAL(0.0, sgofTable.getKrgColumn()[0]); BOOST_CHECK_EQUAL(1.0, sgofTable.getKrogColumn()[0]); BOOST_CHECK_EQUAL(0.0, sgofTable.getPcogColumn()[0]); }
void check_parser(ParserPtr parser) { DeckPtr deck = parser->parseString(parserData); DeckKeywordConstPtr kw1 = deck->getKeyword("SGOF"); BOOST_CHECK_EQUAL(1U , kw1->size()); DeckRecordConstPtr record0 = kw1->getRecord(0); BOOST_CHECK_EQUAL(1U , record0->size()); DeckItemConstPtr item0 = record0->getItem(0); BOOST_CHECK_EQUAL(10U * 4, item0->size()); }
void Parser::parseFile(DeckPtr deck, const boost::filesystem::path& file, const boost::filesystem::path& rootPath, bool parseStrict) const { bool verbose = false; std::ifstream inputstream; size_t lineNR = 0; inputstream.open(file.string().c_str()); if (inputstream) { RawKeywordPtr rawKeyword; while (tryParseKeyword(deck, file.string() , lineNR , inputstream, rawKeyword, parseStrict)) { if (rawKeyword->getKeywordName() == Opm::RawConsts::include) { RawRecordConstPtr firstRecord = rawKeyword->getRecord(0); std::string includeFileString = firstRecord->getItem(0); boost::filesystem::path includeFile(includeFileString); if (includeFile.is_relative()) includeFile = rootPath / includeFile; if (verbose) std::cout << rawKeyword->getKeywordName() << " " << includeFile << std::endl; parseFile(deck, includeFile, rootPath , parseStrict); } else { if (verbose) std::cout << rawKeyword->getKeywordName() << std::endl; if (hasKeyword(rawKeyword->getKeywordName())) { ParserKeywordConstPtr parserKeyword = m_parserKeywords.at(rawKeyword->getKeywordName()); ParserKeywordActionEnum action = parserKeyword->getAction(); if (action == INTERNALIZE) { DeckKeywordConstPtr deckKeyword = parserKeyword->parse(rawKeyword); deck->addKeyword(deckKeyword); } else if (action == IGNORE_WARNING) deck->addWarning( "The keyword " + rawKeyword->getKeywordName() + " is ignored - this might potentially affect the results" , file.string() , rawKeyword->getLineNR()); } else { DeckKeywordConstPtr deckKeyword(new DeckKeyword(rawKeyword->getKeywordName(), false)); deck->addKeyword(deckKeyword); deck->addWarning( "The keyword " + rawKeyword->getKeywordName() + " is not recognized" , file.string() , lineNR); } } rawKeyword.reset(); } inputstream.close(); } else throw std::invalid_argument("Failed to open file: " + file.string()); }
static std::shared_ptr< Deck > deckWithGRUPTREE() { DeckPtr deck = createDeck(); DeckKeyword gruptreeKeyword("GRUPTREE"); DeckRecord recordChildOfField; auto itemChild1 = DeckItem::make< std::string >( "CHILD_GROUP" ); itemChild1.push_back(std::string("BARNET")); auto itemParent1 = DeckItem::make< std::string >( "PARENT_GROUP" ); itemParent1.push_back(std::string("FAREN")); recordChildOfField.addItem( std::move( itemChild1 ) ); recordChildOfField.addItem( std::move( itemParent1 ) ); gruptreeKeyword.addRecord( std::move( recordChildOfField ) ); deck->addKeyword( std::move( gruptreeKeyword ) ); return deck; }
static void check_parser(ParserPtr parser) { DeckPtr deck = parser->parseString(pvtgData, ParseMode()); DeckKeywordConstPtr kw1 = deck->getKeyword("PVTG" , 0); BOOST_CHECK_EQUAL(5U , kw1->size()); DeckRecordConstPtr record0 = kw1->getRecord(0); DeckRecordConstPtr record1 = kw1->getRecord(1); DeckRecordConstPtr record2 = kw1->getRecord(2); DeckRecordConstPtr record3 = kw1->getRecord(3); DeckRecordConstPtr record4 = kw1->getRecord(4); DeckItemConstPtr item0_0 = record0->getItem("GAS_PRESSURE"); DeckItemConstPtr item0_1 = record0->getItem("DATA"); BOOST_CHECK_EQUAL(1U , item0_0->size()); BOOST_CHECK_EQUAL(9U , item0_1->size()); BOOST_CHECK_EQUAL(2U , record0->size()); DeckItemConstPtr item1_0 = record1->getItem("GAS_PRESSURE"); DeckItemConstPtr item1_1 = record1->getItem("DATA"); BOOST_CHECK_EQUAL(1U , item1_0->size()); BOOST_CHECK_EQUAL(9U , item1_1->size()); BOOST_CHECK_EQUAL(2U , record1->size()); DeckItemConstPtr item2_0 = record2->getItem("GAS_PRESSURE"); DeckItemConstPtr item2_1 = record2->getItem("DATA"); BOOST_CHECK( item2_0->defaultApplied(0)); BOOST_CHECK_EQUAL(0U , item2_1->size()); BOOST_CHECK_EQUAL(2U , record2->size()); DeckItemConstPtr item3_0 = record3->getItem("GAS_PRESSURE"); DeckItemConstPtr item3_1 = record3->getItem("DATA"); BOOST_CHECK( !item3_1->defaultApplied(0)); BOOST_CHECK( item3_1->defaultApplied(1)); BOOST_CHECK( !item3_1->defaultApplied(2)); BOOST_CHECK( !item3_1->defaultApplied(3)); BOOST_CHECK( item3_1->defaultApplied(4)); BOOST_CHECK( !item3_1->defaultApplied(5)); BOOST_CHECK_EQUAL(1U , item3_0->size()); BOOST_CHECK_EQUAL(9U , item3_1->size()); BOOST_CHECK_EQUAL(2U , record3->size()); DeckItemConstPtr item4_0 = record4->getItem("GAS_PRESSURE"); DeckItemConstPtr item4_1 = record4->getItem("DATA"); BOOST_CHECK_EQUAL(1U , item4_0->size()); BOOST_CHECK_EQUAL(9U , item4_1->size()); BOOST_CHECK_EQUAL(2U , record4->size()); { Opm::PvtgTable pvtgTable; pvtgTable.initFORUNITTESTONLY(kw1, 0); const auto &outerTable = *pvtgTable.getOuterTable(); const auto &innerTable0 = *pvtgTable.getInnerTable(0); BOOST_CHECK_EQUAL(2U, outerTable.numRows()); BOOST_CHECK_EQUAL(4U, outerTable.numColumns()); BOOST_CHECK_EQUAL(3U, innerTable0.numRows()); BOOST_CHECK_EQUAL(3U, innerTable0.numColumns()); BOOST_CHECK_EQUAL(20.0e5, outerTable.getPressureColumn()[0]); BOOST_CHECK_EQUAL(0.00002448, outerTable.getOilSolubilityColumn()[0]); BOOST_CHECK_EQUAL(outerTable.getOilSolubilityColumn()[0], innerTable0.getOilSolubilityColumn()[0]); BOOST_CHECK_EQUAL(0.061895, outerTable.getGasFormationFactorColumn()[0]); BOOST_CHECK_EQUAL(outerTable.getGasFormationFactorColumn()[0], innerTable0.getGasFormationFactorColumn()[0]); BOOST_CHECK_EQUAL(1.299e-5, outerTable.getGasViscosityColumn()[0]); BOOST_CHECK_EQUAL(outerTable.getGasViscosityColumn()[0], innerTable0.getGasViscosityColumn()[0]); } }