Rename and improvements related to close

p4#: 20645
This commit is contained in:
Magne Sjaastad 2013-02-27 14:13:37 +01:00
parent 7694c5d02d
commit d628973f56
2 changed files with 104 additions and 74 deletions

View File

@ -191,7 +191,8 @@ bool transferGridCellData(RigMainGrid* mainGrid, RigActiveCellInfo* activeCellIn
//--------------------------------------------------------------------------------------------------
RifReaderEclipseOutput::RifReaderEclipseOutput()
{
m_ecl_file = NULL;
m_ecl_init_file = NULL;
m_dynamicResultsAccess = NULL;
ground();
}
@ -212,7 +213,7 @@ void RifReaderEclipseOutput::ground()
m_fileSet.clear();
m_timeSteps.clear();
m_reservoir = NULL;
m_eclipseCase = NULL;
}
//--------------------------------------------------------------------------------------------------
@ -220,13 +221,16 @@ void RifReaderEclipseOutput::ground()
//--------------------------------------------------------------------------------------------------
void RifReaderEclipseOutput::close()
{
if (m_ecl_file)
if (m_ecl_init_file)
{
ecl_file_close(m_ecl_file);
ecl_file_close(m_ecl_init_file);
}
m_ecl_file = NULL;
m_ecl_init_file = NULL;
m_dynamicResultsAccess = NULL;
if (m_dynamicResultsAccess.notNull())
{
m_dynamicResultsAccess->close();
}
ground();
}
@ -374,19 +378,19 @@ bool RifReaderEclipseOutput::open(const QString& fileName, RigEclipseCase* eclip
progInfo.setProgressDescription("Reading Result index");
progInfo.setNextProgressIncrement(60);
m_reservoir = eclipseCase;
m_eclipseCase = eclipseCase;
eclipseCase->results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(this);
eclipseCase->results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(this);
// Build results meta data
if (!buildMetaData(eclipseCase)) return false;
if (!buildMetaData()) return false;
progInfo.incrementProgress();
progInfo.setNextProgressIncrement(8);
progInfo.setProgressDescription("Reading Well information");
readWellCells(eclipseCase);
readWellCells();
return true;
@ -416,7 +420,7 @@ bool RifReaderEclipseOutput::openAndReadActiveCellData(const QString& fileName,
// Keep the set of files of interest
m_fileSet = fileSet;
m_reservoir = eclipseCase;
m_eclipseCase = eclipseCase;
eclipseCase->results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(this);
eclipseCase->results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(this);
@ -424,7 +428,7 @@ bool RifReaderEclipseOutput::openAndReadActiveCellData(const QString& fileName,
progInfo.setNextProgressIncrement(50);
progInfo.setProgressDescription("Reading active cell information");
if (!readActiveCellInfo(eclipseCase))
if (!readActiveCellInfo())
{
return false;
}
@ -435,20 +439,19 @@ bool RifReaderEclipseOutput::openAndReadActiveCellData(const QString& fileName,
progInfo.setProgressDescription("Reading meta data");
// Build results meta data
if (!buildMetaData(eclipseCase)) return false;
if (!buildMetaData()) return false;
return true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RifReaderEclipseOutput::readActiveCellInfo(RigEclipseCase* eclipseCase)
bool RifReaderEclipseOutput::readActiveCellInfo()
{
CVF_ASSERT(eclipseCase);
CVF_ASSERT(eclipseCase->mainGrid());
CVF_ASSERT(m_eclipseCase.notNull());
CVF_ASSERT(m_eclipseCase->mainGrid());
QString egridFileName = RifEclipseOutputFileTools::fileNameByType(m_fileSet, ECL_EGRID_FILE);
if (egridFileName.size() > 0)
@ -471,12 +474,12 @@ bool RifReaderEclipseOutput::readActiveCellInfo(RigEclipseCase* eclipseCase)
}
// Check if number of cells is matching
if (eclipseCase->mainGrid()->cells().size() != globalCellCount)
if (m_eclipseCase->mainGrid()->cells().size() != globalCellCount)
{
return false;
}
RigActiveCellInfo* activeCellInfo = eclipseCase->activeCellInfo();
RigActiveCellInfo* activeCellInfo = m_eclipseCase->activeCellInfo();
activeCellInfo->setGlobalCellCount(globalCellCount);
activeCellInfo->setGridCount(actnumKeywordCount);
@ -522,9 +525,9 @@ bool RifReaderEclipseOutput::readActiveCellInfo(RigEclipseCase* eclipseCase)
//--------------------------------------------------------------------------------------------------
/// Build meta data - get states and results info
//--------------------------------------------------------------------------------------------------
bool RifReaderEclipseOutput::buildMetaData(RigEclipseCase* eclipseCase)
bool RifReaderEclipseOutput::buildMetaData()
{
CVF_ASSERT(m_reservoir.notNull());
CVF_ASSERT(m_eclipseCase.notNull());
CVF_ASSERT(m_fileSet.size() > 0);
caf::ProgressInfo progInfo(m_fileSet.size() + 3,"");
@ -541,8 +544,8 @@ bool RifReaderEclipseOutput::buildMetaData(RigEclipseCase* eclipseCase)
progInfo.incrementProgress();
RigReservoirCellResults* matrixModelResults = m_reservoir->results(RifReaderInterface::MATRIX_RESULTS);
RigReservoirCellResults* fractureModelResults = m_reservoir->results(RifReaderInterface::FRACTURE_RESULTS);
RigReservoirCellResults* matrixModelResults = m_eclipseCase->results(RifReaderInterface::MATRIX_RESULTS);
RigReservoirCellResults* fractureModelResults = m_eclipseCase->results(RifReaderInterface::FRACTURE_RESULTS);
if (m_dynamicResultsAccess.notNull())
{
@ -554,7 +557,7 @@ bool RifReaderEclipseOutput::buildMetaData(RigEclipseCase* eclipseCase)
m_dynamicResultsAccess->resultNames(&resultNames, &resultNamesDataItemCounts);
{
QStringList matrixResultNames = validKeywordsForPorosityModel(resultNames, resultNamesDataItemCounts, m_reservoir->activeCellInfo(), RifReaderInterface::MATRIX_RESULTS, m_dynamicResultsAccess->timeStepCount());
QStringList matrixResultNames = validKeywordsForPorosityModel(resultNames, resultNamesDataItemCounts, m_eclipseCase->activeCellInfo(), RifReaderInterface::MATRIX_RESULTS, m_dynamicResultsAccess->timeStepCount());
for (int i = 0; i < matrixResultNames.size(); ++i)
{
@ -564,7 +567,7 @@ bool RifReaderEclipseOutput::buildMetaData(RigEclipseCase* eclipseCase)
}
{
QStringList fractureResultNames = validKeywordsForPorosityModel(resultNames, resultNamesDataItemCounts, m_reservoir->activeCellInfo(), RifReaderInterface::FRACTURE_RESULTS, m_dynamicResultsAccess->timeStepCount());
QStringList fractureResultNames = validKeywordsForPorosityModel(resultNames, resultNamesDataItemCounts, m_eclipseCase->activeCellInfo(), RifReaderInterface::FRACTURE_RESULTS, m_dynamicResultsAccess->timeStepCount());
for (int i = 0; i < fractureResultNames.size(); ++i)
{
@ -577,51 +580,47 @@ bool RifReaderEclipseOutput::buildMetaData(RigEclipseCase* eclipseCase)
progInfo.incrementProgress();
QString initFileName = RifEclipseOutputFileTools::fileNameByType(m_fileSet, ECL_INIT_FILE);
if (initFileName.size() > 0)
if (!openInitFile())
{
ecl_file_type* ecl_file = ecl_file_open(initFileName.toAscii().data());
if (!ecl_file) return false;
return false;
}
progInfo.incrementProgress();
progInfo.incrementProgress();
QStringList resultNames;
std::vector<size_t> resultNamesDataItemCounts;
RifEclipseOutputFileTools::findKeywordsAndDataItemCounts(m_ecl_init_file, &resultNames, &resultNamesDataItemCounts);
QStringList resultNames;
std::vector<size_t> resultNamesDataItemCounts;
RifEclipseOutputFileTools::findKeywordsAndDataItemCounts(ecl_file, &resultNames, &resultNamesDataItemCounts);
{
QStringList matrixResultNames = validKeywordsForPorosityModel(resultNames, resultNamesDataItemCounts, m_eclipseCase->activeCellInfo(), RifReaderInterface::MATRIX_RESULTS, 1);
QList<QDateTime> staticDate;
if (m_timeSteps.size() > 0)
{
QStringList matrixResultNames = validKeywordsForPorosityModel(resultNames, resultNamesDataItemCounts, m_reservoir->activeCellInfo(), RifReaderInterface::MATRIX_RESULTS, 1);
QList<QDateTime> staticDate;
if (m_timeSteps.size() > 0)
{
staticDate.push_back(m_timeSteps.front());
}
for (int i = 0; i < matrixResultNames.size(); ++i)
{
size_t resIndex = matrixModelResults->addEmptyScalarResult(RimDefines::STATIC_NATIVE, matrixResultNames[i]);
matrixModelResults->setTimeStepDates(resIndex, staticDate);
}
staticDate.push_back(m_timeSteps.front());
}
for (int i = 0; i < matrixResultNames.size(); ++i)
{
QStringList fractureResultNames = validKeywordsForPorosityModel(resultNames, resultNamesDataItemCounts, m_reservoir->activeCellInfo(), RifReaderInterface::FRACTURE_RESULTS, 1);
size_t resIndex = matrixModelResults->addEmptyScalarResult(RimDefines::STATIC_NATIVE, matrixResultNames[i]);
matrixModelResults->setTimeStepDates(resIndex, staticDate);
}
}
QList<QDateTime> staticDate;
if (m_timeSteps.size() > 0)
{
staticDate.push_back(m_timeSteps.front());
}
{
QStringList fractureResultNames = validKeywordsForPorosityModel(resultNames, resultNamesDataItemCounts, m_eclipseCase->activeCellInfo(), RifReaderInterface::FRACTURE_RESULTS, 1);
for (int i = 0; i < fractureResultNames.size(); ++i)
{
size_t resIndex = fractureModelResults->addEmptyScalarResult(RimDefines::STATIC_NATIVE, fractureResultNames[i]);
fractureModelResults->setTimeStepDates(resIndex, staticDate);
}
QList<QDateTime> staticDate;
if (m_timeSteps.size() > 0)
{
staticDate.push_back(m_timeSteps.front());
}
m_ecl_file = ecl_file;
for (int i = 0; i < fractureResultNames.size(); ++i)
{
size_t resIndex = fractureModelResults->addEmptyScalarResult(RimDefines::STATIC_NATIVE, fractureResultNames[i]);
fractureModelResults->setTimeStepDates(resIndex, staticDate);
}
}
return true;
@ -672,16 +671,22 @@ RifEclipseRestartDataAccess* RifReaderEclipseOutput::dynamicResultsAccess(const
bool RifReaderEclipseOutput::staticResult(const QString& result, PorosityModelResultType matrixOrFracture, std::vector<double>* values)
{
CVF_ASSERT(values);
CVF_ASSERT(m_ecl_file);
if (!openInitFile())
{
return false;
}
CVF_ASSERT(m_ecl_init_file);
std::vector<double> fileValues;
size_t numOccurrences = ecl_file_get_num_named_kw(m_ecl_file, result.toAscii().data());
size_t numOccurrences = ecl_file_get_num_named_kw(m_ecl_init_file, result.toAscii().data());
size_t i;
for (i = 0; i < numOccurrences; i++)
{
std::vector<double> partValues;
RifEclipseOutputFileTools::keywordData(m_ecl_file, result, i, &partValues);
RifEclipseOutputFileTools::keywordData(m_ecl_init_file, result, i, &partValues);
fileValues.insert(fileValues.end(), partValues.begin(), partValues.end());
}
@ -698,7 +703,7 @@ bool RifReaderEclipseOutput::dynamicResult(const QString& result, PorosityModelR
CVF_ASSERT(m_dynamicResultsAccess.notNull());
std::vector<double> fileValues;
if (!m_dynamicResultsAccess->results(result, stepIndex, m_reservoir->mainGrid()->gridCount(), &fileValues))
if (!m_dynamicResultsAccess->results(result, stepIndex, m_eclipseCase->mainGrid()->gridCount(), &fileValues))
{
return false;
}
@ -711,9 +716,9 @@ bool RifReaderEclipseOutput::dynamicResult(const QString& result, PorosityModelR
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifReaderEclipseOutput::readWellCells(RigEclipseCase* eclipseCase)
void RifReaderEclipseOutput::readWellCells()
{
CVF_ASSERT(eclipseCase);
CVF_ASSERT(m_eclipseCase.notNull());
if (m_dynamicResultsAccess.isNull()) return;
@ -722,9 +727,9 @@ void RifReaderEclipseOutput::readWellCells(RigEclipseCase* eclipseCase)
m_dynamicResultsAccess->readWellData(ert_well_info);
RigMainGrid* mainGrid = eclipseCase->mainGrid();
RigMainGrid* mainGrid = m_eclipseCase->mainGrid();
std::vector<RigGridBase*> grids;
eclipseCase->allGrids(&grids);
m_eclipseCase->allGrids(&grids);
cvf::Collection<RigWellResults> wells;
caf::ProgressInfo progress(well_info_get_num_wells(ert_well_info), "");
@ -884,7 +889,7 @@ void RifReaderEclipseOutput::readWellCells(RigEclipseCase* eclipseCase)
well_info_free(ert_well_info);
eclipseCase->setWellResults(wells);
m_eclipseCase->setWellResults(wells);
}
@ -956,7 +961,7 @@ QStringList RifReaderEclipseOutput::validKeywordsForPorosityModel(const QStringL
//--------------------------------------------------------------------------------------------------
void RifReaderEclipseOutput::extractResultValuesBasedOnPorosityModel(PorosityModelResultType matrixOrFracture, std::vector<double>* destinationResultValues, const std::vector<double>& sourceResultValues)
{
RigActiveCellInfo* actCellInfo = m_reservoir->activeCellInfo();
RigActiveCellInfo* actCellInfo = m_eclipseCase->activeCellInfo();
if (matrixOrFracture == RifReaderInterface::MATRIX_RESULTS)
{
@ -969,7 +974,7 @@ void RifReaderEclipseOutput::extractResultValuesBasedOnPorosityModel(PorosityMod
size_t dataItemCount = 0;
size_t sourceStartPosition = 0;
for (size_t i = 0; i < m_reservoir->mainGrid()->gridCount(); i++)
for (size_t i = 0; i < m_eclipseCase->mainGrid()->gridCount(); i++)
{
size_t matrixActiveCellCount = 0;
size_t fractureActiveCellCount = 0;
@ -986,7 +991,7 @@ void RifReaderEclipseOutput::extractResultValuesBasedOnPorosityModel(PorosityMod
size_t dataItemCount = 0;
size_t sourceStartPosition = 0;
for (size_t i = 0; i < m_reservoir->mainGrid()->gridCount(); i++)
for (size_t i = 0; i < m_eclipseCase->mainGrid()->gridCount(); i++)
{
size_t matrixActiveCellCount = 0;
size_t fractureActiveCellCount = 0;
@ -999,3 +1004,26 @@ void RifReaderEclipseOutput::extractResultValuesBasedOnPorosityModel(PorosityMod
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RifReaderEclipseOutput::openInitFile()
{
if (m_ecl_init_file)
{
return true;
}
QString initFileName = RifEclipseOutputFileTools::fileNameByType(m_fileSet, ECL_INIT_FILE);
if (initFileName.size() > 0)
{
ecl_file_type* ecl_init_file = ecl_file_open(initFileName.toAscii().data());
if (ecl_init_file)
{
return true;
}
}
return false;
}

View File

@ -54,9 +54,11 @@ public:
private:
void ground();
bool readActiveCellInfo(RigEclipseCase* eclipseCase);
bool buildMetaData(RigEclipseCase* eclipseCase);
void readWellCells(RigEclipseCase* eclipseCase);
bool readActiveCellInfo();
bool buildMetaData();
void readWellCells();
bool openInitFile();
void extractResultValuesBasedOnPorosityModel(PorosityModelResultType matrixOrFracture, std::vector<double>* values, const std::vector<double>& fileValues);
@ -69,10 +71,10 @@ private:
QString m_fileName; // Name of file used to start accessing Eclipse output files
QStringList m_fileSet; // Set of files in filename's path with same base name as filename
cvf::ref<RigEclipseCase> m_reservoir;
cvf::ref<RigEclipseCase> m_eclipseCase;
QList<QDateTime> m_timeSteps;
ecl_file_type* m_ecl_file; // File access to static results
ecl_file_type* m_ecl_init_file; // File access to static results
cvf::ref<RifEclipseRestartDataAccess> m_dynamicResultsAccess; // File access to dynamic results
};