mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
StimPlanModel: use data from input cases when available
This commit is contained in:
parent
5dd7822b5f
commit
f498138f4e
@ -39,6 +39,7 @@
|
|||||||
#include "RimStimPlanModelCalculator.h"
|
#include "RimStimPlanModelCalculator.h"
|
||||||
#include "RimStimPlanModelTemplate.h"
|
#include "RimStimPlanModelTemplate.h"
|
||||||
#include "RimStimPlanModelWellLogCalculator.h"
|
#include "RimStimPlanModelWellLogCalculator.h"
|
||||||
|
#include "cafAssert.h"
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
@ -448,49 +449,70 @@ bool RimStimPlanModelPressureCalculator::buildPressureTablesPerEqlNum( const Rim
|
|||||||
EqlNumToDepthValuePairMap& valuesPerEqlNum,
|
EqlNumToDepthValuePairMap& valuesPerEqlNum,
|
||||||
const std::set<int>& presentEqlNums )
|
const std::set<int>& presentEqlNums )
|
||||||
{
|
{
|
||||||
RimEclipseCase* eclipseCase = stimPlanModel->eclipseCaseForProperty( RiaDefines::CurveProperty::EQLNUM );
|
|
||||||
|
|
||||||
// TODO: too naive??
|
|
||||||
int gridIndex = 0;
|
int gridIndex = 0;
|
||||||
const RigGridBase* grid = eclipseCase->mainGrid()->gridByIndex( gridIndex );
|
RimEclipseCase* eqlNumEclipseCase = stimPlanModel->eclipseCaseForProperty( RiaDefines::CurveProperty::EQLNUM );
|
||||||
|
CAF_ASSERT( eqlNumEclipseCase != nullptr );
|
||||||
|
|
||||||
RigEclipseCaseData* caseData = eclipseCase->eclipseCaseData();
|
const RigGridBase* eqlNumGrid = eqlNumEclipseCase->mainGrid()->gridByIndex( gridIndex );
|
||||||
|
CAF_ASSERT( eqlNumGrid != nullptr );
|
||||||
|
|
||||||
|
RigEclipseCaseData* eqlNumCaseData = eqlNumEclipseCase->eclipseCaseData();
|
||||||
|
CAF_ASSERT( eqlNumCaseData != nullptr );
|
||||||
|
|
||||||
RiaDefines::PorosityModelType porosityModel = RiaDefines::PorosityModelType::MATRIX_MODEL;
|
RiaDefines::PorosityModelType porosityModel = RiaDefines::PorosityModelType::MATRIX_MODEL;
|
||||||
const std::vector<double>& eqlNumValues =
|
const std::vector<double>& eqlNumValues =
|
||||||
RimStimPlanModelWellLogCalculator::loadResults( caseData,
|
RimStimPlanModelWellLogCalculator::loadResults( eqlNumCaseData,
|
||||||
porosityModel,
|
porosityModel,
|
||||||
RiaDefines::ResultCatType::STATIC_NATIVE,
|
RiaDefines::ResultCatType::STATIC_NATIVE,
|
||||||
"EQLNUM" );
|
"EQLNUM" );
|
||||||
|
|
||||||
|
RimEclipseCase* pressureEclipseCase =
|
||||||
|
stimPlanModel->eclipseCaseForProperty( RiaDefines::CurveProperty::INITIAL_PRESSURE );
|
||||||
|
CAF_ASSERT( pressureEclipseCase != nullptr );
|
||||||
|
|
||||||
|
const RigGridBase* pressureGrid = pressureEclipseCase->mainGrid()->gridByIndex( gridIndex );
|
||||||
|
CAF_ASSERT( pressureGrid );
|
||||||
|
|
||||||
|
RigEclipseCaseData* pressureCaseData = pressureEclipseCase->eclipseCaseData();
|
||||||
|
CAF_ASSERT( pressureCaseData );
|
||||||
|
|
||||||
const std::vector<double>& pressureValues =
|
const std::vector<double>& pressureValues =
|
||||||
RimStimPlanModelWellLogCalculator::loadResults( caseData,
|
RimStimPlanModelWellLogCalculator::loadResults( pressureCaseData,
|
||||||
porosityModel,
|
porosityModel,
|
||||||
RiaDefines::ResultCatType::DYNAMIC_NATIVE,
|
RiaDefines::ResultCatType::DYNAMIC_NATIVE,
|
||||||
"PRESSURE" );
|
"PRESSURE" );
|
||||||
|
|
||||||
if ( eqlNumValues.size() != pressureValues.size() )
|
auto eqlNumActiveCellInfo = eqlNumCaseData->activeCellInfo( porosityModel );
|
||||||
|
size_t eqlNumCellCount = eqlNumActiveCellInfo->reservoirCellCount();
|
||||||
|
|
||||||
|
auto pressureActiveCellInfo = pressureCaseData->activeCellInfo( porosityModel );
|
||||||
|
|
||||||
|
if ( eqlNumGrid->cellCountI() != pressureGrid->cellCountI() ||
|
||||||
|
eqlNumGrid->cellCountJ() != pressureGrid->cellCountJ() || eqlNumGrid->cellCountK() != pressureGrid->cellCountK() )
|
||||||
{
|
{
|
||||||
RiaLogging::error( "Unexpected result size for EQLNUM and PRESSURE found for pressure calculation." );
|
RiaLogging::error( "Unexpected number of cells when building pressure per EQLNUM table. " );
|
||||||
|
RiaLogging::error( "Grid needs to have identical geometry." );
|
||||||
|
RiaLogging::error( QString( "EQLNUM grid dimensions: [ %1, %2, %3]" )
|
||||||
|
.arg( eqlNumGrid->cellCountI() )
|
||||||
|
.arg( eqlNumGrid->cellCountJ() )
|
||||||
|
.arg( eqlNumGrid->cellCountK() ) );
|
||||||
|
|
||||||
|
RiaLogging::error( QString( "PRESSURE grid dimensions: [ %1, %2, %3]" )
|
||||||
|
.arg( pressureGrid->cellCountI() )
|
||||||
|
.arg( pressureGrid->cellCountJ() )
|
||||||
|
.arg( pressureGrid->cellCountK() ) );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto activeCellInfo = caseData->activeCellInfo( porosityModel );
|
for ( size_t cellIndex = 0; cellIndex < eqlNumCellCount; cellIndex++ )
|
||||||
size_t cellCount = activeCellInfo->reservoirActiveCellCount();
|
|
||||||
|
|
||||||
if ( cellCount != pressureValues.size() )
|
|
||||||
{
|
{
|
||||||
RiaLogging::error( "Unexpected number of active cells in pressure calculation." );
|
size_t resultIdx = eqlNumActiveCellInfo->cellResultIndex( cellIndex );
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( size_t cellIndex = 0; cellIndex < cellCount; cellIndex++ )
|
|
||||||
{
|
|
||||||
size_t resultIdx = activeCellInfo->cellResultIndex( cellIndex );
|
|
||||||
int eqlNum = static_cast<int>( eqlNumValues[resultIdx] );
|
int eqlNum = static_cast<int>( eqlNumValues[resultIdx] );
|
||||||
double pressure = pressureValues[resultIdx];
|
size_t pressureResultIdx = pressureActiveCellInfo->cellResultIndex( cellIndex );
|
||||||
|
double pressure = pressureValues[pressureResultIdx];
|
||||||
if ( presentEqlNums.count( eqlNum ) > 0 && !std::isinf( pressure ) )
|
if ( presentEqlNums.count( eqlNum ) > 0 && !std::isinf( pressure ) )
|
||||||
{
|
{
|
||||||
cvf::Vec3d center = grid->cell( cellIndex ).center();
|
cvf::Vec3d center = eqlNumGrid->cell( cellIndex ).center();
|
||||||
valuesPerEqlNum[eqlNum].push_back( std::make_pair( -center.z(), pressure ) );
|
valuesPerEqlNum[eqlNum].push_back( std::make_pair( -center.z(), pressure ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -584,6 +584,12 @@ const std::vector<double>& RimStimPlanModelWellLogCalculator::loadResults( RigEc
|
|||||||
int timeStepIndex = 0;
|
int timeStepIndex = 0;
|
||||||
RigEclipseResultAddress resultAddress( resultType, propertyName );
|
RigEclipseResultAddress resultAddress( resultType, propertyName );
|
||||||
|
|
||||||
|
if ( !resultData->hasResultEntry( resultAddress ) && resultType != RiaDefines::ResultCatType::INPUT_PROPERTY )
|
||||||
|
{
|
||||||
|
return loadResults( caseData, porosityModel, RiaDefines::ResultCatType::INPUT_PROPERTY, propertyName );
|
||||||
|
}
|
||||||
|
|
||||||
|
CAF_ASSERT( resultData->hasResultEntry( resultAddress ) );
|
||||||
resultData->ensureKnownResultLoaded( resultAddress );
|
resultData->ensureKnownResultLoaded( resultAddress );
|
||||||
return caseData->results( porosityModel )->cellScalarResults( resultAddress, timeStepIndex );
|
return caseData->results( porosityModel )->cellScalarResults( resultAddress, timeStepIndex );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user