#12017 Add caching of well target result data

Write data to welltargetdata.GRDECL in a subfolder of the project. Import this data when project is load. The data in this cache is owerwritten when the project is saved.
This commit is contained in:
Magne Sjaastad
2024-12-23 11:53:49 +01:00
parent 1cdbffb2c7
commit c4c4078e09
5 changed files with 114 additions and 87 deletions

View File

@@ -22,6 +22,9 @@
#include "RigCaseCellResultsData.h"
#include "RigEclipseCaseData.h"
#include "RigReservoirBuilder.h"
#include "RimTools.h"
CAF_PDM_SOURCE_INIT( RimRegularGridCase, "EclipseBoundingBoxCase" );
//--------------------------------------------------------------------------------------------------
@@ -69,22 +72,39 @@ void RimRegularGridCase::setCellCount( const cvf::Vec3st& cellCount )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
cvf::ref<RifReaderInterface> RimRegularGridCase::createModel( QString modelName )
void RimRegularGridCase::createModel()
{
cvf::ref<RifReaderRegularGridModel> reader = new RifReaderRegularGridModel;
cvf::ref<RigEclipseCaseData> reservoir = new RigEclipseCaseData( this );
cvf::ref<RigEclipseCaseData> reservoir = new RigEclipseCaseData( this );
reader->setWorldCoordinates( m_minimum, m_maximum );
RigReservoirBuilder reservoirBuilder;
reservoirBuilder.setWorldCoordinates( m_minimum, m_maximum );
cvf::Vec3st gridPointDimensions( m_cellCountI, m_cellCountJ, m_cellCountK );
reader->setGridPointDimensions( gridPointDimensions );
reservoirBuilder.setIJKCount( gridPointDimensions );
reader->open( "", reservoir.p() );
reservoirBuilder.createGridsAndCells( reservoir.p() );
setReservoirData( reservoir.p() );
computeCachedData();
}
return reader.p();
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimRegularGridCase::setupBeforeSave()
{
auto fileName = cacheFileName();
RifReaderRegularGridModel::writeCache( fileName, this );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimRegularGridCase::cacheFileName() const
{
auto cacheDirPath = RimTools::getCacheRootDirectoryPathFromProject();
cacheDirPath += "_welltarget/welltargetdata.GRDECL";
return cacheDirPath;
}
//--------------------------------------------------------------------------------------------------
@@ -92,9 +112,13 @@ cvf::ref<RifReaderInterface> RimRegularGridCase::createModel( QString modelName
//--------------------------------------------------------------------------------------------------
bool RimRegularGridCase::openEclipseGridFile()
{
if ( eclipseCaseData() ) return true;
if ( !eclipseCaseData() )
{
createModel();
}
createModel( "" );
auto fileName = cacheFileName();
RifReaderRegularGridModel::ensureDataIsReadFromCache( fileName, this );
return true;
}

View File

@@ -43,7 +43,11 @@ public:
bool openEclipseGridFile() override;
cvf::ref<RifReaderInterface> createModel( QString modelName );
void createModel();
private:
void setupBeforeSave() override;
QString cacheFileName() const;
private:
caf::PdmField<cvf::Vec3d> m_minimum;