mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Results Storage: A huge refactorisation to make way for storing generated properties to an internal file.
This does not yet compile due to a unfortunate mix of perforce, cmake setup and unit_test project shortcomings. Need to move RigStatistics into ProjectDataModel and rename it before this is running again. p4#: 20945
This commit is contained in:
@@ -117,9 +117,9 @@ void Rim3dOverlayInfoConfig::update3DInfo()
|
||||
double p10, p90;
|
||||
double mean;
|
||||
size_t scalarIndex = m_reservoirView->cellResult()->gridScalarIndex();
|
||||
m_reservoirView->currentGridCellResults()->minMaxCellScalarValues(scalarIndex, min, max);
|
||||
m_reservoirView->currentGridCellResults()->p10p90CellScalarValues(scalarIndex, p10, p90);
|
||||
m_reservoirView->currentGridCellResults()->meanCellScalarValues(scalarIndex, mean);
|
||||
m_reservoirView->currentGridCellResults()->cellResults()->minMaxCellScalarValues(scalarIndex, min, max);
|
||||
m_reservoirView->currentGridCellResults()->cellResults()->p10p90CellScalarValues(scalarIndex, p10, p90);
|
||||
m_reservoirView->currentGridCellResults()->cellResults()->meanCellScalarValues(scalarIndex, mean);
|
||||
|
||||
//infoText += QString("<blockquote><b>Min:</b> %1 <b>P10:</b> %2 <b>Mean:</b> %3 <b>P90:</b> %4 <b>Max:</b> %5 </blockquote>").arg(min).arg(p10).arg(mean).arg(p90).arg(max);
|
||||
//infoText += QString("<blockquote><pre>Min: %1 P10: %2 Mean: %3 \n P90: %4 Max: %5 </pre></blockquote>").arg(min).arg(p10).arg(mean).arg(p90).arg(max);
|
||||
@@ -141,7 +141,7 @@ void Rim3dOverlayInfoConfig::update3DInfo()
|
||||
|| m_reservoirView->wellCollection()->hasVisibleWellPipes())
|
||||
{
|
||||
int currentTimeStep = m_reservoirView->currentTimeStep();
|
||||
QDateTime date = m_reservoirView->currentGridCellResults()->timeStepDate(0, currentTimeStep);
|
||||
QDateTime date = m_reservoirView->currentGridCellResults()->cellResults()->timeStepDate(0, currentTimeStep);
|
||||
infoText += QString("<b>Time Step:</b> %1 <b>Time:</b> %2").arg(currentTimeStep).arg(date.toString("dd.MMM yyyy"));
|
||||
}
|
||||
|
||||
@@ -157,12 +157,12 @@ void Rim3dOverlayInfoConfig::update3DInfo()
|
||||
double mean;
|
||||
|
||||
size_t scalarIndex = m_reservoirView->cellResult()->gridScalarIndex();
|
||||
m_reservoirView->currentGridCellResults()->minMaxCellScalarValues(scalarIndex, min, max);
|
||||
m_reservoirView->currentGridCellResults()->p10p90CellScalarValues(scalarIndex, p10, p90);
|
||||
m_reservoirView->currentGridCellResults()->meanCellScalarValues(scalarIndex, mean);
|
||||
m_reservoirView->currentGridCellResults()->cellResults()->minMaxCellScalarValues(scalarIndex, min, max);
|
||||
m_reservoirView->currentGridCellResults()->cellResults()->p10p90CellScalarValues(scalarIndex, p10, p90);
|
||||
m_reservoirView->currentGridCellResults()->cellResults()->meanCellScalarValues(scalarIndex, mean);
|
||||
|
||||
m_reservoirView->viewer()->showHistogram(true);
|
||||
m_reservoirView->viewer()->setHistogram(min, max, m_reservoirView->currentGridCellResults()->cellScalarValuesHistogram(scalarIndex));
|
||||
m_reservoirView->viewer()->setHistogram(min, max, m_reservoirView->currentGridCellResults()->cellResults()->cellScalarValuesHistogram(scalarIndex));
|
||||
m_reservoirView->viewer()->setHistogramPercentiles(p10, p90, mean);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
#include "RimStatisticalCalculation.h"
|
||||
|
||||
|
||||
|
||||
//==================================================================================================
|
||||
//
|
||||
//
|
||||
|
||||
@@ -133,7 +133,7 @@ QList<caf::PdmOptionItemInfo> RimCellEdgeResultSlot::calculateValueOptions(const
|
||||
if (m_reservoirView && m_reservoirView->currentGridCellResults())
|
||||
{
|
||||
QStringList varList;
|
||||
varList = m_reservoirView->currentGridCellResults()->resultNames(RimDefines::STATIC_NATIVE);
|
||||
varList = m_reservoirView->currentGridCellResults()->cellResults()->resultNames(RimDefines::STATIC_NATIVE);
|
||||
|
||||
//TODO: Must also handle input properties
|
||||
//varList += m_reservoirView->gridCellResults()->resultNames(RimDefines::INPUT_PROPERTY);
|
||||
@@ -208,7 +208,7 @@ QStringList RimCellEdgeResultSlot::findResultVariableNames()
|
||||
if (m_reservoirView && m_reservoirView->currentGridCellResults() && !resultVariable().isEmpty())
|
||||
{
|
||||
QStringList varList;
|
||||
varList = m_reservoirView->currentGridCellResults()->resultNames(RimDefines::STATIC_NATIVE);
|
||||
varList = m_reservoirView->currentGridCellResults()->cellResults()->resultNames(RimDefines::STATIC_NATIVE);
|
||||
//TODO: Must handle Input properties
|
||||
|
||||
int i;
|
||||
@@ -313,7 +313,7 @@ void RimCellEdgeResultSlot::minMaxCellEdgeValues(double& min, double& max)
|
||||
|
||||
{
|
||||
double cMin, cMax;
|
||||
m_reservoirView->currentGridCellResults()->minMaxCellScalarValues(resultIndices[idx], cMin, cMax);
|
||||
m_reservoirView->currentGridCellResults()->cellResults()->minMaxCellScalarValues(resultIndices[idx], cMin, cMax);
|
||||
|
||||
globalMin = CVF_MIN(globalMin, cMin);
|
||||
globalMax = CVF_MAX(globalMax, cMax);
|
||||
|
||||
@@ -143,10 +143,10 @@ void RimCellPropertyFilter::setDefaultValues()
|
||||
size_t scalarIndex = resultDefinition->gridScalarIndex();
|
||||
if (scalarIndex != cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
RigReservoirCellResults* results = m_parentContainer->reservoirView()->currentGridCellResults();
|
||||
RimReservoirCellResultsCacher* results = m_parentContainer->reservoirView()->currentGridCellResults();
|
||||
if (results)
|
||||
{
|
||||
results->minMaxCellScalarValues(scalarIndex, min, max);
|
||||
results->cellResults()->minMaxCellScalarValues(scalarIndex, min, max);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -72,18 +72,18 @@ void RimInputReservoir::openDataFileSet(const QStringList& filenames)
|
||||
if (caseName().contains("Input Mock Debug Model"))
|
||||
{
|
||||
cvf::ref<RifReaderInterface> readerInterface = this->createMockModel(this->caseName());
|
||||
m_rigEclipseCase->results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
m_rigEclipseCase->results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
|
||||
m_rigEclipseCase->activeCellInfo(RifReaderInterface::MATRIX_RESULTS)->computeDerivedData();
|
||||
m_rigEclipseCase->activeCellInfo(RifReaderInterface::FRACTURE_RESULTS)->computeDerivedData();
|
||||
reservoirData()->activeCellInfo(RifReaderInterface::MATRIX_RESULTS)->computeDerivedData();
|
||||
reservoirData()->activeCellInfo(RifReaderInterface::FRACTURE_RESULTS)->computeDerivedData();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_rigEclipseCase.isNull())
|
||||
if (this->reservoirData() == NULL)
|
||||
{
|
||||
m_rigEclipseCase = new RigEclipseCase;
|
||||
this->setReservoirData(new RigEclipseCase);
|
||||
}
|
||||
|
||||
// First find and read the grid data
|
||||
@@ -157,7 +157,7 @@ void RimInputReservoir::openDataFileSet(const QStringList& filenames)
|
||||
bool RimInputReservoir::openEclipseGridFile()
|
||||
{
|
||||
// Early exit if reservoir data is created
|
||||
if (m_rigEclipseCase.isNull())
|
||||
if (this->reservoirData() == NULL)
|
||||
{
|
||||
cvf::ref<RifReaderInterface> readerInterface;
|
||||
|
||||
@@ -174,14 +174,14 @@ bool RimInputReservoir::openEclipseGridFile()
|
||||
return false;
|
||||
}
|
||||
|
||||
m_rigEclipseCase = eclipseCase;
|
||||
this->setReservoirData( eclipseCase.p() );
|
||||
}
|
||||
|
||||
CVF_ASSERT(m_rigEclipseCase.notNull());
|
||||
CVF_ASSERT(this->reservoirData());
|
||||
CVF_ASSERT(readerInterface.notNull());
|
||||
|
||||
m_rigEclipseCase->results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
m_rigEclipseCase->results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
|
||||
computeCachedData();
|
||||
loadAndSyncronizeInputProperties();
|
||||
@@ -191,8 +191,8 @@ bool RimInputReservoir::openEclipseGridFile()
|
||||
RIApplication* app = RIApplication::instance();
|
||||
if (app->preferences()->autocomputeDepthRelatedProperties)
|
||||
{
|
||||
RigReservoirCellResults* matrixResults = m_rigEclipseCase->results(RifReaderInterface::MATRIX_RESULTS);
|
||||
RigReservoirCellResults* fractureResults = m_rigEclipseCase->results(RifReaderInterface::FRACTURE_RESULTS);
|
||||
RimReservoirCellResultsCacher* matrixResults = results(RifReaderInterface::MATRIX_RESULTS);
|
||||
RimReservoirCellResultsCacher* fractureResults = results(RifReaderInterface::FRACTURE_RESULTS);
|
||||
|
||||
matrixResults->computeDepthRelatedResults();
|
||||
fractureResults->computeDepthRelatedResults();
|
||||
@@ -210,7 +210,7 @@ void RimInputReservoir::loadAndSyncronizeInputProperties()
|
||||
{
|
||||
// Make sure we actually have reservoir data
|
||||
|
||||
CVF_ASSERT(m_rigEclipseCase.notNull());
|
||||
CVF_ASSERT(this->reservoirData());
|
||||
CVF_ASSERT(this->reservoirData()->mainGrid()->gridPointDimensions() != cvf::Vec3st(0,0,0));
|
||||
|
||||
// Then read the properties from all the files referenced by the InputReservoir
|
||||
@@ -359,7 +359,7 @@ void RimInputReservoir::removeProperty(RimInputProperty* inputProperty)
|
||||
}
|
||||
|
||||
// Remove the results pointed to by this input property
|
||||
RigReservoirCellResults* results = m_rigEclipseCase->results(RifReaderInterface::MATRIX_RESULTS);
|
||||
RigReservoirCellResults* results = reservoirData()->results(RifReaderInterface::MATRIX_RESULTS);
|
||||
results->removeResult(inputProperty->resultName);
|
||||
|
||||
this->removeResult(inputProperty->resultName);
|
||||
@@ -404,7 +404,7 @@ cvf::ref<RifReaderInterface> RimInputReservoir::createMockModel(QString modelNam
|
||||
m_inputPropertyCollection->inputProperties.push_back(inputProperty);
|
||||
}
|
||||
|
||||
m_rigEclipseCase = reservoir;
|
||||
this->setReservoirData( reservoir.p() );
|
||||
|
||||
return mockFileInterface.p();
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
#include <QString>
|
||||
#include "RimProject.h"
|
||||
#include "RimReservoirCellResultsCacher.h"
|
||||
|
||||
CAF_PDM_SOURCE_INIT(RimReservoir, "RimReservoir");
|
||||
|
||||
@@ -42,15 +43,33 @@ CAF_PDM_SOURCE_INIT(RimReservoir, "RimReservoir");
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimReservoir::RimReservoir()
|
||||
{
|
||||
m_rigEclipseCase = NULL;
|
||||
|
||||
CAF_PDM_InitField(&caseName, "CaseName", QString(), "Case name", "", "" ,"");
|
||||
// CAF_PDM_InitField(&releaseResultMemory, "ReleaseResultMemory", true, "Release result memory", "", "" ,"");
|
||||
// releaseResultMemory.setIOReadable(false);
|
||||
// releaseResultMemory.setIOWritable(false);
|
||||
// releaseResultMemory.setUiEditorTypeName(caf::PdmUiPushButtonEditor::uiEditorTypeName());
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&reservoirViews, "ReservoirViews", "", "", "", "");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_matrixModelResults, "MatrixModelResults", "", "", "", "");
|
||||
CAF_PDM_InitFieldNoDefault(&m_fractureModelResults, "FractureModelResults", "", "", "", "");
|
||||
|
||||
m_matrixModelResults = new RimReservoirCellResultsCacher;
|
||||
m_fractureModelResults = new RimReservoirCellResultsCacher;
|
||||
|
||||
this->setReservoirData( NULL );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimReservoir::~RimReservoir()
|
||||
{
|
||||
reservoirViews.deleteAllChildObjects();
|
||||
|
||||
delete m_matrixModelResults();
|
||||
delete m_fractureModelResults();
|
||||
|
||||
if (this->reservoirData())
|
||||
{
|
||||
// At this point, we assume that memory should be released
|
||||
CVF_ASSERT(this->reservoirData()->refCount() == 1);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -84,20 +103,6 @@ void RimReservoir::initAfterRead()
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimReservoir::~RimReservoir()
|
||||
{
|
||||
reservoirViews.deleteAllChildObjects();
|
||||
|
||||
if (m_rigEclipseCase.notNull())
|
||||
{
|
||||
// At this point, we assume that memory should be released
|
||||
CVF_ASSERT(m_rigEclipseCase->refCount() == 1);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -106,12 +111,12 @@ RimReservoirView* RimReservoir::createAndAddReservoirView()
|
||||
// If parent is collection, and number of views is zero, make sure rig is set to NULL to initiate normal case loading
|
||||
if (parentCaseCollection() != NULL && reservoirViews().size() == 0)
|
||||
{
|
||||
if (m_rigEclipseCase.notNull())
|
||||
if (this->reservoirData())
|
||||
{
|
||||
CVF_ASSERT(m_rigEclipseCase->refCount() == 1);
|
||||
CVF_ASSERT(this->reservoirData()->refCount() == 1);
|
||||
}
|
||||
|
||||
m_rigEclipseCase = NULL;
|
||||
this->setReservoirData( NULL );
|
||||
}
|
||||
|
||||
RimReservoirView* riv = new RimReservoirView();
|
||||
@@ -207,7 +212,7 @@ void RimReservoir::fieldChangedByUi(const caf::PdmFieldHandle* changedField, con
|
||||
{
|
||||
if (changedField == &releaseResultMemory)
|
||||
{
|
||||
if (m_rigEclipseCase.notNull())
|
||||
if (this->reservoirData())
|
||||
{
|
||||
for (size_t i = 0; i < reservoirViews().size(); i++)
|
||||
{
|
||||
@@ -229,13 +234,13 @@ void RimReservoir::fieldChangedByUi(const caf::PdmFieldHandle* changedField, con
|
||||
reservoirView->createDisplayModelAndRedraw();
|
||||
}
|
||||
|
||||
RigReservoirCellResults* matrixModelResults = m_rigEclipseCase->results(RifReaderInterface::MATRIX_RESULTS);
|
||||
RigReservoirCellResults* matrixModelResults = reservoirData()->results(RifReaderInterface::MATRIX_RESULTS);
|
||||
if (matrixModelResults)
|
||||
{
|
||||
matrixModelResults->clearAllResults();
|
||||
}
|
||||
|
||||
RigReservoirCellResults* fractureModelResults = m_rigEclipseCase->results(RifReaderInterface::FRACTURE_RESULTS);
|
||||
RigReservoirCellResults* fractureModelResults = reservoirData()->results(RifReaderInterface::FRACTURE_RESULTS);
|
||||
if (fractureModelResults)
|
||||
{
|
||||
fractureModelResults->clearAllResults();
|
||||
@@ -286,3 +291,38 @@ RimCaseCollection* RimReservoir::parentCaseCollection()
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimReservoir::setReservoirData(RigEclipseCase* eclipseCase)
|
||||
{
|
||||
m_rigEclipseCase = eclipseCase;
|
||||
if (this->reservoirData())
|
||||
{
|
||||
m_fractureModelResults()->setCellResults(reservoirData()->results(RifReaderInterface::FRACTURE_RESULTS));
|
||||
m_matrixModelResults()->setCellResults(reservoirData()->results(RifReaderInterface::MATRIX_RESULTS));
|
||||
m_fractureModelResults()->setMainGrid(this->reservoirData()->mainGrid());
|
||||
m_matrixModelResults()->setMainGrid(this->reservoirData()->mainGrid());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fractureModelResults()->setCellResults(NULL);
|
||||
m_matrixModelResults()->setCellResults(NULL);
|
||||
m_fractureModelResults()->setMainGrid(NULL);
|
||||
m_matrixModelResults()->setMainGrid(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimReservoirCellResultsCacher* RimReservoir::results(RifReaderInterface::PorosityModelResultType porosityModel)
|
||||
{
|
||||
if (porosityModel == RifReaderInterface::MATRIX_RESULTS)
|
||||
{
|
||||
return m_matrixModelResults();
|
||||
}
|
||||
|
||||
return m_fractureModelResults();
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
#include "cvfObject.h"
|
||||
#include "cafPdmField.h"
|
||||
#include "cafPdmObject.h"
|
||||
|
||||
#include "RimReservoirCellResultsCacher.h"
|
||||
#include "RifReaderInterface.h"
|
||||
|
||||
class QString;
|
||||
|
||||
@@ -30,12 +31,11 @@ class RigEclipseCase;
|
||||
class RigGridBase;
|
||||
class RimReservoirView;
|
||||
class RimCaseCollection;
|
||||
//class RimReservoirCellResultsCacher;
|
||||
|
||||
//==================================================================================================
|
||||
//
|
||||
// Interface for reservoirs.
|
||||
// As this is a pure virtual class, the factory macros are not relevant (nor possible) to use
|
||||
// CAF_PDM_HEADER_INIT and CAF_PDM_SOURCE_INIT
|
||||
//
|
||||
//==================================================================================================
|
||||
class RimReservoir : public caf::PdmObject
|
||||
@@ -45,38 +45,45 @@ public:
|
||||
RimReservoir();
|
||||
virtual ~RimReservoir();
|
||||
|
||||
virtual bool openEclipseGridFile() { return false;}; // Should be pure virtual but PDM does not allow that.
|
||||
|
||||
RigEclipseCase* reservoirData();
|
||||
const RigEclipseCase* reservoirData() const;
|
||||
|
||||
RimReservoirView* createAndAddReservoirView();
|
||||
void removeReservoirView(RimReservoirView* reservoirView);
|
||||
// Fields:
|
||||
caf::PdmField<QString> caseName;
|
||||
caf::PdmField<bool> releaseResultMemory;
|
||||
caf::PdmPointersField<RimReservoirView*> reservoirViews;
|
||||
|
||||
void removeResult(const QString& resultName);
|
||||
|
||||
// Fields:
|
||||
caf::PdmField<QString> caseName;
|
||||
caf::PdmField<bool> releaseResultMemory;
|
||||
virtual bool openEclipseGridFile() { return false;}; // Should be pure virtual but PDM does not allow that.
|
||||
|
||||
RigEclipseCase* reservoirData();
|
||||
const RigEclipseCase* reservoirData() const;
|
||||
|
||||
caf::PdmPointersField<RimReservoirView*> reservoirViews;
|
||||
RimReservoirCellResultsCacher* results(RifReaderInterface::PorosityModelResultType porosityModel);
|
||||
|
||||
RimReservoirView* createAndAddReservoirView();
|
||||
void removeReservoirView(RimReservoirView* reservoirView);
|
||||
|
||||
virtual caf::PdmFieldHandle* userDescriptionField() { return &caseName; }
|
||||
|
||||
virtual QString locationOnDisc() const { return QString(); }
|
||||
void removeResult(const QString& resultName);
|
||||
|
||||
virtual QString locationOnDisc() const { return QString(); }
|
||||
|
||||
// Overridden methods from PdmObject
|
||||
public:
|
||||
virtual caf::PdmFieldHandle* userDescriptionField() { return &caseName; }
|
||||
protected:
|
||||
// Overridden methods
|
||||
virtual void initAfterRead();
|
||||
virtual void initAfterRead();
|
||||
virtual void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue );
|
||||
|
||||
virtual void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue );
|
||||
|
||||
void computeCachedData();
|
||||
// Internal methods
|
||||
protected:
|
||||
void computeCachedData();
|
||||
void setReservoirData(RigEclipseCase* eclipseCase);
|
||||
|
||||
private:
|
||||
RimCaseCollection* parentCaseCollection();
|
||||
RimCaseCollection* parentCaseCollection();
|
||||
|
||||
protected:
|
||||
cvf::ref<RigEclipseCase> m_rigEclipseCase;
|
||||
private:
|
||||
cvf::ref<RigEclipseCase> m_rigEclipseCase;
|
||||
|
||||
private:
|
||||
caf::PdmField<RimReservoirCellResultsCacher*> m_matrixModelResults;
|
||||
caf::PdmField<RimReservoirCellResultsCacher*> m_fractureModelResults;
|
||||
|
||||
};
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
#include "RimReservoirCellResultsCacher.h"
|
||||
#include "RigReservoirCellResults.h"
|
||||
#include "RIApplication.h"
|
||||
#include "RigMainGrid.h"
|
||||
#include "RigCell.h"
|
||||
|
||||
CAF_PDM_SOURCE_INIT(RimReservoirCellResultsCacher, "ReservoirCellResultCacher");
|
||||
|
||||
@@ -27,7 +29,8 @@ CAF_PDM_SOURCE_INIT(RimReservoirCellResultsCacher, "ReservoirCellResultCacher");
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimReservoirCellResultsCacher::RimReservoirCellResultsCacher()
|
||||
: m_cellResults(NULL)
|
||||
: m_cellResults(NULL),
|
||||
m_ownerMainGrid(NULL)
|
||||
{
|
||||
CAF_PDM_InitObject("Cacher", "", "", "");
|
||||
|
||||
@@ -72,30 +75,39 @@ void RimReservoirCellResultsCacher::setupBeforeSave()
|
||||
|
||||
for (int rIdx = 0; rIdx < resInfo.size(); ++rIdx)
|
||||
{
|
||||
RimReservoirCellResultsCacheEntryInfo* cacheEntry = new RimReservoirCellResultsCacheEntryInfo;
|
||||
m_resultCacheMetaData.push_back(cacheEntry);
|
||||
|
||||
cacheEntry->m_resultType = resInfo[rIdx].m_resultType;
|
||||
cacheEntry->m_resultName = resInfo[rIdx].m_resultName;
|
||||
cacheEntry->m_timeStepDates = resInfo[rIdx].m_timeStepDates;
|
||||
|
||||
cacheEntry->m_filePosition = cacheFile.pos();
|
||||
|
||||
for (int tsIdx = 0; tsIdx < resInfo[rIdx].m_timeStepDates.size() ; ++tsIdx)
|
||||
size_t timestepCount = m_cellResults->cellScalarResults(resInfo[rIdx].m_gridScalarResultIndex).size();
|
||||
if (timestepCount)
|
||||
{
|
||||
std::vector<double>& data = m_cellResults->cellScalarResults(resInfo[rIdx].m_gridScalarResultIndex, tsIdx);
|
||||
if (data.size())
|
||||
{
|
||||
cacheEntry->m_timeStepHasData.v().push_back(1);
|
||||
RimReservoirCellResultsCacheEntryInfo* cacheEntry = new RimReservoirCellResultsCacheEntryInfo;
|
||||
m_resultCacheMetaData.push_back(cacheEntry);
|
||||
|
||||
for (size_t cIdx = 0; cIdx < data.size(); ++cIdx)
|
||||
{
|
||||
stream << data[cIdx];
|
||||
}
|
||||
}
|
||||
else
|
||||
cacheEntry->m_resultType = resInfo[rIdx].m_resultType;
|
||||
cacheEntry->m_resultName = resInfo[rIdx].m_resultName;
|
||||
cacheEntry->m_timeStepDates = resInfo[rIdx].m_timeStepDates;
|
||||
|
||||
cacheEntry->m_filePosition = cacheFile.pos();
|
||||
|
||||
for (int tsIdx = 0; tsIdx < resInfo[rIdx].m_timeStepDates.size() ; ++tsIdx)
|
||||
{
|
||||
cacheEntry->m_timeStepHasData.v().push_back(0);
|
||||
const std::vector<double>* data = NULL;
|
||||
if (tsIdx < timestepCount)
|
||||
{
|
||||
data = &(m_cellResults->cellScalarResults(resInfo[rIdx].m_gridScalarResultIndex, tsIdx));
|
||||
}
|
||||
|
||||
if (data && data->size())
|
||||
{
|
||||
cacheEntry->m_timeStepHasData.v().push_back(1);
|
||||
|
||||
for (size_t cIdx = 0; cIdx < data->size(); ++cIdx)
|
||||
{
|
||||
stream << (*data)[cIdx];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cacheEntry->m_timeStepHasData.v().push_back(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -138,6 +150,390 @@ QString RimReservoirCellResultsCacher::getCacheDirectoryPath()
|
||||
return cacheDirPath;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimReservoirCellResultsCacher::setReaderInterface(RifReaderInterface* readerInterface)
|
||||
{
|
||||
m_readerInterface = readerInterface;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RifReaderInterface* RimReservoirCellResultsCacher::readerInterface()
|
||||
{
|
||||
return m_readerInterface.p();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
size_t RimReservoirCellResultsCacher::findOrLoadScalarResultForTimeStep(RimDefines::ResultCatType type, const QString& resultName, size_t timeStepIndex)
|
||||
{
|
||||
// Special handling for SOIL
|
||||
if (type == RimDefines::DYNAMIC_NATIVE && resultName.toUpper() == "SOIL")
|
||||
{
|
||||
loadOrComputeSOILForTimeStep(timeStepIndex);
|
||||
}
|
||||
|
||||
size_t scalarResultIndex = cvf::UNDEFINED_SIZE_T;
|
||||
|
||||
scalarResultIndex = m_cellResults->findScalarResultIndex(type, resultName);
|
||||
|
||||
if (scalarResultIndex == cvf::UNDEFINED_SIZE_T) return cvf::UNDEFINED_SIZE_T;
|
||||
|
||||
if (type == RimDefines::GENERATED)
|
||||
{
|
||||
return cvf::UNDEFINED_SIZE_T;
|
||||
}
|
||||
|
||||
if (m_readerInterface.notNull())
|
||||
{
|
||||
size_t timeStepCount = m_cellResults->infoForEachResultIndex()[scalarResultIndex].m_timeStepDates.size();
|
||||
|
||||
bool resultLoadingSucess = true;
|
||||
|
||||
if (type == RimDefines::DYNAMIC_NATIVE && timeStepCount > 0)
|
||||
{
|
||||
m_cellResults->cellScalarResults(scalarResultIndex).resize(timeStepCount);
|
||||
|
||||
std::vector<double>& values = m_cellResults->cellScalarResults(scalarResultIndex)[timeStepIndex];
|
||||
if (values.size() == 0)
|
||||
{
|
||||
if (!m_readerInterface->dynamicResult(resultName, RifReaderInterface::MATRIX_RESULTS, timeStepIndex, &values))
|
||||
{
|
||||
resultLoadingSucess = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (type == RimDefines::STATIC_NATIVE)
|
||||
{
|
||||
m_cellResults->cellScalarResults(scalarResultIndex).resize(1);
|
||||
|
||||
std::vector<double>& values = m_cellResults->cellScalarResults(scalarResultIndex)[0];
|
||||
if (!m_readerInterface->staticResult(resultName, RifReaderInterface::MATRIX_RESULTS, &values))
|
||||
{
|
||||
resultLoadingSucess = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!resultLoadingSucess)
|
||||
{
|
||||
// Error logging
|
||||
CVF_ASSERT(false);
|
||||
}
|
||||
}
|
||||
|
||||
return scalarResultIndex;
|
||||
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
size_t RimReservoirCellResultsCacher::findOrLoadScalarResult(RimDefines::ResultCatType type, const QString& resultName)
|
||||
{
|
||||
size_t resultGridIndex = cvf::UNDEFINED_SIZE_T;
|
||||
|
||||
resultGridIndex = m_cellResults->findScalarResultIndex(type, resultName);
|
||||
|
||||
if (resultGridIndex == cvf::UNDEFINED_SIZE_T) return cvf::UNDEFINED_SIZE_T;
|
||||
|
||||
if (m_cellResults->cellScalarResults(resultGridIndex).size()) return resultGridIndex;
|
||||
|
||||
if (type == RimDefines::GENERATED)
|
||||
{
|
||||
return cvf::UNDEFINED_SIZE_T;
|
||||
}
|
||||
|
||||
if (m_readerInterface.notNull())
|
||||
{
|
||||
// Add one more result to result container
|
||||
size_t timeStepCount = m_cellResults->infoForEachResultIndex()[resultGridIndex].m_timeStepDates.size();
|
||||
|
||||
bool resultLoadingSucess = true;
|
||||
|
||||
if (type == RimDefines::DYNAMIC_NATIVE && timeStepCount > 0)
|
||||
{
|
||||
m_cellResults->cellScalarResults(resultGridIndex).resize(timeStepCount);
|
||||
|
||||
size_t i;
|
||||
for (i = 0; i < timeStepCount; i++)
|
||||
{
|
||||
std::vector<double>& values = m_cellResults->cellScalarResults(resultGridIndex)[i];
|
||||
if (!m_readerInterface->dynamicResult(resultName, RifReaderInterface::MATRIX_RESULTS, i, &values))
|
||||
{
|
||||
resultLoadingSucess = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (type == RimDefines::STATIC_NATIVE)
|
||||
{
|
||||
m_cellResults->cellScalarResults(resultGridIndex).resize(1);
|
||||
|
||||
std::vector<double>& values = m_cellResults->cellScalarResults(resultGridIndex)[0];
|
||||
if (!m_readerInterface->staticResult(resultName, RifReaderInterface::MATRIX_RESULTS, &values))
|
||||
{
|
||||
resultLoadingSucess = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!resultLoadingSucess)
|
||||
{
|
||||
// Remove last scalar result because loading of result failed
|
||||
m_cellResults->cellScalarResults(resultGridIndex).clear();
|
||||
}
|
||||
}
|
||||
|
||||
return resultGridIndex;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimReservoirCellResultsCacher::loadOrComputeSOIL()
|
||||
{
|
||||
for (size_t timeStepIdx = 0; timeStepIdx < m_cellResults->maxTimeStepCount(); timeStepIdx++)
|
||||
{
|
||||
loadOrComputeSOILForTimeStep(timeStepIdx);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimReservoirCellResultsCacher::loadOrComputeSOILForTimeStep(size_t timeStepIndex)
|
||||
{
|
||||
size_t scalarIndexSWAT = findOrLoadScalarResultForTimeStep(RimDefines::DYNAMIC_NATIVE, "SWAT", timeStepIndex);
|
||||
size_t scalarIndexSGAS = findOrLoadScalarResultForTimeStep(RimDefines::DYNAMIC_NATIVE, "SGAS", timeStepIndex);
|
||||
|
||||
// Early exit if none of SWAT or SGAS is present
|
||||
if (scalarIndexSWAT == cvf::UNDEFINED_SIZE_T && scalarIndexSGAS == cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
size_t soilResultValueCount = 0;
|
||||
size_t soilTimeStepCount = 0;
|
||||
|
||||
std::vector<double>* swatForTimeStep = NULL;
|
||||
std::vector<double>* sgasForTimeStep = NULL;
|
||||
if (scalarIndexSWAT != cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
swatForTimeStep = &(m_cellResults->cellScalarResults(scalarIndexSWAT, timeStepIndex));
|
||||
if (swatForTimeStep->size() == 0)
|
||||
{
|
||||
swatForTimeStep = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
soilResultValueCount = swatForTimeStep->size();
|
||||
soilTimeStepCount = m_cellResults->infoForEachResultIndex()[scalarIndexSWAT].m_timeStepDates.size();
|
||||
}
|
||||
}
|
||||
|
||||
if (scalarIndexSGAS != cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
sgasForTimeStep = &(m_cellResults->cellScalarResults(scalarIndexSGAS, timeStepIndex));
|
||||
if (sgasForTimeStep->size() == 0)
|
||||
{
|
||||
sgasForTimeStep = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
soilResultValueCount = qMax(soilResultValueCount, sgasForTimeStep->size());
|
||||
|
||||
size_t sgasTimeStepCount = m_cellResults->infoForEachResultIndex()[scalarIndexSGAS].m_timeStepDates.size();
|
||||
soilTimeStepCount = qMax(soilTimeStepCount, sgasTimeStepCount);
|
||||
}
|
||||
}
|
||||
|
||||
size_t soilResultGridIndex = findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, "SOIL");
|
||||
if (soilResultGridIndex == cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
soilResultGridIndex = m_cellResults->addEmptyScalarResult(RimDefines::DYNAMIC_NATIVE, "SOIL");
|
||||
CVF_ASSERT(soilResultGridIndex != cvf::UNDEFINED_SIZE_T);
|
||||
|
||||
m_cellResults->cellScalarResults(soilResultGridIndex).resize(soilTimeStepCount);
|
||||
|
||||
for (size_t timeStepIdx = 0; timeStepIdx < soilTimeStepCount; timeStepIdx++)
|
||||
{
|
||||
m_cellResults->cellScalarResults(soilResultGridIndex, timeStepIdx).resize(soilResultValueCount);
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<double>& soilForTimeStep = m_cellResults->cellScalarResults(soilResultGridIndex, timeStepIndex);
|
||||
|
||||
#pragma omp parallel for
|
||||
for (int idx = 0; idx < static_cast<int>(soilResultValueCount); idx++)
|
||||
{
|
||||
double soilValue = 1.0;
|
||||
if (sgasForTimeStep)
|
||||
{
|
||||
soilValue -= sgasForTimeStep->at(idx);
|
||||
}
|
||||
|
||||
if (swatForTimeStep)
|
||||
{
|
||||
soilValue -= swatForTimeStep->at(idx);
|
||||
}
|
||||
|
||||
soilForTimeStep[idx] = soilValue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimReservoirCellResultsCacher::computeDepthRelatedResults()
|
||||
{
|
||||
size_t depthResultGridIndex = findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "DEPTH");
|
||||
size_t dxResultGridIndex = findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "DX");
|
||||
size_t dyResultGridIndex = findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "DY");
|
||||
size_t dzResultGridIndex = findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "DZ");
|
||||
size_t topsResultGridIndex = findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "TOPS");
|
||||
size_t bottomResultGridIndex = findOrLoadScalarResult(RimDefines::STATIC_NATIVE, "BOTTOM");
|
||||
|
||||
bool computeDepth = false;
|
||||
bool computeDx = false;
|
||||
bool computeDy = false;
|
||||
bool computeDz = false;
|
||||
bool computeTops = false;
|
||||
bool computeBottom = false;
|
||||
|
||||
size_t resultValueCount = m_ownerMainGrid->cells().size();
|
||||
|
||||
if (depthResultGridIndex == cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
depthResultGridIndex = m_cellResults->addStaticScalarResult(RimDefines::STATIC_NATIVE, "DEPTH", resultValueCount);
|
||||
computeDepth = true;
|
||||
}
|
||||
|
||||
if (dxResultGridIndex == cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
dxResultGridIndex = m_cellResults->addStaticScalarResult(RimDefines::STATIC_NATIVE, "DX", resultValueCount);
|
||||
computeDx = true;
|
||||
}
|
||||
|
||||
if (dyResultGridIndex == cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
dyResultGridIndex = m_cellResults->addStaticScalarResult(RimDefines::STATIC_NATIVE, "DY", resultValueCount);
|
||||
computeDy = true;
|
||||
}
|
||||
|
||||
if (dzResultGridIndex == cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
dzResultGridIndex = m_cellResults->addStaticScalarResult(RimDefines::STATIC_NATIVE, "DZ", resultValueCount);
|
||||
computeDz = true;
|
||||
}
|
||||
|
||||
if (topsResultGridIndex == cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
topsResultGridIndex = m_cellResults->addStaticScalarResult(RimDefines::STATIC_NATIVE, "TOPS", resultValueCount);
|
||||
computeTops = true;
|
||||
}
|
||||
|
||||
if (bottomResultGridIndex == cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
bottomResultGridIndex = m_cellResults->addStaticScalarResult(RimDefines::STATIC_NATIVE, "BOTTOM", resultValueCount);
|
||||
computeBottom = true;
|
||||
}
|
||||
|
||||
std::vector< std::vector<double> >& depth = m_cellResults->cellScalarResults(depthResultGridIndex);
|
||||
std::vector< std::vector<double> >& dx = m_cellResults->cellScalarResults(dxResultGridIndex);
|
||||
std::vector< std::vector<double> >& dy = m_cellResults->cellScalarResults(dyResultGridIndex);
|
||||
std::vector< std::vector<double> >& dz = m_cellResults->cellScalarResults(dzResultGridIndex);
|
||||
std::vector< std::vector<double> >& tops = m_cellResults->cellScalarResults(topsResultGridIndex);
|
||||
std::vector< std::vector<double> >& bottom = m_cellResults->cellScalarResults(bottomResultGridIndex);
|
||||
|
||||
size_t cellIdx = 0;
|
||||
for (cellIdx = 0; cellIdx < m_ownerMainGrid->cells().size(); cellIdx++)
|
||||
{
|
||||
const RigCell& cell = m_ownerMainGrid->cells()[cellIdx];
|
||||
|
||||
if (computeDepth)
|
||||
{
|
||||
depth[0][cellIdx] = cvf::Math::abs(cell.center().z());
|
||||
}
|
||||
|
||||
if (computeDx)
|
||||
{
|
||||
cvf::Vec3d cellWidth = cell.faceCenter(cvf::StructGridInterface::NEG_I) - cell.faceCenter(cvf::StructGridInterface::POS_I);
|
||||
dx[0][cellIdx] = cvf::Math::abs(cellWidth.x());
|
||||
}
|
||||
|
||||
if (computeDy)
|
||||
{
|
||||
cvf::Vec3d cellWidth = cell.faceCenter(cvf::StructGridInterface::NEG_J) - cell.faceCenter(cvf::StructGridInterface::POS_J);
|
||||
dy[0][cellIdx] = cvf::Math::abs(cellWidth.y());
|
||||
}
|
||||
|
||||
if (computeDz)
|
||||
{
|
||||
cvf::Vec3d cellWidth = cell.faceCenter(cvf::StructGridInterface::NEG_K) - cell.faceCenter(cvf::StructGridInterface::POS_K);
|
||||
dz[0][cellIdx] = cvf::Math::abs(cellWidth.z());
|
||||
}
|
||||
|
||||
if (computeTops)
|
||||
{
|
||||
tops[0][cellIdx] = cvf::Math::abs(cell.faceCenter(cvf::StructGridInterface::NEG_K).z());
|
||||
}
|
||||
|
||||
if (computeBottom)
|
||||
{
|
||||
bottom[0][cellIdx] = cvf::Math::abs(cell.faceCenter(cvf::StructGridInterface::POS_K).z());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
size_t RimReservoirCellResultsCacher::findOrLoadScalarResult(const QString& resultName)
|
||||
{
|
||||
size_t scalarResultIndex = cvf::UNDEFINED_SIZE_T;
|
||||
|
||||
scalarResultIndex = this->findOrLoadScalarResult(RimDefines::STATIC_NATIVE, resultName);
|
||||
|
||||
if (scalarResultIndex == cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
scalarResultIndex = this->findOrLoadScalarResult(RimDefines::DYNAMIC_NATIVE, resultName);
|
||||
}
|
||||
|
||||
if (scalarResultIndex == cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
scalarResultIndex = m_cellResults->findScalarResultIndex(RimDefines::GENERATED, resultName);
|
||||
}
|
||||
|
||||
if (scalarResultIndex == cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
scalarResultIndex = m_cellResults->findScalarResultIndex(RimDefines::INPUT_PROPERTY, resultName);
|
||||
}
|
||||
|
||||
return scalarResultIndex;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimReservoirCellResultsCacher::setCellResults(RigReservoirCellResults* cellResults)
|
||||
{
|
||||
m_cellResults = cellResults;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimReservoirCellResultsCacher::setMainGrid(RigMainGrid* mainGrid)
|
||||
{
|
||||
m_ownerMainGrid = mainGrid;
|
||||
}
|
||||
|
||||
|
||||
CAF_PDM_SOURCE_INIT(RimReservoirCellResultsCacheEntryInfo, "ResultCacheEntryInfo");
|
||||
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
|
||||
class RimReservoirCellResultsCacheEntryInfo;
|
||||
class RigReservoirCellResults;
|
||||
class RifReaderInterface;
|
||||
class RigMainGrid;
|
||||
|
||||
class RimReservoirCellResultsCacher : public caf::PdmObject
|
||||
{
|
||||
@@ -34,23 +36,37 @@ public:
|
||||
RimReservoirCellResultsCacher();
|
||||
virtual ~RimReservoirCellResultsCacher();
|
||||
|
||||
//RigReservoirCellResults* cellResults() const { return m_cellResults; }
|
||||
void setCellResults(RigReservoirCellResults* cellResults) { m_cellResults = cellResults; }
|
||||
// Fields
|
||||
caf::PdmField<QString> m_resultCacheFileName;
|
||||
caf::PdmPointersField<RimReservoirCellResultsCacheEntryInfo*>
|
||||
m_resultCacheMetaData;
|
||||
|
||||
RigReservoirCellResults* cellResults() { return m_cellResults; }
|
||||
const RigReservoirCellResults* cellResults() const { return m_cellResults; }
|
||||
|
||||
virtual void setupBeforeSave();
|
||||
void setCellResults(RigReservoirCellResults* cellResults);
|
||||
void setMainGrid(RigMainGrid* mainGrid);
|
||||
|
||||
caf::PdmField<QString> m_resultCacheFileName;
|
||||
caf::PdmPointersField<RimReservoirCellResultsCacheEntryInfo*> m_resultCacheMetaData;
|
||||
void setReaderInterface(RifReaderInterface* readerInterface);
|
||||
RifReaderInterface* readerInterface();
|
||||
|
||||
|
||||
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.
|
||||
|
||||
// Overridden methods from PdmObject
|
||||
virtual void setupBeforeSave();
|
||||
|
||||
private:
|
||||
QString getValidCacheFileName();
|
||||
QString getCacheDirectoryPath();
|
||||
|
||||
RigReservoirCellResults* m_cellResults;
|
||||
|
||||
QString getValidCacheFileName();
|
||||
QString getCacheDirectoryPath();
|
||||
cvf::ref<RifReaderInterface> m_readerInterface;
|
||||
RigReservoirCellResults* m_cellResults;
|
||||
RigMainGrid* m_ownerMainGrid;
|
||||
};
|
||||
|
||||
class RimReservoirCellResultsCacheEntryInfo : public caf::PdmObject
|
||||
|
||||
@@ -272,11 +272,11 @@ void RimReservoirView::updateViewerWidgetWindowTitle()
|
||||
void RimReservoirView::clampCurrentTimestep()
|
||||
{
|
||||
// Clamp the current timestep to actual possibilities
|
||||
if (this->currentGridCellResults())
|
||||
if (this->currentGridCellResults()->cellResults())
|
||||
{
|
||||
if (m_currentTimeStep() >= static_cast<int>(this->currentGridCellResults()->maxTimeStepCount()))
|
||||
if (m_currentTimeStep() >= static_cast<int>(this->currentGridCellResults()->cellResults()->maxTimeStepCount()))
|
||||
{
|
||||
m_currentTimeStep = static_cast<int>(this->currentGridCellResults()->maxTimeStepCount()) -1;
|
||||
m_currentTimeStep = static_cast<int>(this->currentGridCellResults()->cellResults()->maxTimeStepCount()) -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -463,7 +463,7 @@ void RimReservoirView::createDisplayModel()
|
||||
CVF_ASSERT(currentGridCellResults());
|
||||
|
||||
size_t i;
|
||||
for (i = 0; i < currentGridCellResults()->maxTimeStepCount(); i++)
|
||||
for (i = 0; i < currentGridCellResults()->cellResults()->maxTimeStepCount(); i++)
|
||||
{
|
||||
timeStepIndices.push_back(i);
|
||||
}
|
||||
@@ -711,7 +711,7 @@ void RimReservoirView::loadDataAndUpdate()
|
||||
RIApplication* app = RIApplication::instance();
|
||||
if (app->preferences()->autocomputeSOIL)
|
||||
{
|
||||
RigReservoirCellResults* results = currentGridCellResults();
|
||||
RimReservoirCellResultsCacher* results = currentGridCellResults();
|
||||
CVF_ASSERT(results);
|
||||
results->loadOrComputeSOIL();
|
||||
}
|
||||
@@ -970,16 +970,13 @@ void RimReservoirView::setupBeforeSave()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// Convenience for quick access to results
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RigReservoirCellResults* RimReservoirView::currentGridCellResults()
|
||||
RimReservoirCellResultsCacher* RimReservoirView::currentGridCellResults()
|
||||
{
|
||||
if (m_reservoir &&
|
||||
m_reservoir->reservoirData() &&
|
||||
m_reservoir->reservoirData()->mainGrid()
|
||||
)
|
||||
if (m_reservoir)
|
||||
{
|
||||
RifReaderInterface::PorosityModelResultType porosityModel = RigReservoirCellResults::convertFromProjectModelPorosityModel(cellResult->porosityModel());
|
||||
|
||||
return m_reservoir->reservoirData()->results(porosityModel);
|
||||
return m_reservoir->results(porosityModel);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
@@ -118,7 +118,7 @@ public:
|
||||
caf::PdmField<bool> animationMode;
|
||||
|
||||
// Access internal objects
|
||||
RigReservoirCellResults* currentGridCellResults();
|
||||
RimReservoirCellResultsCacher* currentGridCellResults();
|
||||
RigActiveCellInfo* currentActiveCellInfo();
|
||||
|
||||
void setEclipseCase(RimReservoir* reservoir);
|
||||
|
||||
@@ -94,7 +94,7 @@ QList<caf::PdmOptionItemInfo> RimResultDefinition::calculateValueOptions(const c
|
||||
{
|
||||
if (m_reservoirView && m_reservoirView->currentGridCellResults())
|
||||
{
|
||||
QStringList varList = m_reservoirView->currentGridCellResults()->resultNames(resultType());
|
||||
QStringList varList = m_reservoirView->currentGridCellResults()->cellResults()->resultNames(resultType());
|
||||
QList<caf::PdmOptionItemInfo> optionList;
|
||||
int i;
|
||||
for (i = 0; i < varList.size(); ++i)
|
||||
@@ -119,8 +119,8 @@ size_t RimResultDefinition::gridScalarIndex() const
|
||||
{
|
||||
if (m_gridScalarResultIndex == cvf::UNDEFINED_SIZE_T)
|
||||
{
|
||||
const RigReservoirCellResults* gridCellResults = m_reservoirView->currentGridCellResults();
|
||||
if (gridCellResults) m_gridScalarResultIndex = gridCellResults->findScalarResultIndex(resultType(), resultVariable());
|
||||
const RimReservoirCellResultsCacher* gridCellResults = m_reservoirView->currentGridCellResults();
|
||||
if (gridCellResults) m_gridScalarResultIndex = gridCellResults->cellResults()->findScalarResultIndex(resultType(), resultVariable());
|
||||
}
|
||||
return m_gridScalarResultIndex;
|
||||
}
|
||||
@@ -130,7 +130,7 @@ size_t RimResultDefinition::gridScalarIndex() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimResultDefinition::loadResult()
|
||||
{
|
||||
RigReservoirCellResults* gridCellResults = m_reservoirView->currentGridCellResults();
|
||||
RimReservoirCellResultsCacher* gridCellResults = m_reservoirView->currentGridCellResults();
|
||||
if (gridCellResults)
|
||||
{
|
||||
m_gridScalarResultIndex = gridCellResults->findOrLoadScalarResult(resultType(), resultVariable);
|
||||
@@ -148,8 +148,8 @@ void RimResultDefinition::loadResult()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimResultDefinition::hasStaticResult() const
|
||||
{
|
||||
const RigReservoirCellResults* gridCellResults = m_reservoirView->currentGridCellResults();
|
||||
if (hasResult() && gridCellResults->timeStepCount(m_gridScalarResultIndex) == 1 )
|
||||
const RimReservoirCellResultsCacher* gridCellResults = m_reservoirView->currentGridCellResults();
|
||||
if (hasResult() && gridCellResults->cellResults()->timeStepCount(m_gridScalarResultIndex) == 1 )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -166,7 +166,7 @@ bool RimResultDefinition::hasResult() const
|
||||
{
|
||||
if (m_gridScalarResultIndex != cvf::UNDEFINED_SIZE_T) return true;
|
||||
|
||||
const RigReservoirCellResults* gridCellResults = m_reservoirView->currentGridCellResults();
|
||||
const RigReservoirCellResults* gridCellResults = m_reservoirView->currentGridCellResults()->cellResults();
|
||||
if (gridCellResults)
|
||||
{
|
||||
m_gridScalarResultIndex = gridCellResults->findScalarResultIndex(resultType(), resultVariable());
|
||||
@@ -182,7 +182,7 @@ bool RimResultDefinition::hasResult() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimResultDefinition::hasDynamicResult() const
|
||||
{
|
||||
const RigReservoirCellResults* gridCellResults = m_reservoirView->currentGridCellResults();
|
||||
const RigReservoirCellResults* gridCellResults = m_reservoirView->currentGridCellResults()->cellResults();
|
||||
if (hasResult() && gridCellResults->timeStepCount(m_gridScalarResultIndex) > 1 )
|
||||
return true;
|
||||
else
|
||||
|
||||
@@ -52,7 +52,7 @@ bool RimResultReservoir::openEclipseGridFile()
|
||||
progInfo.setProgressDescription("Open Grid File");
|
||||
progInfo.setNextProgressIncrement(48);
|
||||
// Early exit if reservoir data is created
|
||||
if (m_rigEclipseCase.notNull()) return true;
|
||||
if (this->reservoirData()) return true;
|
||||
|
||||
cvf::ref<RifReaderInterface> readerInterface;
|
||||
|
||||
@@ -60,8 +60,6 @@ bool RimResultReservoir::openEclipseGridFile()
|
||||
{
|
||||
readerInterface = this->createMockModel(this->caseName());
|
||||
|
||||
m_rigEclipseCase->results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
m_rigEclipseCase->results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -78,12 +76,15 @@ bool RimResultReservoir::openEclipseGridFile()
|
||||
return false;
|
||||
}
|
||||
|
||||
m_rigEclipseCase = eclipseCase;
|
||||
this->setReservoirData( eclipseCase.p() );
|
||||
}
|
||||
|
||||
results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
|
||||
progInfo.incrementProgress();
|
||||
|
||||
CVF_ASSERT(m_rigEclipseCase.notNull());
|
||||
CVF_ASSERT(this->reservoirData());
|
||||
CVF_ASSERT(readerInterface.notNull());
|
||||
|
||||
progInfo.setProgressDescription("Computing Case Cache");
|
||||
@@ -102,9 +103,6 @@ bool RimResultReservoir::openAndReadActiveCellData(RigEclipseCase* mainEclipseCa
|
||||
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
|
||||
{
|
||||
@@ -127,13 +125,16 @@ bool RimResultReservoir::openAndReadActiveCellData(RigEclipseCase* mainEclipseCa
|
||||
|
||||
readerInterface->close();
|
||||
|
||||
m_rigEclipseCase = eclipseCase;
|
||||
this->setReservoirData( eclipseCase.p() );
|
||||
}
|
||||
|
||||
CVF_ASSERT(m_rigEclipseCase.notNull());
|
||||
results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(readerInterface.p());
|
||||
|
||||
CVF_ASSERT(this->reservoirData());
|
||||
CVF_ASSERT(readerInterface.notNull());
|
||||
|
||||
m_rigEclipseCase->computeCachedData();
|
||||
reservoirData()->computeCachedData();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -212,7 +213,7 @@ cvf::ref<RifReaderInterface> RimResultReservoir::createMockModel(QString modelNa
|
||||
|
||||
}
|
||||
|
||||
m_rigEclipseCase = reservoir;
|
||||
this->setReservoirData( reservoir.p() );
|
||||
|
||||
return mockFileInterface.p();
|
||||
}
|
||||
|
||||
@@ -60,9 +60,9 @@ RimStatisticalCalculation::~RimStatisticalCalculation()
|
||||
void RimStatisticalCalculation::setMainGrid(RigMainGrid* mainGrid)
|
||||
{
|
||||
CVF_ASSERT(mainGrid);
|
||||
CVF_ASSERT(m_rigEclipseCase.notNull());
|
||||
CVF_ASSERT(this->reservoirData());
|
||||
|
||||
m_rigEclipseCase->setMainGrid(mainGrid);
|
||||
reservoirData()->setMainGrid(mainGrid);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -70,7 +70,7 @@ void RimStatisticalCalculation::setMainGrid(RigMainGrid* mainGrid)
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimStatisticalCalculation::openEclipseGridFile()
|
||||
{
|
||||
if (m_rigEclipseCase.notNull()) return true;
|
||||
if (this->reservoirData()) return true;
|
||||
|
||||
cvf::ref<RigEclipseCase> eclipseCase = new RigEclipseCase;
|
||||
|
||||
@@ -79,10 +79,10 @@ bool RimStatisticalCalculation::openEclipseGridFile()
|
||||
return false;
|
||||
}
|
||||
|
||||
m_rigEclipseCase = eclipseCase;
|
||||
this->setReservoirData( eclipseCase.p() );
|
||||
|
||||
m_rigEclipseCase->results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(m_readerInterface.p());
|
||||
m_rigEclipseCase->results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(m_readerInterface.p());
|
||||
results(RifReaderInterface::MATRIX_RESULTS)->setReaderInterface(m_readerInterface.p());
|
||||
results(RifReaderInterface::FRACTURE_RESULTS)->setReaderInterface(m_readerInterface.p());
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -116,12 +116,12 @@ RimStatisticalCollection* RimStatisticalCalculation::parentStatisticalCollection
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimStatisticalCalculation::computeStatistics()
|
||||
{
|
||||
if (m_rigEclipseCase.isNull())
|
||||
if (this->reservoirData() == NULL)
|
||||
{
|
||||
openEclipseGridFile();
|
||||
}
|
||||
|
||||
cvf::Collection<RigEclipseCase> sourceCases;
|
||||
std::vector<RimReservoir*> sourceCases;
|
||||
|
||||
getSourceCases(sourceCases);
|
||||
|
||||
@@ -132,7 +132,7 @@ void RimStatisticalCalculation::computeStatistics()
|
||||
|
||||
// The first source has been read completely from disk, and contains grid and meta data
|
||||
// Use this information for all cases in the case group
|
||||
size_t timeStepCount = sourceCases.at(0)->results(RifReaderInterface::MATRIX_RESULTS)->maxTimeStepCount();
|
||||
size_t timeStepCount = sourceCases.at(0)->results(RifReaderInterface::MATRIX_RESULTS)->cellResults()->maxTimeStepCount();
|
||||
|
||||
RigStatisticsConfig statisticsConfig;
|
||||
|
||||
@@ -183,7 +183,7 @@ void RimStatisticalCalculation::computeStatistics()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimStatisticalCalculation::getSourceCases(cvf::Collection<RigEclipseCase>& sourceCases)
|
||||
void RimStatisticalCalculation::getSourceCases(std::vector<RimReservoir*>& sourceCases)
|
||||
{
|
||||
RimIdenticalGridCaseGroup* gridCaseGroup = caseGroup();
|
||||
if (gridCaseGroup)
|
||||
@@ -195,7 +195,7 @@ void RimStatisticalCalculation::getSourceCases(cvf::Collection<RigEclipseCase>&
|
||||
CVF_ASSERT(gridCaseGroup->caseCollection->reservoirs[i]);
|
||||
CVF_ASSERT(gridCaseGroup->caseCollection->reservoirs[i]->reservoirData());
|
||||
|
||||
RigEclipseCase* sourceCase = gridCaseGroup->caseCollection->reservoirs[i]->reservoirData();
|
||||
RimReservoir* sourceCase = gridCaseGroup->caseCollection->reservoirs[i];
|
||||
sourceCases.push_back(sourceCase);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ public:
|
||||
private:
|
||||
RimIdenticalGridCaseGroup* caseGroup();
|
||||
|
||||
void getSourceCases(cvf::Collection<RigEclipseCase>& sourceCases);
|
||||
void getSourceCases(std::vector<RimReservoir*>& sourceCases);
|
||||
|
||||
private:
|
||||
cvf::ref<RifReaderStatisticalCalculation> m_readerInterface;
|
||||
|
||||
Reference in New Issue
Block a user