Improved multi case initial reading

When creating a multi case group from multiple files, read grid from first file.
The main grid from the first case is reused for the other cases.
NOTE: Metadata and well information is not read for the other cases
p4#: 20655
This commit is contained in:
Magne Sjaastad 2013-02-27 15:27:33 +01:00
parent 3dc027e29e
commit 3dbc8a9d57
6 changed files with 103 additions and 22 deletions

View File

@ -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(); // First file is read completely including grid.
rimResultReservoir->caseName = caseName; // The main grid from the first case is reused directly in for the other cases.
rimResultReservoir->caseFileName = fileName; // When reading active cell info, only the total cell count is tested for consistency
rimResultReservoir->caseDirectory = casePath; 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(); onProjectOpenedOrClosed();
return true; return true;
} }

View File

@ -80,7 +80,7 @@ public:
bool openEclipseCaseFromFile(const QString& fileName); bool openEclipseCaseFromFile(const QString& fileName);
bool openEclipseCase(const QString& caseName, const QString& caseFileName); 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 openInputEclipseCase(const QString& caseName, const QStringList& caseFileNames);
bool loadLastUsedProject(); bool loadLastUsedProject();

View File

@ -430,8 +430,9 @@ bool RifReaderEclipseOutput::openAndReadActiveCellData(const QString& fileName,
progInfo.setNextProgressIncrement(50); progInfo.setNextProgressIncrement(50);
progInfo.setProgressDescription("Reading meta data"); progInfo.setProgressDescription("Reading meta data");
// Build results meta data // Reading of metadata and well cells is not performed here
if (!buildMetaData()) return false; //if (!buildMetaData()) return false;
// readWellCells();
return true; return true;
} }

View File

@ -90,6 +90,51 @@ bool RimResultReservoir::openEclipseGridFile()
return true; return true;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimResultReservoir::openAndReadActiveCellData(RigMainGrid* mainGrid)
{
cvf::ref<RifReaderInterface> 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<RigEclipseCase> 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;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///

View File

@ -24,7 +24,8 @@
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include "RimReservoir.h" #include "RimReservoir.h"
class RifReaderInterface; class RifReaderInterface;
class RigMainGrid;
//================================================================================================== //==================================================================================================
// //
@ -45,6 +46,7 @@ public:
caf::PdmField<QString> caseDirectory; caf::PdmField<QString> caseDirectory;
virtual bool openEclipseGridFile(); virtual bool openEclipseGridFile();
bool openAndReadActiveCellData(RigMainGrid* mainGrid);
//virtual caf::PdmFieldHandle* userDescriptionField() { return &caseName;} //virtual caf::PdmFieldHandle* userDescriptionField() { return &caseName;}

View File

@ -1312,10 +1312,5 @@ void RIMainWindow::slotOpenMultipleCases()
appendEGRIDFilesRecursively(fileName, gridFileNames); appendEGRIDFilesRecursively(fileName, gridFileNames);
} }
for (int i = 0; i < gridFileNames.size(); i++) app->addEclipseCases(gridFileNames);
{
QString fileName = gridFileNames[i];
app->addEclipseCase(fileName);
}
} }