Results Storage: Refined the output format. Think it is ok now

p4#: 20956
This commit is contained in:
Jacob Støren 2013-03-19 09:08:37 +01:00
parent f0fa445f7a
commit 516c642cc4
3 changed files with 33 additions and 24 deletions

View File

@ -50,6 +50,10 @@ RimReservoirCellResultsCacher::~RimReservoirCellResultsCacher()
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// This override populates the metainfo regarding the cell results data in the RigReservoirCellResults
/// object. This metainfo will then be written to the project file when saving, and thus read on project file open.
/// This method then writes the actual double arrays to the data file in a simple format:
/// MagicNumber<uint32>, Version<uint32>, ResultVariables< Array < TimeStep< CellDataArraySize<uint64>, CellData< Array<double > > > >
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimReservoirCellResultsCacher::setupBeforeSave() void RimReservoirCellResultsCacher::setupBeforeSave()
@ -71,13 +75,15 @@ void RimReservoirCellResultsCacher::setupBeforeSave()
QDataStream stream(&cacheFile); QDataStream stream(&cacheFile);
stream.setVersion(QDataStream::Qt_4_0); stream.setVersion(QDataStream::Qt_4_0);
stream << (quint32)0xCEECAC4E; // magic number stream << (quint32)0xCEECAC4E; // magic number
stream << (qint32)1; // Version stream << (quint32)1; // Version number. Increment if needing to extend the format in ways that can not be handled generically by the reader
for (size_t rIdx = 0; rIdx < resInfo.size(); ++rIdx) for (size_t rIdx = 0; rIdx < resInfo.size(); ++rIdx)
{ {
size_t timestepCount = m_cellResults->cellScalarResults(resInfo[rIdx].m_gridScalarResultIndex).size(); size_t timestepCount = m_cellResults->cellScalarResults(resInfo[rIdx].m_gridScalarResultIndex).size();
if (timestepCount) if (timestepCount)
{ {
// Create and setup the cache information for this result
RimReservoirCellResultsCacheEntryInfo* cacheEntry = new RimReservoirCellResultsCacheEntryInfo; RimReservoirCellResultsCacheEntryInfo* cacheEntry = new RimReservoirCellResultsCacheEntryInfo;
m_resultCacheMetaData.push_back(cacheEntry); m_resultCacheMetaData.push_back(cacheEntry);
@ -85,8 +91,11 @@ void RimReservoirCellResultsCacher::setupBeforeSave()
cacheEntry->m_resultName = resInfo[rIdx].m_resultName; cacheEntry->m_resultName = resInfo[rIdx].m_resultName;
cacheEntry->m_timeStepDates = resInfo[rIdx].m_timeStepDates; cacheEntry->m_timeStepDates = resInfo[rIdx].m_timeStepDates;
// Take note of the file position for fast lookup later
cacheEntry->m_filePosition = cacheFile.pos(); cacheEntry->m_filePosition = cacheFile.pos();
// Write all the scalar values for each time step to the stream,
// starting with the number of values
for (size_t tsIdx = 0; tsIdx < resInfo[rIdx].m_timeStepDates.size() ; ++tsIdx) for (size_t tsIdx = 0; tsIdx < resInfo[rIdx].m_timeStepDates.size() ; ++tsIdx)
{ {
const std::vector<double>* data = NULL; const std::vector<double>* data = NULL;
@ -97,8 +106,8 @@ void RimReservoirCellResultsCacher::setupBeforeSave()
if (data && data->size()) if (data && data->size())
{ {
cacheEntry->m_timeStepHasData.v().push_back(1);
stream << (quint64)(data->size());
for (size_t cIdx = 0; cIdx < data->size(); ++cIdx) for (size_t cIdx = 0; cIdx < data->size(); ++cIdx)
{ {
stream << (*data)[cIdx]; stream << (*data)[cIdx];
@ -106,7 +115,7 @@ void RimReservoirCellResultsCacher::setupBeforeSave()
} }
else else
{ {
cacheEntry->m_timeStepHasData.v().push_back(0); stream << (quint64)0;
} }
} }
} }

View File

@ -37,36 +37,37 @@ public:
virtual ~RimReservoirCellResultsCacher(); virtual ~RimReservoirCellResultsCacher();
// Fields // Fields
caf::PdmField<QString> m_resultCacheFileName; caf::PdmField<QString> m_resultCacheFileName;
caf::PdmPointersField<RimReservoirCellResultsCacheEntryInfo*> caf::PdmPointersField<RimReservoirCellResultsCacheEntryInfo*>
m_resultCacheMetaData; m_resultCacheMetaData;
RigReservoirCellResults* cellResults() { return m_cellResults; } RigReservoirCellResults* cellResults() { return m_cellResults; }
const RigReservoirCellResults* cellResults() const { return m_cellResults; } const RigReservoirCellResults* cellResults() const { return m_cellResults; }
void setCellResults(RigReservoirCellResults* cellResults); void setCellResults(RigReservoirCellResults* cellResults);
void setMainGrid(RigMainGrid* mainGrid); void setMainGrid(RigMainGrid* mainGrid);
void setReaderInterface(RifReaderInterface* readerInterface); void setReaderInterface(RifReaderInterface* readerInterface);
RifReaderInterface* readerInterface(); RifReaderInterface* readerInterface();
void loadOrComputeSOIL(); void loadOrComputeSOIL();
void loadOrComputeSOILForTimeStep(size_t timeStepIndex); void loadOrComputeSOILForTimeStep(size_t timeStepIndex);
void computeDepthRelatedResults(); void computeDepthRelatedResults();
size_t findOrLoadScalarResultForTimeStep(RimDefines::ResultCatType type, const QString& resultName, size_t timeStepIndex); size_t findOrLoadScalarResultForTimeStep(RimDefines::ResultCatType type, const QString& resultName, size_t timeStepIndex);
size_t findOrLoadScalarResult(RimDefines::ResultCatType type, const QString& resultName); size_t findOrLoadScalarResult(RimDefines::ResultCatType type, const QString& resultName);
size_t findOrLoadScalarResult(const QString& resultName); ///< Simplified search. Assumes unique names across types. size_t findOrLoadScalarResult(const QString& resultName); ///< Simplified search. Assumes unique names across types.
// Overridden methods from PdmObject // Overridden methods from PdmObject
virtual void setupBeforeSave(); virtual void setupBeforeSave();
private: private:
QString getValidCacheFileName(); QString getValidCacheFileName();
QString getCacheDirectoryPath(); QString getCacheDirectoryPath();
cvf::ref<RifReaderInterface> m_readerInterface;
RigReservoirCellResults* m_cellResults; cvf::ref<RifReaderInterface> m_readerInterface;
RigMainGrid* m_ownerMainGrid; RigReservoirCellResults* m_cellResults;
RigMainGrid* m_ownerMainGrid;
}; };
class RimReservoirCellResultsCacheEntryInfo : public caf::PdmObject class RimReservoirCellResultsCacheEntryInfo : public caf::PdmObject

View File

@ -51,7 +51,6 @@ namespace cvf
class ModelBasicList; class ModelBasicList;
} }
enum ViewState enum ViewState
{ {
GEOMETRY_ONLY, GEOMETRY_ONLY,