diff --git a/ApplicationCode/Application/RIApplication.cpp b/ApplicationCode/Application/RIApplication.cpp index 3232e0f85c..49ae37aba0 100644 --- a/ApplicationCode/Application/RIApplication.cpp +++ b/ApplicationCode/Application/RIApplication.cpp @@ -1297,26 +1297,64 @@ void RIApplication::updateRegressionTest(const QString& testRootPath) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RIApplication::addEclipseCase(const QString& fileName) +bool RIApplication::addEclipseCases(const QStringList& fileNames) { - QFileInfo gridFileName(fileName); + if (fileNames.size() == 0) return true; - QString caseName = gridFileName.completeBaseName(); - QString casePath = gridFileName.absolutePath(); - RimResultReservoir* rimResultReservoir = new RimResultReservoir(); - rimResultReservoir->caseName = caseName; - rimResultReservoir->caseFileName = fileName; - rimResultReservoir->caseDirectory = casePath; + // First file is read completely including grid. + // The main grid from the first case is reused directly in for the other cases. + // When reading active cell info, only the total cell count is tested for consistency + RigMainGrid* mainGrid = NULL; - m_project->reservoirs.push_back(rimResultReservoir); + { + QString firstFileName = fileNames[0]; + QFileInfo gridFileName(firstFileName); - rimResultReservoir->openEclipseGridFile(); + QString caseName = gridFileName.completeBaseName(); + QString casePath = gridFileName.absolutePath(); - m_project->moveEclipseCaseIntoCaseGroup(rimResultReservoir); + RimResultReservoir* rimResultReservoir = new RimResultReservoir(); + rimResultReservoir->caseName = caseName; + rimResultReservoir->caseFileName = firstFileName; + rimResultReservoir->caseDirectory = casePath; + + m_project->reservoirs.push_back(rimResultReservoir); + + if (!rimResultReservoir->openEclipseGridFile()) + { + return false; + } + + m_project->moveEclipseCaseIntoCaseGroup(rimResultReservoir); + + mainGrid = rimResultReservoir->reservoirData()->mainGrid(); + } + + for (int i = 1; i < fileNames.size(); i++) + { + QString fileName = fileNames[i]; + QFileInfo gridFileName(fileName); + + QString caseName = gridFileName.completeBaseName(); + QString casePath = gridFileName.absolutePath(); + + RimResultReservoir* rimResultReservoir = new RimResultReservoir(); + rimResultReservoir->caseName = caseName; + rimResultReservoir->caseFileName = fileName; + rimResultReservoir->caseDirectory = casePath; + + m_project->reservoirs.push_back(rimResultReservoir); + + if (!rimResultReservoir->openAndReadActiveCellData(mainGrid)) + { + return false; + } + + m_project->moveEclipseCaseIntoCaseGroup(rimResultReservoir); + } onProjectOpenedOrClosed(); return true; - } diff --git a/ApplicationCode/Application/RIApplication.h b/ApplicationCode/Application/RIApplication.h index 6603b52380..4073593ad7 100644 --- a/ApplicationCode/Application/RIApplication.h +++ b/ApplicationCode/Application/RIApplication.h @@ -80,7 +80,7 @@ public: bool openEclipseCaseFromFile(const QString& fileName); bool openEclipseCase(const QString& caseName, const QString& caseFileName); - bool addEclipseCase(const QString& fileName); + bool addEclipseCases(const QStringList& fileNames); bool openInputEclipseCase(const QString& caseName, const QStringList& caseFileNames); bool loadLastUsedProject(); diff --git a/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp b/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp index 4c97977ade..2c88903a4d 100644 --- a/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp +++ b/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp @@ -430,8 +430,9 @@ bool RifReaderEclipseOutput::openAndReadActiveCellData(const QString& fileName, progInfo.setNextProgressIncrement(50); progInfo.setProgressDescription("Reading meta data"); - // Build results meta data - if (!buildMetaData()) return false; + // Reading of metadata and well cells is not performed here + //if (!buildMetaData()) return false; + // readWellCells(); return true; } diff --git a/ApplicationCode/ProjectDataModel/RimResultReservoir.cpp b/ApplicationCode/ProjectDataModel/RimResultReservoir.cpp index 5461b8b8f2..6bece89bf8 100644 --- a/ApplicationCode/ProjectDataModel/RimResultReservoir.cpp +++ b/ApplicationCode/ProjectDataModel/RimResultReservoir.cpp @@ -90,6 +90,51 @@ bool RimResultReservoir::openEclipseGridFile() return true; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimResultReservoir::openAndReadActiveCellData(RigMainGrid* mainGrid) +{ + cvf::ref readerInterface; + + if (caseName().contains("Result Mock Debug Model")) + { + readerInterface = this->createMockModel(this->caseName()); + + m_rigEclipseCase->results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(readerInterface.p()); + m_rigEclipseCase->results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(readerInterface.p()); + } + else + { + QString fname = createAbsoluteFilenameFromCase(caseName); + if (fname.isEmpty()) + { + return false; + } + + cvf::ref eclipseCase = new RigEclipseCase; + eclipseCase->setMainGrid(mainGrid); + + readerInterface = new RifReaderEclipseOutput; + if (!readerInterface->openAndReadActiveCellData(fname, eclipseCase.p())) + { + return false; + } + + readerInterface->close(); + + m_rigEclipseCase = eclipseCase; + } + + CVF_ASSERT(m_rigEclipseCase.notNull()); + CVF_ASSERT(readerInterface.notNull()); + + m_rigEclipseCase->computeCachedData(); + + return true; +} + + //-------------------------------------------------------------------------------------------------- /// diff --git a/ApplicationCode/ProjectDataModel/RimResultReservoir.h b/ApplicationCode/ProjectDataModel/RimResultReservoir.h index cfbffd5abc..31d5f8fe26 100644 --- a/ApplicationCode/ProjectDataModel/RimResultReservoir.h +++ b/ApplicationCode/ProjectDataModel/RimResultReservoir.h @@ -24,7 +24,8 @@ #include "cafPdmObject.h" #include "RimReservoir.h" - class RifReaderInterface; +class RifReaderInterface; +class RigMainGrid; //================================================================================================== // @@ -45,6 +46,7 @@ public: caf::PdmField caseDirectory; virtual bool openEclipseGridFile(); + bool openAndReadActiveCellData(RigMainGrid* mainGrid); //virtual caf::PdmFieldHandle* userDescriptionField() { return &caseName;} diff --git a/ApplicationCode/UserInterface/RIMainWindow.cpp b/ApplicationCode/UserInterface/RIMainWindow.cpp index 407ae81226..9012fca5fc 100644 --- a/ApplicationCode/UserInterface/RIMainWindow.cpp +++ b/ApplicationCode/UserInterface/RIMainWindow.cpp @@ -1312,10 +1312,5 @@ void RIMainWindow::slotOpenMultipleCases() appendEGRIDFilesRecursively(fileName, gridFileNames); } - for (int i = 0; i < gridFileNames.size(); i++) - { - QString fileName = gridFileNames[i]; - - app->addEclipseCase(fileName); - } + app->addEclipseCases(gridFileNames); }