diff --git a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccess.cpp b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccess.cpp index 46bdb8f00e..73c1db1713 100644 --- a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccess.cpp +++ b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccess.cpp @@ -58,7 +58,8 @@ RimFaultReactivationDataAccess::RimFaultReactivationDataAccess( const RimFaultRe double seabedDepth = -model.seaBedDepth(); m_accessors.push_back( std::make_shared( eCase, porePressureGradient, seabedDepth ) ); m_accessors.push_back( std::make_shared( eCase, 0.0001 ) ); - m_accessors.push_back( std::make_shared( eCase, topTemperature, seabedDepth ) ); + m_accessors.push_back( + std::make_shared( eCase, topTemperature, seabedDepth, timeSteps.front() ) ); std::vector stressProperties = { RimFaultReactivation::Property::StressTop, RimFaultReactivation::Property::DepthTop, diff --git a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorTemperature.cpp b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorTemperature.cpp index be16499b68..e647dfe84f 100644 --- a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorTemperature.cpp +++ b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorTemperature.cpp @@ -42,12 +42,14 @@ //-------------------------------------------------------------------------------------------------- RimFaultReactivationDataAccessorTemperature::RimFaultReactivationDataAccessorTemperature( RimEclipseCase* eclipseCase, double seabedTemperature, - double seabedDepth ) + double seabedDepth, + size_t firstTimeStep ) : m_eclipseCase( eclipseCase ) , m_caseData( nullptr ) , m_mainGrid( nullptr ) , m_seabedTemperature( seabedTemperature ) , m_seabedDepth( seabedDepth ) + , m_firstTimeStep( firstTimeStep ) { if ( m_eclipseCase ) { @@ -75,14 +77,23 @@ void RimFaultReactivationDataAccessorTemperature::updateResultAccessor() m_resultAccessor = RigResultAccessorFactory::createFromResultAddress( m_caseData, 0, RiaDefines::PorosityModelType::MATRIX_MODEL, m_timeStep, resVarAddress ); - if ( m_resultAccessor.notNull() ) + // Only create the first time step accessor once: it is always the same. + if ( m_resultAccessor0.isNull() ) { - auto [wellPaths, extractors] = - RimFaultReactivationDataAccessorWellLogExtraction::createEclipseWellPathExtractors( *m_model, *m_caseData, m_seabedDepth ); - m_wellPaths = wellPaths; - m_extractors = extractors; + m_resultAccessor0 = RigResultAccessorFactory::createFromResultAddress( m_caseData, + 0, + RiaDefines::PorosityModelType::MATRIX_MODEL, + m_firstTimeStep, + resVarAddress ); + if ( m_resultAccessor0.notNull() ) + { + auto [wellPaths, extractors] = + RimFaultReactivationDataAccessorWellLogExtraction::createEclipseWellPathExtractors( *m_model, *m_caseData, m_seabedDepth ); + m_wellPaths = wellPaths; + m_extractors = extractors; - m_gradient = computeGradient(); + m_gradient = computeGradient(); + } } } @@ -99,7 +110,7 @@ double RimFaultReactivationDataAccessorTemperature::computeGradient() const auto wellPath = m_wellPaths.find( gridPart )->second; auto [values, intersections] = - RimFaultReactivationDataAccessorWellLogExtraction::extractValuesAndIntersections( *m_resultAccessor.p(), *extractor.p(), *wellPath ); + RimFaultReactivationDataAccessorWellLogExtraction::extractValuesAndIntersections( *m_resultAccessor0.p(), *extractor.p(), *wellPath ); int lastOverburdenIndex = RimFaultReactivationDataAccessorWellLogExtraction::findLastOverburdenIndex( values ); if ( lastOverburdenIndex != -1 ) @@ -144,7 +155,7 @@ double RimFaultReactivationDataAccessorTemperature::valueAtPosition( const cvf:: double bottomDepth, size_t elementIndex ) const { - if ( ( m_mainGrid != nullptr ) && m_resultAccessor.notNull() ) + if ( ( m_mainGrid != nullptr ) && m_resultAccessor.notNull() && m_resultAccessor0.notNull() ) { auto cellIdx = m_mainGrid->findReservoirCellIndexFromPoint( position ); if ( cellIdx != cvf::UNDEFINED_SIZE_T ) @@ -159,8 +170,10 @@ double RimFaultReactivationDataAccessorTemperature::valueAtPosition( const cvf:: CAF_ASSERT( m_wellPaths.find( gridPart ) != m_wellPaths.end() ); auto wellPath = m_wellPaths.find( gridPart )->second; + // Use data from first time step when not in reservoir. This ensures that the only difference between the + // timesteps in the fault-reactivation model is in the reservoir. auto [values, intersections] = - RimFaultReactivationDataAccessorWellLogExtraction::extractValuesAndIntersections( *m_resultAccessor.p(), *extractor.p(), *wellPath ); + RimFaultReactivationDataAccessorWellLogExtraction::extractValuesAndIntersections( *m_resultAccessor0.p(), *extractor.p(), *wellPath ); auto [value, pos] = RimFaultReactivationDataAccessorWellLogExtraction::calculateTemperature( intersections, position, m_seabedTemperature, m_gradient ); diff --git a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorTemperature.h b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorTemperature.h index d8b5b1fce0..0ae440d3e8 100644 --- a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorTemperature.h +++ b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorTemperature.h @@ -38,7 +38,7 @@ class RigEclipseWellLogExtractor; class RimFaultReactivationDataAccessorTemperature : public RimFaultReactivationDataAccessor { public: - RimFaultReactivationDataAccessorTemperature( RimEclipseCase* eclipseCase, double seabedTemperature, double seabedDepth ); + RimFaultReactivationDataAccessorTemperature( RimEclipseCase* eclipseCase, double seabedTemperature, double seabedDepth, size_t firstTimeStep ); ~RimFaultReactivationDataAccessorTemperature(); bool isMatching( RimFaultReactivation::Property property ) const override; @@ -60,7 +60,9 @@ private: double m_seabedTemperature; double m_seabedDepth; double m_gradient; + size_t m_firstTimeStep; + cvf::ref m_resultAccessor0; cvf::ref m_resultAccessor; std::map> m_wellPaths;