mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Results Storage: Refined the output format. Think it is ok now
p4#: 20956
This commit is contained in:
parent
f0fa445f7a
commit
516c642cc4
@ -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()
|
||||
@ -71,13 +75,15 @@ void RimReservoirCellResultsCacher::setupBeforeSave()
|
||||
QDataStream stream(&cacheFile);
|
||||
stream.setVersion(QDataStream::Qt_4_0);
|
||||
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)
|
||||
{
|
||||
size_t timestepCount = m_cellResults->cellScalarResults(resInfo[rIdx].m_gridScalarResultIndex).size();
|
||||
|
||||
if (timestepCount)
|
||||
{
|
||||
// Create and setup the cache information for this result
|
||||
RimReservoirCellResultsCacheEntryInfo* cacheEntry = new RimReservoirCellResultsCacheEntryInfo;
|
||||
m_resultCacheMetaData.push_back(cacheEntry);
|
||||
|
||||
@ -85,8 +91,11 @@ void RimReservoirCellResultsCacher::setupBeforeSave()
|
||||
cacheEntry->m_resultName = resInfo[rIdx].m_resultName;
|
||||
cacheEntry->m_timeStepDates = resInfo[rIdx].m_timeStepDates;
|
||||
|
||||
// Take note of the file position for fast lookup later
|
||||
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)
|
||||
{
|
||||
const std::vector<double>* data = NULL;
|
||||
@ -97,8 +106,8 @@ void RimReservoirCellResultsCacher::setupBeforeSave()
|
||||
|
||||
if (data && data->size())
|
||||
{
|
||||
cacheEntry->m_timeStepHasData.v().push_back(1);
|
||||
|
||||
stream << (quint64)(data->size());
|
||||
for (size_t cIdx = 0; cIdx < data->size(); ++cIdx)
|
||||
{
|
||||
stream << (*data)[cIdx];
|
||||
@ -106,7 +115,7 @@ void RimReservoirCellResultsCacher::setupBeforeSave()
|
||||
}
|
||||
else
|
||||
{
|
||||
cacheEntry->m_timeStepHasData.v().push_back(0);
|
||||
stream << (quint64)0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -37,36 +37,37 @@ public:
|
||||
virtual ~RimReservoirCellResultsCacher();
|
||||
|
||||
// Fields
|
||||
caf::PdmField<QString> m_resultCacheFileName;
|
||||
caf::PdmField<QString> m_resultCacheFileName;
|
||||
caf::PdmPointersField<RimReservoirCellResultsCacheEntryInfo*>
|
||||
m_resultCacheMetaData;
|
||||
m_resultCacheMetaData;
|
||||
|
||||
RigReservoirCellResults* cellResults() { return m_cellResults; }
|
||||
const RigReservoirCellResults* cellResults() const { return m_cellResults; }
|
||||
RigReservoirCellResults* cellResults() { return m_cellResults; }
|
||||
const RigReservoirCellResults* cellResults() const { return m_cellResults; }
|
||||
|
||||
void setCellResults(RigReservoirCellResults* cellResults);
|
||||
void setMainGrid(RigMainGrid* mainGrid);
|
||||
void setCellResults(RigReservoirCellResults* cellResults);
|
||||
void setMainGrid(RigMainGrid* mainGrid);
|
||||
|
||||
void setReaderInterface(RifReaderInterface* readerInterface);
|
||||
RifReaderInterface* readerInterface();
|
||||
void setReaderInterface(RifReaderInterface* readerInterface);
|
||||
RifReaderInterface* readerInterface();
|
||||
|
||||
void loadOrComputeSOIL();
|
||||
void loadOrComputeSOILForTimeStep(size_t timeStepIndex);
|
||||
void computeDepthRelatedResults();
|
||||
void loadOrComputeSOIL();
|
||||
void loadOrComputeSOILForTimeStep(size_t timeStepIndex);
|
||||
void computeDepthRelatedResults();
|
||||
|
||||
size_t findOrLoadScalarResultForTimeStep(RimDefines::ResultCatType type, const QString& resultName, size_t timeStepIndex);
|
||||
size_t findOrLoadScalarResult(RimDefines::ResultCatType type, const QString& resultName);
|
||||
size_t findOrLoadScalarResult(const QString& resultName); ///< Simplified search. Assumes unique names across types.
|
||||
size_t findOrLoadScalarResultForTimeStep(RimDefines::ResultCatType type, const QString& resultName, size_t timeStepIndex);
|
||||
size_t findOrLoadScalarResult(RimDefines::ResultCatType type, const QString& resultName);
|
||||
size_t findOrLoadScalarResult(const QString& resultName); ///< Simplified search. Assumes unique names across types.
|
||||
|
||||
// Overridden methods from PdmObject
|
||||
virtual void setupBeforeSave();
|
||||
virtual void setupBeforeSave();
|
||||
|
||||
private:
|
||||
QString getValidCacheFileName();
|
||||
QString getCacheDirectoryPath();
|
||||
cvf::ref<RifReaderInterface> m_readerInterface;
|
||||
RigReservoirCellResults* m_cellResults;
|
||||
RigMainGrid* m_ownerMainGrid;
|
||||
QString getValidCacheFileName();
|
||||
QString getCacheDirectoryPath();
|
||||
|
||||
cvf::ref<RifReaderInterface> m_readerInterface;
|
||||
RigReservoirCellResults* m_cellResults;
|
||||
RigMainGrid* m_ownerMainGrid;
|
||||
};
|
||||
|
||||
class RimReservoirCellResultsCacheEntryInfo : public caf::PdmObject
|
||||
|
@ -51,7 +51,6 @@ namespace cvf
|
||||
class ModelBasicList;
|
||||
}
|
||||
|
||||
|
||||
enum ViewState
|
||||
{
|
||||
GEOMETRY_ONLY,
|
||||
|
Loading…
Reference in New Issue
Block a user