diff --git a/ApplicationCode/FileInterface/RifEclipseInputFileTools.cpp b/ApplicationCode/FileInterface/RifEclipseInputFileTools.cpp index f478343b2f..07d274e6da 100644 --- a/ApplicationCode/FileInterface/RifEclipseInputFileTools.cpp +++ b/ApplicationCode/FileInterface/RifEclipseInputFileTools.cpp @@ -575,6 +575,15 @@ void RifEclipseInputFileTools::readFaults(const QString& fileName, cvf::Collecti return; } + // Parse complete file if no keywords are parsed + if (fileKeywords.size() == 0) + { + qint64 filePos = 0; + readFaults(data, filePos, faults, NULL); + + return; + } + for (size_t i = 0; i < fileKeywords.size(); i++) { if (fileKeywords[i].keyword.compare(editKeyword, Qt::CaseInsensitive) == 0) @@ -602,7 +611,7 @@ void RifEclipseInputFileTools::readFaults(const QString& fileName, cvf::Collecti //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RifEclipseInputFileTools::readFaultsInGridSection(const QString& fileName, cvf::Collection& faults) +void RifEclipseInputFileTools::readFaultsInGridSection(const QString& fileName, cvf::Collection& faults, std::vector& filenamesWithFaults) { QFile data(fileName); if (!data.open(QFile::ReadOnly)) @@ -622,7 +631,7 @@ void RifEclipseInputFileTools::readFaultsInGridSection(const QString& fileName, bool isEditKeywordDetected = false; - readFaultsAndParseIncludeStatementsRecursively(data, gridPos, faults, &isEditKeywordDetected); + readFaultsAndParseIncludeStatementsRecursively(data, gridPos, faults, filenamesWithFaults, &isEditKeywordDetected); } @@ -673,7 +682,7 @@ qint64 RifEclipseInputFileTools::findKeyword(const QString& keyword, QFile& file //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RifEclipseInputFileTools::readFaultsAndParseIncludeStatementsRecursively(QFile& file, qint64 startPos, cvf::Collection& faults, bool* isEditKeywordDetected) +bool RifEclipseInputFileTools::readFaultsAndParseIncludeStatementsRecursively(QFile& file, qint64 startPos, cvf::Collection& faults, std::vector& filenamesWithFaults, bool* isEditKeywordDetected) { QString line; @@ -729,7 +738,7 @@ bool RifEclipseInputFileTools::readFaultsAndParseIncludeStatementsRecursively(QF { qDebug() << "Found include statement, and start parsing of\n " << absoluteFilename; - if (!readFaultsAndParseIncludeStatementsRecursively(includeFile, 0, faults, isEditKeywordDetected)) + if (!readFaultsAndParseIncludeStatementsRecursively(includeFile, 0, faults, filenamesWithFaults, isEditKeywordDetected)) { qDebug() << "Error when parsing include file : " << absoluteFilename; } @@ -740,6 +749,8 @@ bool RifEclipseInputFileTools::readFaultsAndParseIncludeStatementsRecursively(QF else if (line.startsWith(faultsKeyword, Qt::CaseInsensitive)) { readFaults(file, file.pos(), faults, isEditKeywordDetected); + + filenamesWithFaults.push_back(file.fileName()); } if (isEditKeywordDetected && *isEditKeywordDetected) diff --git a/ApplicationCode/FileInterface/RifEclipseInputFileTools.h b/ApplicationCode/FileInterface/RifEclipseInputFileTools.h index c2bd93a668..ce984e42aa 100644 --- a/ApplicationCode/FileInterface/RifEclipseInputFileTools.h +++ b/ApplicationCode/FileInterface/RifEclipseInputFileTools.h @@ -61,7 +61,7 @@ public: static bool readPropertyAtFilePosition (const QString& fileName, RigCaseData* eclipseCase, const QString& eclipseKeyWord, qint64 filePos, const QString& resultName ); - static void readFaultsInGridSection(const QString& fileName, cvf::Collection& faults); + static void readFaultsInGridSection(const QString& fileName, cvf::Collection& faults, std::vector& filenamesWithFaults); static void readFaults(const QString& fileName, cvf::Collection& faults, const std::vector< RifKeywordAndFilePos >& fileKeywords); static void readFaults(QFile &data, qint64 filePos, cvf::Collection &faults, bool* isEditKeywordDetected); @@ -72,7 +72,7 @@ public: static bool writePropertyToTextFile(const QString& fileName, RigCaseData* eclipseCase, size_t timeStep, const QString& resultName, const QString& eclipseKeyWord); static bool writeBinaryResultToTextFile(const QString& fileName, RigCaseData* eclipseCase, RifReaderInterface::PorosityModelResultType porosityModel, size_t timeStep, const QString& resultName, const QString& eclipseKeyWord, const double undefinedValue); - static bool readFaultsAndParseIncludeStatementsRecursively(QFile& file, qint64 startPos, cvf::Collection& faults, bool* isEditKeywordDetected); + static bool readFaultsAndParseIncludeStatementsRecursively(QFile& file, qint64 startPos, cvf::Collection& faults, std::vector& filenamesWithFaults, bool* isEditKeywordDetected); private: static void writeDataToTextFile(QFile* file, const QString& eclipseKeyWord, const std::vector& resultData); diff --git a/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp b/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp index 6cd11be4d9..561114ba0b 100644 --- a/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp +++ b/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp @@ -375,18 +375,40 @@ bool RifReaderEclipseOutput::open(const QString& fileName, RigCaseData* eclipseC progInfo.setProgressDescription("Reading faults"); progInfo.setNextProgressIncrement(10); - foreach (QString fname, fileSet) + if (this->filenamesWithFaults().size() > 0) { - if (fname.endsWith(".DATA")) + cvf::Collection faults; + std::vector< RifKeywordAndFilePos > fileKeywords; + + std::vector filenamesWithFaults; + + for (size_t i = 0; i < this->filenamesWithFaults().size(); i++) { - cvf::Collection faults; - RifEclipseInputFileTools::readFaultsInGridSection(fname, faults); + QString faultFilename = this->filenamesWithFaults()[i]; + + RifEclipseInputFileTools::readFaults(faultFilename, faults, fileKeywords); RigMainGrid* mainGrid = eclipseCase->mainGrid(); mainGrid->setFaults(faults); } } + else + { + foreach (QString fname, fileSet) + { + if (fname.endsWith(".DATA")) + { + cvf::Collection faults; + std::vector filenamesWithFaults; + RifEclipseInputFileTools::readFaultsInGridSection(fname, faults, filenamesWithFaults); + RigMainGrid* mainGrid = eclipseCase->mainGrid(); + mainGrid->setFaults(faults); + + this->setFilenamesWithFaults(filenamesWithFaults); + } + } + } progInfo.incrementProgress(); diff --git a/ApplicationCode/FileInterface/RifReaderInterface.h b/ApplicationCode/FileInterface/RifReaderInterface.h index 7b947f9468..7fef596af5 100644 --- a/ApplicationCode/FileInterface/RifReaderInterface.h +++ b/ApplicationCode/FileInterface/RifReaderInterface.h @@ -53,5 +53,11 @@ public: virtual bool staticResult(const QString& result, PorosityModelResultType matrixOrFracture, std::vector* values) = 0; virtual bool dynamicResult(const QString& result, PorosityModelResultType matrixOrFracture, size_t stepIndex, std::vector* values) = 0; - virtual std::vector timeSteps() { std::vector timeSteps; return timeSteps; } + virtual std::vector timeSteps() { std::vector timeSteps; return timeSteps; } + + void setFilenamesWithFaults(const std::vector& filenames) { m_filenamesWithFaults = filenames; } + std::vector filenamesWithFaults() { return m_filenamesWithFaults; } + +private: + std::vector m_filenamesWithFaults; }; diff --git a/ApplicationCode/ProjectDataModel/RimCase.cpp b/ApplicationCode/ProjectDataModel/RimCase.cpp index c701ac5c68..e412c1557e 100644 --- a/ApplicationCode/ProjectDataModel/RimCase.cpp +++ b/ApplicationCode/ProjectDataModel/RimCase.cpp @@ -84,6 +84,8 @@ RimCase::RimCase() CAF_PDM_InitField(&flipXAxis, "FlipXAxis", false, "Flip X Axis", "", "", ""); CAF_PDM_InitField(&flipYAxis, "FlipYAxis", false, "Flip Y Axis", "", "", ""); + CAF_PDM_InitFieldNoDefault(&filesContainingFaults, "FilesContainingFaults", "", "", "", ""); + filesContainingFaults.setUiHidden(true); // Obsolete field CAF_PDM_InitField(&caseName, "CaseName", QString(), "Obsolete", "", "" ,""); diff --git a/ApplicationCode/ProjectDataModel/RimCase.h b/ApplicationCode/ProjectDataModel/RimCase.h index cd24d0e209..efb5801ba5 100644 --- a/ApplicationCode/ProjectDataModel/RimCase.h +++ b/ApplicationCode/ProjectDataModel/RimCase.h @@ -53,6 +53,8 @@ public: caf::PdmPointersField reservoirViews; caf::PdmField flipXAxis; caf::PdmField flipYAxis; + + caf::PdmField > filesContainingFaults; virtual bool openEclipseGridFile() { return false;}; // Should be pure virtual but PDM does not allow that. diff --git a/ApplicationCode/ProjectDataModel/RimResultCase.cpp b/ApplicationCode/ProjectDataModel/RimResultCase.cpp index 71e7624639..49f33dbeb1 100644 --- a/ApplicationCode/ProjectDataModel/RimResultCase.cpp +++ b/ApplicationCode/ProjectDataModel/RimResultCase.cpp @@ -99,11 +99,15 @@ bool RimResultCase::openEclipseGridFile() cvf::ref eclipseCase = new RigCaseData; readerInterface = new RifReaderEclipseOutput; + readerInterface->setFilenamesWithFaults(this->filesContainingFaults()); + if (!readerInterface->open(caseFileName(), eclipseCase.p())) { return false; } + this->filesContainingFaults = readerInterface->filenamesWithFaults(); + this->setReservoirData( eclipseCase.p() ); }