///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2011- Statoil ASA // Copyright (C) 2013- Ceetron Solutions AS // Copyright (C) 2011-2012 Ceetron AS // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. // // See the GNU General Public License at // for more details. // ///////////////////////////////////////////////////////////////////////////////// #include "gtest/gtest.h" #include "RigEclipseCaseData.h" #include #include "ert/ecl/ecl_kw_magic.h" #include "RifReaderEclipseOutput.h" #include "RifEclipseOutputFileTools.h" #include "RigCaseCellResultsData.h" #include "RifEclipseUnifiedRestartFileAccess.h" #include "RifReaderSettings.h" #include //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- TEST(RigReservoirTest, BasicTest) { RifEclipseUnifiedRestartFileAccess unrstAccess; /* QStringList filenames; //filenames << "d:/Models/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.UNRST"; filenames << "d:/Models/MRST/simple/SIMPLE.UNRST"; unrstAccess.setRestartFiles(filenames); QStringList resultNames; std::vector dataItemCount; unrstAccess.resultNames(&resultNames, &dataItemCount); for (size_t i = 0; i < resultNames.size(); i++) { qDebug() << resultNames[i] << "\t" << dataItemCount[i]; } auto reportNums = unrstAccess.reportNumbers(); for (auto reportNum : reportNums) { qDebug() << reportNum; } */ /* cvf::ref readerInterfaceEcl = new RifReaderEclipseOutput; cvf::ref reservoir = new RigCaseData; // Location of test dataset received from Håkon Høgstøl in July 2011 with 10k active cells #ifdef WIN32 QString filename("TEST10K_FLT_LGR_NNC.EGRID"); #else QString filename("/mnt/hgfs/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.EGRID"); #endif bool result = readerInterfaceEcl->open(filename, reservoir.p()); EXPECT_TRUE(result); { QStringList staticResults = readerInterfaceEcl->staticResults(); EXPECT_EQ(42, staticResults.size()); qDebug() << "Static results\n" << staticResults; QStringList dynamicResults = readerInterfaceEcl->dynamicResults(); EXPECT_EQ(23, dynamicResults.size()); qDebug() << "Dynamic results\n" << dynamicResults; int numTimeSteps = static_cast(readerInterfaceEcl->numTimeSteps()); EXPECT_EQ(9, numTimeSteps); QStringList timeStepText = readerInterfaceEcl->timeStepText(); EXPECT_EQ(numTimeSteps, timeStepText.size()); qDebug() << "Time step texts\n" << timeStepText; } readerInterfaceEcl->close(); { QStringList staticResults = readerInterfaceEcl->staticResults(); EXPECT_EQ(0, staticResults.size()); QStringList dynamicResults = readerInterfaceEcl->dynamicResults(); EXPECT_EQ(0, dynamicResults.size()); int numTimeSteps = static_cast(readerInterfaceEcl->numTimeSteps()); EXPECT_EQ(0, numTimeSteps); QStringList timeStepText = readerInterfaceEcl->timeStepText(); EXPECT_EQ(numTimeSteps, timeStepText.size()); } */ } #if 0 //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- TEST(RigReservoirTest, DISABLED_BasicTest) { cvf::ref readerInterfaceEcl = new RifReaderEclipseOutput; cvf::ref reservoir = new RigCaseData; QString filename("d:/Models/Statoil/troll_MSW/T07-4A-W2012-16-F3.EGRID"); RifReaderSettings readerSettings; readerInterfaceEcl->setReaderSetting(&readerSettings); bool result = readerInterfaceEcl->open(filename, reservoir.p()); EXPECT_TRUE(result); { // QStringList staticResults = readerInterfaceEcl->staticResults(); // EXPECT_EQ(42, staticResults.size()); // qDebug() << "Static results\n" << staticResults; // // QStringList dynamicResults = readerInterfaceEcl->dynamicResults(); // EXPECT_EQ(23, dynamicResults.size()); // qDebug() << "Dynamic results\n" << dynamicResults; // // int numTimeSteps = static_cast(readerInterfaceEcl->numTimeSteps()); // EXPECT_EQ(9, numTimeSteps); // // QStringList timeStepText = readerInterfaceEcl->timeStepText(); // EXPECT_EQ(numTimeSteps, timeStepText.size()); // qDebug() << "Time step texts\n" << timeStepText; } readerInterfaceEcl->close(); { // QStringList staticResults = readerInterfaceEcl->staticResults(); // EXPECT_EQ(0, staticResults.size()); // // QStringList dynamicResults = readerInterfaceEcl->dynamicResults(); // EXPECT_EQ(0, dynamicResults.size()); // // int numTimeSteps = static_cast(readerInterfaceEcl->numTimeSteps()); // EXPECT_EQ(0, numTimeSteps); // // QStringList timeStepText = readerInterfaceEcl->timeStepText(); // EXPECT_EQ(numTimeSteps, timeStepText.size()); } } TEST(RigReservoirTest, DISABLED_FileOutputToolsTest) { cvf::DebugTimer timer("test"); // QString filename("d:/Models/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.EGRID"); // QString filename("d:/Models/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.UNRST"); // QString filename("d:/Models/Statoil/troll_MSW/T07-4A-W2012-16-F3.UNRST"); QString filename("c:/tmp/troll_MSW/T07-4A-W2012-16-F3.UNRST"); ecl_file_type* ertFile = ecl_file_open(filename.toAscii().data(), ECL_FILE_CLOSE_STREAM); EXPECT_TRUE(ertFile); QStringList keywords; std::vector keywordDataItemCounts; RifEclipseOutputFileTools::findKeywordsAndDataItemCounts(ertFile, &keywords, &keywordDataItemCounts); EXPECT_TRUE(keywords.size() == keywordDataItemCounts.size()); qDebug() << "Keyword - Number of data items"; for (int i = 0; i < keywords.size(); i++) { QString paddedKeyword = QString("%1").arg(keywords[i], 8); qDebug() << paddedKeyword << " - " << keywordDataItemCounts[i]; } ecl_file_close(ertFile); ertFile = NULL; timer.reportTime(); //qDebug() << timer.lapt; } TEST(RigReservoirTest, UnifiedTestFile) { //QString filename("d:/Models/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.UNRST"); QString filename("d:/Models/Statoil/troll_MSW/T07-4A-W2012-16-F3.UNRST"); { cvf::ref restartFile = new RifEclipseUnifiedRestartFileAccess(); QStringList fileNameList; fileNameList << filename; restartFile->setRestartFiles(fileNameList); restartFile->open(); QStringList resultNames; std::vector resultDataItemCounts; restartFile->resultNames(&resultNames, &resultDataItemCounts); qDebug() << "Result names\n"; for (int i = 0; i < resultNames.size(); i++) { qDebug() << resultNames[i] << "\t" << resultDataItemCounts[i]; } std::vector tsteps = restartFile->timeSteps(); qDebug() << "Time step texts\n"; for (int i = 0; i < tsteps.size(); i++) { qDebug() << tsteps[i].toString(); } /* std::vector resultValues; size_t timeStep = 0; restartFile->results(resultNames[0], timeStep, &resultValues); size_t i; for (i = 0; i < 500; i++) { qDebug() << resultValues[i]; } */ } } void buildResultInfoString(RigReservoir* reservoir, RiaDefines::PorosityModelType porosityModel, RiaDefines::ResultCatType resultType) { RigCaseCellResultsData* matrixResults = reservoir->results(porosityModel); { QStringList resultNames = matrixResults->resultNames(resultType); for (size_t i = 0 ; i < resultNames.size(); i++) { std::vector values; size_t scalarResultIndex = matrixResults->findOrLoadScalarResult(resultType, resultNames[i]); EXPECT_TRUE(scalarResultIndex != cvf::UNDEFINED_SIZE_T); QString resultText = QString("%1").arg(resultNames[i], 8); std::vector< std::vector > & resultValues = matrixResults->cellScalarResults(scalarResultIndex); for (size_t timeStepIdx = 0; timeStepIdx < matrixResults->timeStepCount(scalarResultIndex); timeStepIdx++) { size_t resultValueCount = resultValues[timeStepIdx].size(); resultText += QString(" %1").arg(resultValueCount); } qDebug() << resultText; } qDebug() << "Number of items : " << resultNames.size(); } } TEST(RigReservoirTest, DualPorosityTest) { cvf::ref readerInterfaceEcl = new RifReaderEclipseOutput; cvf::ref reservoir = new RigReservoir; QString filename("d:/Models/Statoil/DualProperty/DUALPORO.EGRID"); //QString filename("d:/Models/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.EGRID"); bool result = readerInterfaceEcl->open(filename, reservoir.p()); EXPECT_TRUE(result); qDebug() << "\n\n" << "Matrix porosities, DYNAMIC results" << "----------------------------------"; buildResultInfoString(reservoir.p(), RiaDefines::MATRIX_MODEL, RiaDefines::DYNAMIC_NATIVE); qDebug() << "\n\n" << "Matrix porosities, STATIC results" << "----------------------------------"; buildResultInfoString(reservoir.p(), RiaDefines::MATRIX_MODEL, RiaDefines::STATIC_NATIVE); qDebug() << "\n\n" << "Fracture porosities, DYNAMIC results" << "----------------------------------"; buildResultInfoString(reservoir.p(), RiaDefines::FRACTURE_MODEL, RiaDefines::DYNAMIC_NATIVE); qDebug() << "\n\n" << "Fracture porosities, STATIC results" << "----------------------------------"; buildResultInfoString(reservoir.p(), RiaDefines::FRACTURE_MODEL, RiaDefines::STATIC_NATIVE); } //#include "RifEclipseUnifiedRestartFileAccess.h" /* TEST(RigReservoirTest, UnifiedTestFile) { // Location of test dataset received from Håkon Høgstøl in July 2011 with 10k active cells #ifdef WIN32 QString filename("d:/Models/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.UNRST"); #else QString filename("/mnt/hgfs/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.UNRST"); #endif size_t numActiveCells = 11125; size_t numGrids = 2; { cvf::ref restartFile = new RifEclipseUnifiedRestartFileAccess(numGrids, numActiveCells); QStringList fileNameList; fileNameList << filename; restartFile->open(fileNameList); QStringList resultNames = restartFile->resultNames(); qDebug() << "Result names\n" << resultNames; QStringList timeStepText = restartFile->timeStepsText(); qDebug() << "Time step texts\n" << timeStepText; std::vector resultValues; size_t timeStep = 0; restartFile->results(resultNames[0], timeStep, &resultValues); size_t i; for (i = 0; i < 500; i++) { qDebug() << resultValues[i]; } } } */ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- TEST(RigReservoirTest, BasicTest) { cvf::ref readerInterfaceEcl = new RifReaderEclipseOutput; cvf::ref reservoir = new RigReservoir; // Location of test dataset received from Håkon Høgstøl in July 2011 with 10k active cells #ifdef WIN32 QString filename("TEST10K_FLT_LGR_NNC.EGRID"); #else QString filename("/mnt/hgfs/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.EGRID"); #endif bool result = readerInterfaceEcl->open(filename, reservoir.p()); EXPECT_TRUE(result); { QStringList staticResults = readerInterfaceEcl->staticResults(); EXPECT_EQ(42, staticResults.size()); qDebug() << "Static results\n" << staticResults; QStringList dynamicResults = readerInterfaceEcl->dynamicResults(); EXPECT_EQ(23, dynamicResults.size()); qDebug() << "Dynamic results\n" << dynamicResults; int numTimeSteps = static_cast(readerInterfaceEcl->numTimeSteps()); EXPECT_EQ(9, numTimeSteps); QStringList timeStepText = readerInterfaceEcl->timeStepText(); EXPECT_EQ(numTimeSteps, timeStepText.size()); qDebug() << "Time step texts\n" << timeStepText; } readerInterfaceEcl->close(); { QStringList staticResults = readerInterfaceEcl->staticResults(); EXPECT_EQ(0, staticResults.size()); QStringList dynamicResults = readerInterfaceEcl->dynamicResults(); EXPECT_EQ(0, dynamicResults.size()); int numTimeSteps = static_cast(readerInterfaceEcl->numTimeSteps()); EXPECT_EQ(0, numTimeSteps); QStringList timeStepText = readerInterfaceEcl->timeStepText(); EXPECT_EQ(numTimeSteps, timeStepText.size()); } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- TEST(RigReservoirTest, WellTest) { cvf::ref readerInterfaceEcl = new RifReaderEclipseOutput; cvf::ref reservoir = new RigEclipseCaseData; // Location of test dataset received from Håkon Høgstøl in July 2011 with 10k active cells #ifdef WIN32 QString filename("TEST10K_FLT_LGR_NNC.EGRID"); #else QString filename("/mnt/hgfs/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.EGRID"); #endif bool result = readerInterfaceEcl->open(filename, reservoir.p()); EXPECT_TRUE(result); cvf::UByteArray* mainGridWellCells = reservoir->wellCellsInGrid(0); EXPECT_TRUE(mainGridWellCells->size() == reservoir->mainGrid()->cellCount()); } #endif //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- TEST(DISABLED_RigReservoirTest, WellTest) { cvf::ref readerInterfaceEcl = new RifReaderEclipseOutput; cvf::ref reservoir = new RigEclipseCaseData(nullptr); // Location of test dataset received from Håkon Høgstøl in July 2011 with 10k active cells #ifdef WIN32 QString filename("d:/Models/Statoil/soursim/PKMUNK_NOV_TEST_SS.GRID"); QString sourSim("d:/Models/Statoil/soursim/result.sourres.00001"); #else QString filename("/mnt/hgfs/Statoil/testcase_juli_2011/data/TEST10K_FLT_LGR_NNC.EGRID"); QString sourSim("d:/Models/Statoil/soursim/result.sourres"); #endif bool result = readerInterfaceEcl->open(filename, reservoir.p()); EXPECT_TRUE(result); readerInterfaceEcl->setHdf5FileName(sourSim); }