diff --git a/ApplicationLibCode/Application/Tools/CMakeLists_files.cmake b/ApplicationLibCode/Application/Tools/CMakeLists_files.cmake index 56778d575b6..82f4d251b95 100644 --- a/ApplicationLibCode/Application/Tools/CMakeLists_files.cmake +++ b/ApplicationLibCode/Application/Tools/CMakeLists_files.cmake @@ -14,7 +14,6 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RiaQDateTimeTools.h ${CMAKE_CURRENT_LIST_DIR}/RiaWellNameComparer.h ${CMAKE_CURRENT_LIST_DIR}/RiaStdStringTools.h - ${CMAKE_CURRENT_LIST_DIR}/RiaInterpolationTools.h ${CMAKE_CURRENT_LIST_DIR}/RiaSimWellBranchTools.h ${CMAKE_CURRENT_LIST_DIR}/RiaProjectFileTools.h ${CMAKE_CURRENT_LIST_DIR}/RiaStringEncodingTools.h @@ -77,7 +76,6 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RiaQDateTimeTools.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaWellNameComparer.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaStdStringTools.cpp - ${CMAKE_CURRENT_LIST_DIR}/RiaInterpolationTools.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaSimWellBranchTools.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaProjectFileTools.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaStringEncodingTools.cpp diff --git a/ApplicationLibCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp b/ApplicationLibCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp index 45028fb5972..1e963464ef0 100644 --- a/ApplicationLibCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp +++ b/ApplicationLibCode/Commands/CompletionExportCommands/RicExportFractureCompletionsImpl.cpp @@ -592,7 +592,11 @@ void RicExportFractureCompletionsImpl::calculateFractureToWellTransmissibilities wellPathPoints = computeWellPointsInFracturePlane( fracture, wellPathGeometry ); } - RigWellPathStimplanIntersector wellFractureIntersector( wellPathPoints, fracture ); + RigWellPathStimplanIntersector wellFractureIntersector( wellPathPoints, + fracture->transformMatrix(), + fracture->wellRadius(), + fracture->perforationLength(), + fracture->fractureGrid() ); const std::map& fractureWellCells = wellFractureIntersector.intersections(); diff --git a/ApplicationLibCode/ModelVisualization/RivSimWellPipesPartMgr.cpp b/ApplicationLibCode/ModelVisualization/RivSimWellPipesPartMgr.cpp index aa0d1cdf5cd..29021f57a76 100644 --- a/ApplicationLibCode/ModelVisualization/RivSimWellPipesPartMgr.cpp +++ b/ApplicationLibCode/ModelVisualization/RivSimWellPipesPartMgr.cpp @@ -26,7 +26,6 @@ #include "RigVirtualPerforationTransmissibilities.h" #include "Well/RigEclipseWellLogExtractor.h" -#include "Well/RigMswCenterLineCalculator.h" #include "Well/RigSimulationWellCenterLineCalculator.h" #include "Well/RigWellLogExtractor.h" #include "Well/RigWellPath.h" diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp index c7bd471b854..1e06fe6eab9 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp @@ -259,7 +259,11 @@ WellFractureIntersectionData RimMeshFractureTemplate::wellFractureIntersectionDa std::vector wellPathPoints = rimWellPath->wellPathGeometry()->wellPathPointsIncludingInterpolatedIntersectionPoint( fractureInstance->fractureMD() ); - RigWellPathStimplanIntersector intersector( wellPathPoints, fractureInstance ); + RigWellPathStimplanIntersector intersector( wellPathPoints, + fractureInstance->transformMatrix(), + fractureInstance->wellRadius(), + fractureInstance->perforationLength(), + fractureInstance->fractureGrid() ); for ( const auto& v : intersector.intersections() ) { size_t fractureGlobalCellIndex = v.first; diff --git a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorStressEclipse.cpp b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorStressEclipse.cpp index 4effea93ea2..1d38189988e 100644 --- a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorStressEclipse.cpp +++ b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorStressEclipse.cpp @@ -19,9 +19,9 @@ #include "RimFaultReactivationDataAccessorStressEclipse.h" #include "RiaEclipseUnitTools.h" -#include "RiaInterpolationTools.h" #include "RiaLogging.h" #include "RiaWellLogUnitTools.h" +#include "RigInterpolationTools.h" #include "RigCaseCellResultsData.h" #include "RigEclipseResultAddress.h" @@ -157,7 +157,7 @@ double RimFaultReactivationDataAccessorStressEclipse::extractStressValue( Stress // Interpolate value from the two closest points. std::vector xs = { intersections[bottomIdx].z(), intersections[topIdx].z() }; std::vector ys = { stressValues[bottomIdx], stressValues[topIdx] }; - return RiaEclipseUnitTools::pascalToBar( RiaInterpolationTools::linear( xs, ys, position.z() ) ); + return RiaEclipseUnitTools::pascalToBar( RigInterpolationTools::linear( xs, ys, position.z() ) ); } } else if ( position.z() <= intersections.back().z() ) diff --git a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorWellLogExtraction.cpp b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorWellLogExtraction.cpp index 00df7b9f52e..5476bff6e67 100644 --- a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorWellLogExtraction.cpp +++ b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationDataAccessorWellLogExtraction.cpp @@ -19,8 +19,8 @@ #include "RimFaultReactivationDataAccessorWellLogExtraction.h" #include "RiaEclipseUnitTools.h" -#include "RiaInterpolationTools.h" #include "RiaLogging.h" +#include "RigInterpolationTools.h" #include "RigFaultReactivationModel.h" #include "RigFemAddressDefines.h" @@ -124,10 +124,10 @@ std::pair // Interpolate value from the two closest points. std::vector xs = { intersections[bottomIdx].z(), intersections[topIdx].z() }; std::vector ys = { values[bottomIdx], values[topIdx] }; - double porBar = RiaInterpolationTools::linear( xs, ys, position.z() ); + double porBar = RigInterpolationTools::linear( xs, ys, position.z() ); // Interpolate position from depth - double fraction = RiaInterpolationTools::linear( xs, { 0.0, 1.0 }, position.z() ); + double fraction = RigInterpolationTools::linear( xs, { 0.0, 1.0 }, position.z() ); cvf::Vec3d extractionPosition = lerp( intersections[bottomIdx], intersections[topIdx], fraction ); return { porBar, extractionPosition }; } @@ -233,7 +233,7 @@ void RimFaultReactivationDataAccessorWellLogExtraction::fillInMissingValuesWithG // Interpolate the missing values (should only be intra-reservoir by now) std::vector intersectionsZ = extractDepthValues( intersections ); - RiaInterpolationTools::interpolateMissingValues( intersectionsZ, values ); + RigInterpolationTools::interpolateMissingValues( intersectionsZ, values ); } //-------------------------------------------------------------------------------------------------- @@ -256,7 +256,7 @@ void RimFaultReactivationDataAccessorWellLogExtraction::fillInMissingValuesWithT // Interpolate the missing values (should only be intra-reservoir by now) std::vector intersectionsZ = extractDepthValues( intersections ); - RiaInterpolationTools::interpolateMissingValues( intersectionsZ, values ); + RigInterpolationTools::interpolateMissingValues( intersectionsZ, values ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationEnums.h b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationEnums.h index 6bc81eef46c..c344e1f122b 100644 --- a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationEnums.h +++ b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationEnums.h @@ -18,39 +18,15 @@ #pragma once -namespace RimFaultReactivation -{ - -enum class GridPart -{ - FW, // footwall - HW // hanging wall -}; - -enum class BorderSurface -{ - UpperSurface, - FaultSurface, - LowerSurface, - Seabed -}; +#include "RigFaultReactivationEnums.h" -enum class Boundary +namespace RimFaultReactivation { - FarSide, - Bottom, - Fault, - Reservoir -}; -enum class ElementSets -{ - OverBurden, - UnderBurden, - Reservoir, - IntraReservoir, - FaultZone -}; +using GridPart = RigFaultReactivation::GridPart; +using BorderSurface = RigFaultReactivation::BorderSurface; +using Boundary = RigFaultReactivation::Boundary; +using ElementSets = RigFaultReactivation::ElementSets; enum class StressSource { diff --git a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationModel.cpp b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationModel.cpp index 40373f8048a..8ec06470ab9 100644 --- a/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationModel.cpp +++ b/ApplicationLibCode/ProjectDataModel/Faults/RimFaultReactivationModel.cpp @@ -342,7 +342,12 @@ void RimFaultReactivationModel::updateVisualization() m_2Dmodel->setPartColors( m_modelPart1Color, m_modelPart2Color ); m_2Dmodel->setGenerator( generator ); m_2Dmodel->updateGeometry( m_startCellIndex, (cvf::StructGridInterface::FaceType)m_startCellFace() ); - m_2Dmodel->postProcessElementSets( eclipseCase() ); + auto eCase = eclipseCase(); + if ( eCase && eCase->eclipseCaseData() ) + { + auto cellInfo = eCase->eclipseCaseData()->activeCellInfo( RiaDefines::PorosityModelType::MATRIX_MODEL ); + m_2Dmodel->postProcessElementSets( eCase->mainGrid(), cellInfo ); + } view->scheduleCreateDisplayModelAndRedraw(); } diff --git a/ApplicationLibCode/ProjectDataModel/RimSimWellInView.cpp b/ApplicationLibCode/ProjectDataModel/RimSimWellInView.cpp index 57fa5fa0347..3d6a26cf5ab 100644 --- a/ApplicationLibCode/ProjectDataModel/RimSimWellInView.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimSimWellInView.cpp @@ -35,6 +35,7 @@ #include "Rim2dIntersectionView.h" #include "RimCellFilterCollection.h" #include "RimEclipseCase.h" +#include "RimEclipseResultCase.h" #include "RimEclipseView.h" #include "RimExtrudedCurveIntersection.h" #include "RimIntersectionCollection.h" @@ -184,10 +185,34 @@ std::vector RimSimWellInView::wellBranchesForVisualiza if ( simWellData && simWellData->isMultiSegmentWell() ) { - return RigMswCenterLineCalculator::calculateMswWellPipeGeometry( this ); + auto eclipseView = firstAncestorOrThisOfTypeAsserted(); + if ( eclipseView->eclipseCase() && eclipseView->eclipseCase()->eclipseCaseData() ) + { + auto eclipseCaseData = eclipseView->eclipseCase()->eclipseCaseData(); + int timeStepIndex = eclipseView->currentTimeStep(); + + int shortBranchMergeThreshold = 4; + if ( auto eclipseResultCase = dynamic_cast( eclipseView->eclipseCase() ) ) + { + shortBranchMergeThreshold = eclipseResultCase->mswMergeThreshold(); + } + + return RigMswCenterLineCalculator::calculateMswWellPipeGeometry( eclipseCaseData, simWellData, timeStepIndex, shortBranchMergeThreshold ); + } + + return {}; } - return RigSimulationWellCenterLineCalculator::calculateWellPipeStaticCenterline( this ); + auto eclipseView = firstAncestorOrThisOfTypeAsserted(); + if ( eclipseView->eclipseCase() && eclipseView->eclipseCase()->eclipseCaseData() ) + { + return RigSimulationWellCenterLineCalculator::calculateWellPipeStaticCenterline( eclipseView->eclipseCase()->eclipseCaseData(), + simWellData, + eclipseView->wellCollection()->isAutoDetectingBranches(), + isUsingCellCenterForPipe() ); + } + + return {}; } //-------------------------------------------------------------------------------------------------- @@ -780,8 +805,18 @@ void RimSimWellInView::scaleDisk( double minValue, double maxValue ) //-------------------------------------------------------------------------------------------------- cvf::BoundingBox RimSimWellInView::boundingBoxInDomainCoords() const { - auto noConst = const_cast( this ); - auto simWellBranches = RigSimulationWellCenterLineCalculator::calculateWellPipeStaticCenterline( noConst ); + const RigSimWellData* simWellData = this->simWellData(); + auto eclipseView = firstAncestorOrThisOfTypeAsserted(); + + std::vector simWellBranches; + if ( simWellData && eclipseView->eclipseCase() && eclipseView->eclipseCase()->eclipseCaseData() ) + { + simWellBranches = + RigSimulationWellCenterLineCalculator::calculateWellPipeStaticCenterline( eclipseView->eclipseCase()->eclipseCaseData(), + simWellData, + eclipseView->wellCollection()->isAutoDetectingBranches(), + isUsingCellCenterForPipe() ); + } cvf::BoundingBox bb; for ( const auto& [coords, wellCells] : simWellBranches ) diff --git a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelCurve.cpp b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelCurve.cpp index a0f393c3a32..56966a914e4 100644 --- a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelCurve.cpp @@ -19,10 +19,10 @@ #include "RimStimPlanModelCurve.h" #include "RiaApplication.h" -#include "RiaInterpolationTools.h" #include "RiaLogging.h" #include "RiaPreferences.h" #include "RiaStimPlanModelDefines.h" +#include "RigInterpolationTools.h" #include "RigEclipseCaseData.h" diff --git a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelElasticPropertyCalculator.cpp b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelElasticPropertyCalculator.cpp index 84291848228..d11c369d621 100644 --- a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelElasticPropertyCalculator.cpp +++ b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelElasticPropertyCalculator.cpp @@ -18,10 +18,10 @@ #include "RimStimPlanModelElasticPropertyCalculator.h" #include "RiaDefines.h" -#include "RiaInterpolationTools.h" #include "RiaLogging.h" #include "RiaResultNames.h" #include "RiaStimPlanModelDefines.h" +#include "RigInterpolationTools.h" #include "RigEclipseCaseData.h" #include "RigEclipseResultAddress.h" diff --git a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.cpp b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.cpp index 137937c849e..9c7921cc0b5 100644 --- a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.cpp +++ b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.cpp @@ -19,9 +19,9 @@ #include "RiaDefines.h" #include "RiaEclipseUnitTools.h" -#include "RiaInterpolationTools.h" #include "RiaLogging.h" #include "RiaStimPlanModelDefines.h" +#include "RigInterpolationTools.h" #include "RigActiveCellInfo.h" #include "RigCaseCellResultsData.h" @@ -211,7 +211,7 @@ bool RimStimPlanModelPressureCalculator::extractValuesForProperty( RiaDefines::C } // Fill in regions where it was not possible top interpolate with equilibration regions. - if ( hasMissingValues( values ) ) RiaInterpolationTools::interpolateMissingValues( measuredDepthValues, values ); + if ( hasMissingValues( values ) ) RigInterpolationTools::interpolateMissingValues( measuredDepthValues, values ); } } else if ( curveProperty == RiaDefines::CurveProperty::PRESSURE_GRADIENT ) @@ -293,7 +293,7 @@ std::tuple, std::vector, std::vector> // Interpolate a value for the given md std::vector xs = { sourceMds[startIndex], md, sourceMds[endIndex] }; std::vector ys = { prevValue, std::numeric_limits::infinity(), sourceValues[endIndex] }; - RiaInterpolationTools::interpolateMissingValues( xs, ys ); + RigInterpolationTools::interpolateMissingValues( xs, ys ); value = ys[1]; } @@ -380,7 +380,7 @@ bool RimStimPlanModelPressureCalculator::extractPressureDataFromTable( RiaDefine if ( needsExtrapolation ) { - RiaInterpolationTools::interpolateMissingValues( tvDepthValues, values ); + RigInterpolationTools::interpolateMissingValues( tvDepthValues, values ); } // Interpolate MDs from the tvd data from the table and well path geometry @@ -585,7 +585,7 @@ double RimStimPlanModelPressureCalculator::interpolatePressure( const DepthValue // Interpolate a value for the given tvd std::vector xs = { startDepth, depth, endDepth }; std::vector ys = { startValue, std::numeric_limits::infinity(), endValue }; - RiaInterpolationTools::interpolateMissingValues( xs, ys ); + RigInterpolationTools::interpolateMissingValues( xs, ys ); double value = ys[1]; RiaLogging::info( QString( "Interpolating initial pressure from %1 depth/value pairs (EQLNUM: %2, TVD: %3)." diff --git a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelStressCalculator.cpp b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelStressCalculator.cpp index 2892a057890..354adbf4d77 100644 --- a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelStressCalculator.cpp +++ b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelStressCalculator.cpp @@ -19,9 +19,9 @@ #include "RiaDefines.h" #include "RiaEclipseUnitTools.h" -#include "RiaInterpolationTools.h" #include "RiaLogging.h" #include "RiaStimPlanModelDefines.h" +#include "RigInterpolationTools.h" #include "RigEclipseCaseData.h" #include "Well/RigEclipseWellLogExtractor.h" @@ -134,7 +134,7 @@ bool RimStimPlanModelStressCalculator::calculate( RiaDefines::CurveProperty curv measuredDepthValues.clear(); for ( double tvd : tvDepthValues ) { - double md = RiaInterpolationTools::linear( tvdValuesOfWellPath, mdValuesOfWellPath, tvd ); + double md = RigInterpolationTools::linear( tvdValuesOfWellPath, mdValuesOfWellPath, tvd ); measuredDepthValues.push_back( md ); } CVF_ASSERT( measuredDepthValues.size() == tvDepthValues.size() ); diff --git a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelWellLogCalculator.cpp b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelWellLogCalculator.cpp index 2fd8e92d835..33f9236ccef 100644 --- a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelWellLogCalculator.cpp +++ b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelWellLogCalculator.cpp @@ -18,9 +18,9 @@ #include "RimStimPlanModelWellLogCalculator.h" #include "RiaDefines.h" -#include "RiaInterpolationTools.h" #include "RiaLogging.h" #include "RiaStimPlanModelDefines.h" +#include "RigInterpolationTools.h" #include "RigActiveCellInfo.h" #include "RigCaseCellResultsData.h" @@ -141,7 +141,7 @@ bool RimStimPlanModelWellLogCalculator::calculate( RiaDefines::CurveProperty cur } else if ( strategy == RimStimPlanModel::MissingValueStrategy::LINEAR_INTERPOLATION ) { - RiaInterpolationTools::interpolateMissingValues( measuredDepthValues, values ); + RigInterpolationTools::interpolateMissingValues( measuredDepthValues, values ); } else if ( strategy == RimStimPlanModel::MissingValueStrategy::OTHER_CURVE_PROPERTY ) { diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogStatisticsCurve.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogStatisticsCurve.cpp index 6c1be53a0da..5e105443f69 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogStatisticsCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogStatisticsCurve.cpp @@ -20,8 +20,8 @@ #include "RiaApplication.h" #include "RiaDefines.h" -#include "RiaInterpolationTools.h" #include "RiaLogging.h" +#include "RigInterpolationTools.h" #include "RimEnsembleWellLogCurveSet.h" #include "RimWellLogTrack.h" diff --git a/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake b/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake index d25a903369c..d3d150c2bbc 100644 --- a/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake +++ b/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake @@ -30,6 +30,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RigElasticProperties.h ${CMAKE_CURRENT_LIST_DIR}/RigEnsembleFractureStatisticsCalculator.h ${CMAKE_CURRENT_LIST_DIR}/RigEnsembleParameter.h + ${CMAKE_CURRENT_LIST_DIR}/RigInterpolationTools.h ${CMAKE_CURRENT_LIST_DIR}/RigEquil.h ${CMAKE_CURRENT_LIST_DIR}/RigFault.h ${CMAKE_CURRENT_LIST_DIR}/RigFaultReactivationModel.h @@ -123,6 +124,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RigElasticProperties.cpp ${CMAKE_CURRENT_LIST_DIR}/RigEnsembleFractureStatisticsCalculator.cpp ${CMAKE_CURRENT_LIST_DIR}/RigEnsembleParameter.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigInterpolationTools.cpp ${CMAKE_CURRENT_LIST_DIR}/RigEquil.cpp ${CMAKE_CURRENT_LIST_DIR}/RigFault.cpp ${CMAKE_CURRENT_LIST_DIR}/RigFaultReactivationModel.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.cpp b/ApplicationLibCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.cpp index 78ceaa2f71d..4f95ebdea82 100644 --- a/ApplicationLibCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.cpp +++ b/ApplicationLibCode/ReservoirDataModel/Completions/RigTransmissibilityCondenser.cpp @@ -400,8 +400,8 @@ void RigTransmissibilityCondenser::calculateCondensedTransmissibilities() } #include "RigFractureCell.h" +#include "RigFractureGrid.h" #include "RigMainGrid.h" -#include "RimStimPlanFractureTemplate.h" void printCellAddress( std::stringstream& str, const RigMainGrid* mainGrid, diff --git a/ApplicationLibCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.cpp b/ApplicationLibCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.cpp index 6d433df5c17..f2e7498aefc 100644 --- a/ApplicationLibCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.cpp +++ b/ApplicationLibCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.cpp @@ -23,10 +23,6 @@ #include "RigFractureGrid.h" #include "Well/RigWellPath.h" -#include "RimFracture.h" -#include "RimFractureTemplate.h" -#include "RimStimPlanFractureTemplate.h" - #include "cvfMath.h" #include @@ -34,24 +30,20 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RigWellPathStimplanIntersector::RigWellPathStimplanIntersector( const std::vector& wellPathPoints, - gsl::not_null rimFracture ) +RigWellPathStimplanIntersector::RigWellPathStimplanIntersector( const std::vector& wellPathPoints, + const cvf::Mat4d& fractureXf, + double wellRadius, + double perforationLength, + const RigFractureGrid* fractureGrid ) { - cvf::Mat4d fractureXf = rimFracture->transformMatrix(); - double wellRadius = rimFracture->wellRadius(); - std::vector> fractureGridCellPolygons; + if ( fractureGrid ) { - if ( rimFracture->fractureGrid() ) + for ( const auto& stpCell : fractureGrid->fractureCells() ) { - const std::vector& stpCells = rimFracture->fractureGrid()->fractureCells(); - for ( const auto& stpCell : stpCells ) - { - fractureGridCellPolygons.push_back( stpCell.getPolygon() ); - } + fractureGridCellPolygons.push_back( stpCell.getPolygon() ); } } - double perforationLength = rimFracture->perforationLength(); calculate( fractureXf, wellPathPoints, wellRadius, perforationLength, fractureGridCellPolygons, m_stimPlanCellIdxToIntersectionInfoMap ); } diff --git a/ApplicationLibCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.h b/ApplicationLibCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.h index 973b299845e..a157e052ef1 100644 --- a/ApplicationLibCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.h +++ b/ApplicationLibCode/ReservoirDataModel/Completions/RigWellPathStimplanIntersector.h @@ -20,13 +20,10 @@ #include "cvfMatrix4.h" -#include - #include #include -class RigWellPath; -class RimFracture; +class RigFractureGrid; class RigWellPathStimplanIntersectorTester; //-------------------------------------------------------------------------------------------------- @@ -50,7 +47,11 @@ class RigWellPathStimplanIntersector double computeLength() const { return cvf::Math::sqrt( hlength * hlength + vlength * vlength ); } }; - RigWellPathStimplanIntersector( const std::vector& wellPathPoints, gsl::not_null rimFracture ); + RigWellPathStimplanIntersector( const std::vector& wellPathPoints, + const cvf::Mat4d& fractureXf, + double wellRadius, + double perforationLength, + const RigFractureGrid* fractureGrid ); const std::map& intersections() const; diff --git a/ApplicationLibCode/ReservoirDataModel/RigElasticProperties.cpp b/ApplicationLibCode/ReservoirDataModel/RigElasticProperties.cpp index b3c892746e0..2eea467cd7c 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigElasticProperties.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigElasticProperties.cpp @@ -18,7 +18,7 @@ #include "RigElasticProperties.h" -#include "RiaInterpolationTools.h" +#include "RigInterpolationTools.h" #include "cafAssert.h" @@ -158,6 +158,6 @@ std::pair RigElasticProperties::getValueForPorosity( RiaDefines::C } bool isExtrapolated = porosity > porosityMax() || porosity < porosityMin(); - double value = RiaInterpolationTools::linear( m_porosity, scaledValues, porosity, RiaInterpolationTools::ExtrapolationMode::CLOSEST ); + double value = RigInterpolationTools::linear( m_porosity, scaledValues, porosity, RigInterpolationTools::ExtrapolationMode::CLOSEST ); return std::make_pair( value, isExtrapolated ); } diff --git a/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationEnums.h b/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationEnums.h new file mode 100644 index 00000000000..c622bc4df3e --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationEnums.h @@ -0,0 +1,55 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2023 Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +namespace RigFaultReactivation +{ + +enum class GridPart +{ + FW, // footwall + HW // hanging wall +}; + +enum class BorderSurface +{ + UpperSurface, + FaultSurface, + LowerSurface, + Seabed +}; + +enum class Boundary +{ + FarSide, + Bottom, + Fault, + Reservoir +}; + +enum class ElementSets +{ + OverBurden, + UnderBurden, + Reservoir, + IntraReservoir, + FaultZone +}; + +} // namespace RigFaultReactivation diff --git a/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModel.cpp b/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModel.cpp index bf34be9ae84..942726b79af 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModel.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModel.cpp @@ -19,11 +19,9 @@ #include "RigFaultReactivationModel.h" #include "RigActiveCellInfo.h" -#include "RigEclipseCaseData.h" #include "RigFaultReactivationModelGenerator.h" #include "RigGriddedPart3d.h" - -#include "RimEclipseCase.h" +#include "RigMainGrid.h" #include @@ -69,7 +67,7 @@ RigFaultReactivationModel::~RigFaultReactivationModel() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::vector RigFaultReactivationModel::allGridParts() const +std::vector RigFaultReactivationModel::allGridParts() const { return { GridPart::FW, GridPart::HW }; } @@ -210,7 +208,7 @@ cvf::ref RigFaultReactivationModel::texture( int part ) const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -const std::vector>& RigFaultReactivationModel::meshLines( RimFaultReactivation::GridPart part ) const +const std::vector>& RigFaultReactivationModel::meshLines( RigFaultReactivation::GridPart part ) const { return m_3dparts.at( part )->meshLines(); } @@ -218,7 +216,7 @@ const std::vector>& RigFaultReactivationModel::meshLines //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -const RigGriddedPart3d* RigFaultReactivationModel::grid( RimFaultReactivation::GridPart part ) const +const RigGriddedPart3d* RigFaultReactivationModel::grid( RigFaultReactivation::GridPart part ) const { return m_3dparts.at( part ); } @@ -254,7 +252,7 @@ std::pair RigFaultReactivationModel::depthTopBottom() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RimFaultReactivation::GridPart RigFaultReactivationModel::normalPointsAt() const +RigFaultReactivation::GridPart RigFaultReactivationModel::normalPointsAt() const { return m_normalPointsAt; } @@ -262,15 +260,13 @@ RimFaultReactivation::GridPart RigFaultReactivationModel::normalPointsAt() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigFaultReactivationModel::postProcessElementSets( const RimEclipseCase* eCase ) +void RigFaultReactivationModel::postProcessElementSets( const RigMainGrid* mainGrid, const RigActiveCellInfo* cellInfo ) { - if ( eCase->eclipseCaseData() == nullptr ) return; - - auto cellInfo = eCase->eclipseCaseData()->activeCellInfo( RiaDefines::PorosityModelType::MATRIX_MODEL ); + if ( mainGrid == nullptr || cellInfo == nullptr ) return; for ( auto part : allGridParts() ) { auto gridPart = m_3dparts[part]; - gridPart->postProcessElementSets( eCase->mainGrid(), cellInfo ); + gridPart->postProcessElementSets( mainGrid, cellInfo ); } } diff --git a/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModel.h b/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModel.h index 416b872c2bc..dd937be1cff 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModel.h +++ b/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModel.h @@ -18,7 +18,7 @@ #pragma once -#include "RimFaultReactivationEnums.h" +#include "RigFaultReactivationEnums.h" #include "cvfArray.h" #include "cvfColor3.h" @@ -34,9 +34,10 @@ #include #include +class RigActiveCellInfo; class RigGriddedPart3d; class RigFaultReactivationModelGenerator; -class RimEclipseCase; +class RigMainGrid; class RigFRModelPart { @@ -54,7 +55,7 @@ class RigFRModelPart //================================================================================================== class RigFaultReactivationModel : public cvf::Object { - using GridPart = RimFaultReactivation::GridPart; + using GridPart = RigFaultReactivation::GridPart; public: RigFaultReactivationModel(); @@ -85,9 +86,9 @@ class RigFaultReactivationModel : public cvf::Object const std::pair faultTopBottom() const; std::pair depthTopBottom() const; - RimFaultReactivation::GridPart normalPointsAt() const; + RigFaultReactivation::GridPart normalPointsAt() const; - void postProcessElementSets( const RimEclipseCase* eCase ); + void postProcessElementSets( const RigMainGrid* mainGrid, const RigActiveCellInfo* cellInfo ); private: std::shared_ptr m_generator; @@ -98,5 +99,5 @@ class RigFaultReactivationModel : public cvf::Object bool m_isValid; std::map m_3dparts; - RimFaultReactivation::GridPart m_normalPointsAt; + RigFaultReactivation::GridPart m_normalPointsAt; }; diff --git a/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModelGenerator.cpp b/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModelGenerator.cpp index 8530dd74b48..b84ac5ebfe1 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModelGenerator.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModelGenerator.cpp @@ -18,20 +18,12 @@ #include "RigFaultReactivationModelGenerator.h" -#include "RiaApplication.h" - #include "RigActiveCellInfo.h" #include "RigCell.h" #include "RigFault.h" #include "RigGriddedPart3d.h" #include "RigMainGrid.h" -#include "RimCellFilterCollection.h" -#include "RimEclipseCase.h" -#include "RimEclipseView.h" -#include "RimGridView.h" -#include "RimUserDefinedIndexFilter.h" - #include "cafHexGridIntersectionTools/cafHexGridIntersectionTools.h" //-------------------------------------------------------------------------------------------------- @@ -237,25 +229,6 @@ size_t RigFaultReactivationModelGenerator::oppositeStartCellIndex( const std::ve return oppositeCellIdx; } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RigFaultReactivationModelGenerator::updateFilters( std::vector cellsFront, std::vector cellsBack ) -{ - RimEclipseView* view = dynamic_cast( RiaApplication::instance()->activeGridView() ); - if ( view == nullptr ) return; - - auto cellFilters = view->cellFilterCollection(); - if ( cellFilters == nullptr ) return; - - auto eCase = cellFilters->firstAncestorOfType(); - auto frontFilter = cellFilters->addNewUserDefinedIndexFilter( eCase, cellsFront ); - frontFilter->setName( "Front" ); - - auto backFilter = cellFilters->addNewUserDefinedIndexFilter( eCase, cellsBack ); - backFilter->setName( "Back" ); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModelGenerator.h b/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModelGenerator.h index 3c8618a30c4..f44c7033e6f 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModelGenerator.h +++ b/ApplicationLibCode/ReservoirDataModel/RigFaultReactivationModelGenerator.h @@ -85,8 +85,6 @@ class RigFaultReactivationModelGenerator : cvf::Object std::vector buildCellColumn( size_t startCell, FaceType startFace, std::map& layers ); - void updateFilters( std::vector frontCells, std::vector backCells ); - size_t oppositeStartCellIndex( const std::vector cellIndexColumn, FaceType face ); void generatePointsFrontBack(); diff --git a/ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp b/ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp index a105b4f52e0..9abe1fbe395 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigFlowDiagResults.cpp @@ -25,10 +25,10 @@ #include "RigFlowDiagTimeStepResult.h" #include "RigMainGrid.h" +#include "RiaLogging.h" #include "RigFlowDiagResultFrames.h" #include "RigNumberOfFloodedPoreVolumesCalculator.h" #include "RigStatisticsDataCache.h" -#include "RimEclipseCase.h" #include "RimEclipseResultCase.h" #include "RimFlowDiagSolution.h" @@ -432,13 +432,29 @@ std::vector* RigFlowDiagResults::calculateCommunicationResult( const Rig //-------------------------------------------------------------------------------------------------- void RigFlowDiagResults::calculateNumFloodedPV( const RigFlowDiagResultAddress& resVarAddr ) { - auto eclipseCase = m_flowDiagSolution->firstAncestorOrThisOfTypeAsserted(); + auto eclCase = m_flowDiagSolution->firstAncestorOrThisOfType(); + if ( !eclCase ) + { + RiaLogging::warning( + "calculateNumFloodedPV: Could not find RimEclipseResultCase ancestor. Water Flooded PV result will be missing." ); + return; + } + + auto* eclipseCaseData = eclCase->eclipseCaseData(); + auto* gridCellResults = eclCase->results( RiaDefines::PorosityModelType::MATRIX_MODEL ); + if ( !eclipseCaseData || !gridCellResults ) + { + RiaLogging::warning( "calculateNumFloodedPV: Eclipse case data is not loaded. Water Flooded PV result will be missing." ); + return; + } + std::vector tracerNames; for ( const std::string& tracerName : resVarAddr.selectedTracerNames ) { tracerNames.push_back( QString::fromUtf8( tracerName.c_str() ) ); } - RigNumberOfFloodedPoreVolumesCalculator calc( eclipseCase, tracerNames ); + RigNumberOfFloodedPoreVolumesCalculator + calc( eclipseCaseData, gridCellResults, [eclCase]( size_t idx ) { return eclCase->uiToNativeTimeStepIndex( idx ); }, tracerNames ); RigFlowDiagResultFrames* frames = createScalarResult( resVarAddr ); for ( size_t frameIdx = 0; frameIdx < m_timeStepCount; ++frameIdx ) diff --git a/ApplicationLibCode/ReservoirDataModel/RigGriddedPart3d.cpp b/ApplicationLibCode/ReservoirDataModel/RigGriddedPart3d.cpp index 82f4f90fadb..05b69c9dd35 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigGriddedPart3d.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigGriddedPart3d.cpp @@ -21,9 +21,6 @@ #include "RigActiveCellInfo.h" #include "RigMainGrid.h" -#include "RimFaultReactivationDataAccess.h" -#include "RimFaultReactivationEnums.h" - #include "cvfBoundingBox.h" #include "cvfPlane.h" #include "cvfTextureImage.h" @@ -365,10 +362,10 @@ void RigGriddedPart3d::generateGeometry( const std::array& in m_elementIndices.resize( (size_t)( ( nVertCells - 1 ) * nHorzCells * nThicknessCells ) ); - m_borderSurfaceElements[RimFaultReactivation::BorderSurface::Seabed] = {}; - m_borderSurfaceElements[RimFaultReactivation::BorderSurface::UpperSurface] = {}; - m_borderSurfaceElements[RimFaultReactivation::BorderSurface::FaultSurface] = {}; - m_borderSurfaceElements[RimFaultReactivation::BorderSurface::LowerSurface] = {}; + m_borderSurfaceElements[RigFaultReactivation::BorderSurface::Seabed] = {}; + m_borderSurfaceElements[RigFaultReactivation::BorderSurface::UpperSurface] = {}; + m_borderSurfaceElements[RigFaultReactivation::BorderSurface::FaultSurface] = {}; + m_borderSurfaceElements[RigFaultReactivation::BorderSurface::LowerSurface] = {}; m_elementSets[ElementSets::OverBurden] = {}; m_elementSets[ElementSets::Reservoir] = {}; @@ -388,7 +385,7 @@ void RigGriddedPart3d::generateGeometry( const std::array& in const int nVertCellsFault = (int)( layersPerRegion[Regions::UpperUnderburden].size() + layersPerRegion[Regions::Reservoir].size() + layersPerRegion[Regions::LowerOverburden].size() ); - RimFaultReactivation::BorderSurface currentSurfaceRegion = RimFaultReactivation::BorderSurface::LowerSurface; + RigFaultReactivation::BorderSurface currentSurfaceRegion = RigFaultReactivation::BorderSurface::LowerSurface; const int nextLayerIdxOff = ( (int)nHorzCells + 1 ) * ( nThicknessCells + 1 ); const int nThicknessOff = nThicknessCells + 1; @@ -398,8 +395,8 @@ void RigGriddedPart3d::generateGeometry( const std::array& in for ( int v = 0; v < (int)nVertCells - 1; v++ ) { - if ( v >= nVertCellsLower ) currentSurfaceRegion = RimFaultReactivation::BorderSurface::FaultSurface; - if ( v >= nVertCellsLower + nVertCellsFault ) currentSurfaceRegion = RimFaultReactivation::BorderSurface::UpperSurface; + if ( v >= nVertCellsLower ) currentSurfaceRegion = RigFaultReactivation::BorderSurface::FaultSurface; + if ( v >= nVertCellsLower + nVertCellsFault ) currentSurfaceRegion = RigFaultReactivation::BorderSurface::UpperSurface; int i = layerIndexOffset; @@ -423,16 +420,16 @@ void RigGriddedPart3d::generateGeometry( const std::array& in } else if ( v == seaBedLayer ) { - m_borderSurfaceElements[RimFaultReactivation::BorderSurface::Seabed].push_back( elementIdx ); + m_borderSurfaceElements[RigFaultReactivation::BorderSurface::Seabed].push_back( elementIdx ); } if ( h == 0 ) { m_boundaryElements[Boundary::FarSide].push_back( elementIdx ); } - bool inFaultZone = ( currentSurfaceRegion == RimFaultReactivation::BorderSurface::FaultSurface ) && ( h > nFaultZoneStart ); + bool inFaultZone = ( currentSurfaceRegion == RigFaultReactivation::BorderSurface::FaultSurface ) && ( h > nFaultZoneStart ); - if ( inFaultZone ) m_elementSets[RimFaultReactivation::ElementSets::FaultZone].push_back( elementIdx ); + if ( inFaultZone ) m_elementSets[RigFaultReactivation::ElementSets::FaultZone].push_back( elementIdx ); } i += nThicknessOff; } @@ -611,7 +608,7 @@ std::vector RigGriddedPart3d::extractCornersForElement( const std::v //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -const std::map>& RigGriddedPart3d::borderSurfaceElements() const +const std::map>& RigGriddedPart3d::borderSurfaceElements() const { return m_borderSurfaceElements; } @@ -627,7 +624,7 @@ const std::vector>& RigGriddedPart3d::meshLines() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -const std::map>& RigGriddedPart3d::boundaryElements() const +const std::map>& RigGriddedPart3d::boundaryElements() const { return m_boundaryElements; } @@ -635,7 +632,7 @@ const std::map>& RigGr //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -const std::map>& RigGriddedPart3d::boundaryNodes() const +const std::map>& RigGriddedPart3d::boundaryNodes() const { return m_boundaryNodes; } @@ -643,7 +640,7 @@ const std::map>& RigGr //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -const std::map>& RigGriddedPart3d::elementSets() const +const std::map>& RigGriddedPart3d::elementSets() const { return m_elementSets; } diff --git a/ApplicationLibCode/ReservoirDataModel/RigGriddedPart3d.h b/ApplicationLibCode/ReservoirDataModel/RigGriddedPart3d.h index 13167d21f80..1b28d0c04ae 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigGriddedPart3d.h +++ b/ApplicationLibCode/ReservoirDataModel/RigGriddedPart3d.h @@ -18,7 +18,7 @@ #pragma once -#include "RimFaultReactivationEnums.h" +#include "RigFaultReactivationEnums.h" #include "cvfMatrix4.h" #include "cvfObject.h" @@ -40,8 +40,8 @@ class RigActiveCellInfo; //================================================================================================== class RigGriddedPart3d : public cvf::Object { - using ElementSets = RimFaultReactivation::ElementSets; - using Boundary = RimFaultReactivation::Boundary; + using ElementSets = RigFaultReactivation::ElementSets; + using Boundary = RigFaultReactivation::Boundary; public: RigGriddedPart3d(); @@ -76,7 +76,7 @@ class RigGriddedPart3d : public cvf::Object const std::vector& dataNodes() const; const std::vector>& elementIndices() const; - const std::map>& borderSurfaceElements() const; + const std::map>& borderSurfaceElements() const; const std::vector>& meshLines() const; const std::map>& boundaryElements() const; @@ -129,7 +129,7 @@ class RigGriddedPart3d : public cvf::Object std::vector m_dataNodes; std::vector m_localNodes; std::vector> m_elementIndices; - std::map> m_borderSurfaceElements; + std::map> m_borderSurfaceElements; std::vector> m_meshLines; std::map> m_boundaryElements; std::map> m_boundaryNodes; diff --git a/ApplicationLibCode/Application/Tools/RiaInterpolationTools.cpp b/ApplicationLibCode/ReservoirDataModel/RigInterpolationTools.cpp similarity index 92% rename from ApplicationLibCode/Application/Tools/RiaInterpolationTools.cpp rename to ApplicationLibCode/ReservoirDataModel/RigInterpolationTools.cpp index e6ddfdd6df7..0babf755633 100644 --- a/ApplicationLibCode/Application/Tools/RiaInterpolationTools.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigInterpolationTools.cpp @@ -16,7 +16,7 @@ // ///////////////////////////////////////////////////////////////////////////////// -#include "RiaInterpolationTools.h" +#include "RigInterpolationTools.h" #include "cafAssert.h" @@ -42,7 +42,7 @@ bool almostEqual( double a, double b, double maxRelDiff = std::numeric_limits& x, const std::vector& y, double value, ExtrapolationMode extrapolationMode ) +double RigInterpolationTools::linear( const std::vector& x, const std::vector& y, double value, ExtrapolationMode extrapolationMode ) { CAF_ASSERT( x.size() == y.size() ); @@ -101,7 +101,7 @@ double RiaInterpolationTools::linear( const std::vector& x, const std::v //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -double RiaInterpolationTools::extrapolate( const std::vector& x, const std::vector& y, double value ) +double RigInterpolationTools::extrapolate( const std::vector& x, const std::vector& y, double value ) { CAF_ASSERT( x.size() == y.size() ); CAF_ASSERT( x.size() >= 2 && "Need at least two points for extrapolation" ); @@ -119,7 +119,7 @@ double RiaInterpolationTools::extrapolate( const std::vector& x, const s //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -double RiaInterpolationTools::extrapolate( double x0, double y0, double x1, double y1, double value ) +double RigInterpolationTools::extrapolate( double x0, double y0, double x1, double y1, double value ) { return y0 + ( value - x0 ) / ( x1 - x0 ) * ( y1 - y0 ); } @@ -127,7 +127,7 @@ double RiaInterpolationTools::extrapolate( double x0, double y0, double x1, doub //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -double RiaInterpolationTools::extrapolateClosestValue( const std::vector& x, const std::vector& y, double value ) +double RigInterpolationTools::extrapolateClosestValue( const std::vector& x, const std::vector& y, double value ) { if ( value <= x[0] ) return y[0]; @@ -138,7 +138,7 @@ double RiaInterpolationTools::extrapolateClosestValue( const std::vector //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -int RiaInterpolationTools::findNextDataPoint( const std::vector& values, int index ) +int RigInterpolationTools::findNextDataPoint( const std::vector& values, int index ) { for ( size_t i = index; i < values.size(); i++ ) { @@ -151,7 +151,7 @@ int RiaInterpolationTools::findNextDataPoint( const std::vector& values, //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -int RiaInterpolationTools::findPreviousDataPoint( const std::vector& values, int index ) +int RigInterpolationTools::findPreviousDataPoint( const std::vector& values, int index ) { CAF_ASSERT( index >= 0 ); @@ -166,7 +166,7 @@ int RiaInterpolationTools::findPreviousDataPoint( const std::vector& val //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -int RiaInterpolationTools::extrapolateRange( int start, int end, int firstPoint, int lastPoint, const std::vector& x, std::vector& y ) +int RigInterpolationTools::extrapolateRange( int start, int end, int firstPoint, int lastPoint, const std::vector& x, std::vector& y ) { std::vector xs = { x[firstPoint], x[lastPoint] }; std::vector ys = { y[firstPoint], y[lastPoint] }; @@ -185,7 +185,7 @@ int RiaInterpolationTools::extrapolateRange( int start, int end, int firstPoint, //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -int RiaInterpolationTools::interpolateRange( int start, int end, int firstPoint, int lastPoint, const std::vector& x, std::vector& y ) +int RigInterpolationTools::interpolateRange( int start, int end, int firstPoint, int lastPoint, const std::vector& x, std::vector& y ) { CAF_ASSERT( start <= end ); @@ -193,7 +193,7 @@ int RiaInterpolationTools::interpolateRange( int start, int end, int firstPoint, std::vector ys = { y[firstPoint], y[lastPoint] }; for ( int index = start; index < end; index++ ) { - y[index] = RiaInterpolationTools::linear( xs, ys, x[index] ); + y[index] = RigInterpolationTools::linear( xs, ys, x[index] ); } return end; @@ -202,7 +202,7 @@ int RiaInterpolationTools::interpolateRange( int start, int end, int firstPoint, //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiaInterpolationTools::interpolateMissingValues( const std::vector& x, std::vector& y ) +void RigInterpolationTools::interpolateMissingValues( const std::vector& x, std::vector& y ) { CAF_ASSERT( x.size() == y.size() ); diff --git a/ApplicationLibCode/Application/Tools/RiaInterpolationTools.h b/ApplicationLibCode/ReservoirDataModel/RigInterpolationTools.h similarity index 98% rename from ApplicationLibCode/Application/Tools/RiaInterpolationTools.h rename to ApplicationLibCode/ReservoirDataModel/RigInterpolationTools.h index c126bd4e6ae..662ebfb29e1 100644 --- a/ApplicationLibCode/Application/Tools/RiaInterpolationTools.h +++ b/ApplicationLibCode/ReservoirDataModel/RigInterpolationTools.h @@ -23,7 +23,7 @@ //================================================================================================== // //================================================================================================== -class RiaInterpolationTools +class RigInterpolationTools { public: enum class ExtrapolationMode diff --git a/ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.cpp b/ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.cpp index 2af38c61618..71190598a11 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.cpp @@ -29,9 +29,6 @@ #include "RigNNCData.h" #include "RigReservoirBuilderMock.h" -#include "RimEclipseCase.h" -#include "RimReservoirCellResultsStorage.h" - #include "cafProgressInfo.h" #include @@ -41,19 +38,18 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RigNumberOfFloodedPoreVolumesCalculator::RigNumberOfFloodedPoreVolumesCalculator( RimEclipseCase* caseToApply, - const std::vector& tracerNames ) +RigNumberOfFloodedPoreVolumesCalculator::RigNumberOfFloodedPoreVolumesCalculator( RigEclipseCaseData* eclipseCaseData, + RigCaseCellResultsData* gridCellResults, + std::function uiToNativeTimeStepIndex, + const std::vector& tracerNames ) { - RigMainGrid* mainGrid = caseToApply->eclipseCaseData()->mainGrid(); - - RigEclipseCaseData* eclipseCaseData = caseToApply->eclipseCaseData(); - RigCaseCellResultsData* gridCellResults = caseToApply->results( RiaDefines::PorosityModelType::MATRIX_MODEL ); + RigMainGrid* mainGrid = eclipseCaseData->mainGrid(); - RigActiveCellInfo* actCellInfo = caseToApply->eclipseCaseData()->activeCellInfo( RiaDefines::PorosityModelType::MATRIX_MODEL ); + RigActiveCellInfo* actCellInfo = eclipseCaseData->activeCellInfo( RiaDefines::PorosityModelType::MATRIX_MODEL ); size_t resultCellCount = actCellInfo->reservoirActiveCellCount(); - size_t timeStepCount = caseToApply->eclipseCaseData()->results( RiaDefines::PorosityModelType::MATRIX_MODEL )->maxTimeStepCount(); - size_t totalProgress = tracerNames.size() + 8 + timeStepCount + 2 * timeStepCount; + size_t timeStepCount = gridCellResults->maxTimeStepCount(); + size_t totalProgress = tracerNames.size() + 8 + timeStepCount + 2 * timeStepCount; caf::ProgressInfo progress( totalProgress, "Calculating number of flooded mobile pore volumes." ); progress.setProgressDescription( "Loading required results" ); // PORV @@ -111,8 +107,7 @@ RigNumberOfFloodedPoreVolumesCalculator::RigNumberOfFloodedPoreVolumesCalculator progress.incrementProgress(); - std::vector daysSinceSimulationStart = - caseToApply->eclipseCaseData()->results( RiaDefines::PorosityModelType::MATRIX_MODEL )->daysSinceSimulationStart(); + std::vector daysSinceSimulationStart = gridCellResults->daysSinceSimulationStart(); progress.incrementProgress(); @@ -121,28 +116,25 @@ RigNumberOfFloodedPoreVolumesCalculator::RigNumberOfFloodedPoreVolumesCalculator const std::vector* flowrateI = nullptr; if ( hasFlowrateI ) { - flowrateI = - &( eclipseCaseData->results( RiaDefines::PorosityModelType::MATRIX_MODEL )->cellScalarResults( flrWatIAddr, timeStep ) ); + flowrateI = &( gridCellResults->cellScalarResults( flrWatIAddr, timeStep ) ); } flowrateIatAllTimeSteps.push_back( flowrateI ); const std::vector* flowrateJ = nullptr; if ( hasFlowrateJ ) { - flowrateJ = - &( eclipseCaseData->results( RiaDefines::PorosityModelType::MATRIX_MODEL )->cellScalarResults( flrWatJAddr, timeStep ) ); + flowrateJ = &( gridCellResults->cellScalarResults( flrWatJAddr, timeStep ) ); } flowrateJatAllTimeSteps.push_back( flowrateJ ); const std::vector* flowrateK = nullptr; if ( hasFlowrateK ) { - flowrateK = - &( eclipseCaseData->results( RiaDefines::PorosityModelType::MATRIX_MODEL )->cellScalarResults( flrWatKAddr, timeStep ) ); + flowrateK = &( gridCellResults->cellScalarResults( flrWatKAddr, timeStep ) ); } flowrateKatAllTimeSteps.push_back( flowrateK ); - size_t nativeTimeStepIndex = caseToApply->uiToNativeTimeStepIndex( timeStep ); + size_t nativeTimeStepIndex = uiToNativeTimeStepIndex( timeStep ); const std::vector* connectionFlowrate = nncData->dynamicConnectionScalarResultByName( nncConnectionProperty, nativeTimeStepIndex ); flowrateNNCatAllTimeSteps.push_back( connectionFlowrate ); @@ -151,8 +143,7 @@ RigNumberOfFloodedPoreVolumesCalculator::RigNumberOfFloodedPoreVolumesCalculator std::vector summedTracerValues( resultCellCount ); for ( const RigEclipseResultAddress& tracerResAddr : tracerResAddrs ) { - const std::vector* tracerResult = - &( eclipseCaseData->results( RiaDefines::PorosityModelType::MATRIX_MODEL )->cellScalarResults( tracerResAddr, timeStep ) ); + const std::vector* tracerResult = &( gridCellResults->cellScalarResults( tracerResAddr, timeStep ) ); for ( size_t i = 0; i < summedTracerValues.size(); i++ ) { @@ -168,7 +159,7 @@ RigNumberOfFloodedPoreVolumesCalculator::RigNumberOfFloodedPoreVolumesCalculator progress.setProgressDescription( "Calculating" ); calculate( mainGrid, - caseToApply, + actCellInfo, daysSinceSimulationStart, porvResults, swcrResults, @@ -192,7 +183,7 @@ std::vector>& RigNumberOfFloodedPoreVolumesCalculator::numbe /// //-------------------------------------------------------------------------------------------------- void RigNumberOfFloodedPoreVolumesCalculator::calculate( RigMainGrid* mainGrid, - RimEclipseCase* caseToApply, + RigActiveCellInfo* actCellInfo, std::vector daysSinceSimulationStart, const std::vector* porvResultsActiveCellsOnly, const std::vector* swcrResults, @@ -204,8 +195,7 @@ void RigNumberOfFloodedPoreVolumesCalculator::calculate( RigMainGrid* std::vector> summedTracersAtAllTimesteps ) { // size_t totalNumberOfCells = mainGrid->globalCellArray().size(); - RigActiveCellInfo* actCellInfo = caseToApply->eclipseCaseData()->activeCellInfo( RiaDefines::PorosityModelType::MATRIX_MODEL ); - size_t resultCellCount = actCellInfo->reservoirActiveCellCount(); + size_t resultCellCount = actCellInfo->reservoirActiveCellCount(); caf::ProgressInfo progress( 2 * daysSinceSimulationStart.size(), "" ); @@ -228,7 +218,7 @@ void RigNumberOfFloodedPoreVolumesCalculator::calculate( RigMainGrid* if ( !flowrateI->empty() && !flowrateJ->empty() && !flowrateK->empty() ) { distributeNeighbourCellFlow( mainGrid, - caseToApply, + actCellInfo, summedTracersAtAllTimesteps[timeStep - 1], flowrateI, flowrateJ, @@ -241,7 +231,7 @@ void RigNumberOfFloodedPoreVolumesCalculator::calculate( RigMainGrid* if ( flowrateNNC && !flowrateNNC->empty() ) { - distributeNNCflow( connections, caseToApply, summedTracersAtAllTimesteps[timeStep - 1], flowrateNNC, totoalFlowrateIntoCell ); + distributeNNCflow( connections, actCellInfo, summedTracersAtAllTimesteps[timeStep - 1], flowrateNNC, totoalFlowrateIntoCell ); } std::vector CellQwIn( resultCellCount ); @@ -288,13 +278,11 @@ void RigNumberOfFloodedPoreVolumesCalculator::calculate( RigMainGrid* /// //-------------------------------------------------------------------------------------------------- void RigNumberOfFloodedPoreVolumesCalculator::distributeNNCflow( const RigConnectionContainer& connections, - RimEclipseCase* caseToApply, + RigActiveCellInfo* actCellInfo, const std::vector& summedTracerValues, const std::vector* flowrateNNC, std::vector& flowrateIntoCell ) { - RigActiveCellInfo* actCellInfo = caseToApply->eclipseCaseData()->activeCellInfo( RiaDefines::PorosityModelType::MATRIX_MODEL ); - // Find max count for connections with result. Allen results introduce connections without results size_t connectionsWithResultCount = std::min( flowrateNNC->size(), connections.size() ); @@ -326,15 +314,13 @@ void RigNumberOfFloodedPoreVolumesCalculator::distributeNNCflow( const RigConnec /// //-------------------------------------------------------------------------------------------------- void RigNumberOfFloodedPoreVolumesCalculator::distributeNeighbourCellFlow( RigMainGrid* mainGrid, - RimEclipseCase* caseToApply, + RigActiveCellInfo* actCellInfo, const std::vector& summedTracerValues, const std::vector* flrWatResultI, const std::vector* flrWatResultJ, const std::vector* flrWatResultK, std::vector& totalFlowrateIntoCell ) { - RigActiveCellInfo* actCellInfo = caseToApply->eclipseCaseData()->activeCellInfo( RiaDefines::PorosityModelType::MATRIX_MODEL ); - for ( size_t globalCellIndex = 0; globalCellIndex < mainGrid->totalCellCount(); globalCellIndex++ ) { if ( !actCellInfo->isActive( ReservoirCellIndex( globalCellIndex ) ) ) continue; diff --git a/ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.h b/ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.h index eba709e23ba..8f2e3c864e7 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.h +++ b/ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.h @@ -23,9 +23,12 @@ #include #include #include +#include #include -class RimEclipseCase; +class RigActiveCellInfo; +class RigCaseCellResultsData; +class RigEclipseCaseData; class RigMainGrid; //================================================================================================== @@ -35,7 +38,10 @@ class RigMainGrid; class RigNumberOfFloodedPoreVolumesCalculator { public: - explicit RigNumberOfFloodedPoreVolumesCalculator( RimEclipseCase* caseToApply, const std::vector& tracerNames ); + explicit RigNumberOfFloodedPoreVolumesCalculator( RigEclipseCaseData* eclipseCaseData, + RigCaseCellResultsData* gridCellResults, + std::function uiToNativeTimeStepIndex, + const std::vector& tracerNames ); // Used to "steal" the data from this one using swap @@ -43,7 +49,7 @@ class RigNumberOfFloodedPoreVolumesCalculator private: void calculate( RigMainGrid* mainGrid, - RimEclipseCase* caseToApply, + RigActiveCellInfo* actCellInfo, std::vector daysSinceSimulationStart, const std::vector* porvResults, const std::vector* scwrResults, @@ -55,13 +61,13 @@ class RigNumberOfFloodedPoreVolumesCalculator std::vector> summedTracersAtAllTimesteps ); void distributeNNCflow( const RigConnectionContainer& connections, - RimEclipseCase* caseToApply, + RigActiveCellInfo* actCellInfo, const std::vector& summedTracerValues, const std::vector* flowrateNNC, std::vector& flowrateIntoCell ); void distributeNeighbourCellFlow( RigMainGrid* mainGrid, - RimEclipseCase* caseToApply, + RigActiveCellInfo* actCellInfo, const std::vector& summedTracerValues, const std::vector* flrWatResultI, const std::vector* flrWatResultJ, diff --git a/ApplicationLibCode/ReservoirDataModel/Well/RigMswCenterLineCalculator.cpp b/ApplicationLibCode/ReservoirDataModel/Well/RigMswCenterLineCalculator.cpp index ca17c4b7579..c6d93865191 100644 --- a/ApplicationLibCode/ReservoirDataModel/Well/RigMswCenterLineCalculator.cpp +++ b/ApplicationLibCode/ReservoirDataModel/Well/RigMswCenterLineCalculator.cpp @@ -27,50 +27,15 @@ #include "RigSimWellData.h" #include "RigWellResultFrame.h" -#include "RimEclipseCase.h" -#include "RimEclipseResultCase.h" -#include "RimEclipseView.h" -#include "RimSimWellInView.h" -#include "RimSimWellInViewCollection.h" - #include "cvfRay.h" //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::vector RigMswCenterLineCalculator::calculateMswWellPipeGeometry( const RimSimWellInView* rimWell ) -{ - CVF_ASSERT( rimWell ); - - const RigSimWellData* simWellData = rimWell->simWellData(); - if ( !simWellData ) return {}; - - auto eclipseView = rimWell->firstAncestorOrThisOfTypeAsserted(); - if ( eclipseView->eclipseCase() && eclipseView->eclipseCase()->eclipseCaseData() ) - { - auto eclipseCaseData = eclipseView->eclipseCase()->eclipseCaseData(); - int timeStepIndex = eclipseView->currentTimeStep(); - - int shortBranchMergeThreshold = 4; - if ( auto eclipseResultCase = dynamic_cast( eclipseView->eclipseCase() ) ) - { - shortBranchMergeThreshold = eclipseResultCase->mswMergeThreshold(); - } - - return calculateMswWellPipeGeometryForTimeStep( eclipseCaseData, simWellData, timeStepIndex, shortBranchMergeThreshold ); - } - - return {}; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -std::vector - RigMswCenterLineCalculator::calculateMswWellPipeGeometryForTimeStep( const RigEclipseCaseData* eclipseCaseData, - const RigSimWellData* wellResults, - int timeStepIndex, - int shortBranchMergeThreshold ) +std::vector RigMswCenterLineCalculator::calculateMswWellPipeGeometry( const RigEclipseCaseData* eclipseCaseData, + const RigSimWellData* wellResults, + int timeStepIndex, + int shortBranchMergeThreshold ) { const RigWellResultFrame* wellFramePtr = nullptr; diff --git a/ApplicationLibCode/ReservoirDataModel/Well/RigMswCenterLineCalculator.h b/ApplicationLibCode/ReservoirDataModel/Well/RigMswCenterLineCalculator.h index 747fdd5da6f..f05c7107cd0 100644 --- a/ApplicationLibCode/ReservoirDataModel/Well/RigMswCenterLineCalculator.h +++ b/ApplicationLibCode/ReservoirDataModel/Well/RigMswCenterLineCalculator.h @@ -26,7 +26,6 @@ #include class RigEclipseCaseData; -class RimSimWellInView; class RigSimWellData; //-------------------------------------------------------------------------------------------------- @@ -35,7 +34,10 @@ class RigSimWellData; class RigMswCenterLineCalculator { public: - static std::vector calculateMswWellPipeGeometry( const RimSimWellInView* rimWell ); + static std::vector calculateMswWellPipeGeometry( const RigEclipseCaseData* eclipseCaseData, + const RigSimWellData* simWellData, + int timeStepIndex, + int shortBranchMergeThreshold ); private: struct OutputSegment @@ -67,11 +69,6 @@ class RigMswCenterLineCalculator }; private: - static std::vector calculateMswWellPipeGeometryForTimeStep( const RigEclipseCaseData* eclipseCaseData, - const RigSimWellData* simWellData, - int timeStepIndex, - int shortBranchMergeThreshold ); - static SimulationWellCellBranch addCoordsAtCellFaceIntersectionsAndCreateBranch( const std::vector branchCoords, const std::vector& resultPoints, const RigEclipseCaseData* eclipseCaseData ); diff --git a/ApplicationLibCode/ReservoirDataModel/Well/RigSimulationWellCenterLineCalculator.cpp b/ApplicationLibCode/ReservoirDataModel/Well/RigSimulationWellCenterLineCalculator.cpp index 120f03357d1..8e4826cc647 100644 --- a/ApplicationLibCode/ReservoirDataModel/Well/RigSimulationWellCenterLineCalculator.cpp +++ b/ApplicationLibCode/ReservoirDataModel/Well/RigSimulationWellCenterLineCalculator.cpp @@ -28,11 +28,6 @@ #include "RigSimWellData.h" #include "RigWellResultFrame.h" -#include "RimEclipseCase.h" -#include "RimEclipseView.h" -#include "RimSimWellInView.h" -#include "RimSimWellInViewCollection.h" - #include "cvfBoundingBoxTree.h" #include "cvfGeometryTools.h" #include "cvfRay.h" @@ -43,23 +38,13 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::vector RigSimulationWellCenterLineCalculator::calculateWellPipeStaticCenterline( const RimSimWellInView* rimWell ) +std::vector + RigSimulationWellCenterLineCalculator::calculateWellPipeStaticCenterline( const RigEclipseCaseData* eclipseCaseData, + const RigSimWellData* simWellData, + bool isAutoDetectBranches, + bool useAllCellCenters ) { - std::vector> pipeBranchesCLCoords; - std::vector> pipeBranchesCellIds; - - calculateWellPipeStaticCenterline( rimWell, pipeBranchesCLCoords, pipeBranchesCellIds ); - - std::vector simuationBranches; - for ( size_t i = 0; i < pipeBranchesCLCoords.size(); i++ ) - { - if ( i < pipeBranchesCellIds.size() ) - { - simuationBranches.emplace_back( std::make_pair( pipeBranchesCLCoords[i], pipeBranchesCellIds[i] ) ); - } - } - - return simuationBranches; + return calculateWellPipeCenterlineForTimeStep( eclipseCaseData, simWellData, -1, isAutoDetectBranches, useAllCellCenters ); } //-------------------------------------------------------------------------------------------------- @@ -113,80 +98,6 @@ std::pair>, std::vector>& pipeBranchesCLCoords, - std::vector>& pipeBranchesCellIds ) -{ - CVF_ASSERT( rimWell ); - - const RigSimWellData* simWellData = rimWell->simWellData(); - if ( !simWellData ) return; - - auto eclipseView = rimWell->firstAncestorOrThisOfTypeAsserted(); - - RigEclipseCaseData* eclipseCaseData = eclipseView->eclipseCase()->eclipseCaseData(); - bool isAutoDetectBranches = eclipseView->wellCollection()->isAutoDetectingBranches(); - - bool useAllCellCenters = rimWell->isUsingCellCenterForPipe(); - int timeStepIndex = -1; - - calculateWellPipeCenterlineForTimeStep( eclipseCaseData, - simWellData, - timeStepIndex, - isAutoDetectBranches, - useAllCellCenters, - pipeBranchesCLCoords, - pipeBranchesCellIds ); - - // DEBUG output, please keep code - bool printDebug = false; - if ( printDebug ) - { - QString txt; - - for ( size_t idx = 0; idx < pipeBranchesCellIds.size(); idx++ ) - { - const auto& branchCells = pipeBranchesCellIds[idx]; - for ( const auto& resultPoint : branchCells ) - { - QString myTxt; - int fieldWidth = 3; - myTxt += QString( "Ri branch index: %1 " ).arg( idx, fieldWidth ); - myTxt += QString( "Seg: %1 Branch: %2 " ).arg( resultPoint.segmentId(), fieldWidth ).arg( resultPoint.branchId(), fieldWidth ); - - if ( resultPoint.isCell() ) - { - size_t i = 0, j = 0, k = 0; - auto grid = eclipseCaseData->grid( resultPoint.gridIndex() ); - grid->ijkFromCellIndex( resultPoint.cellIndex(), &i, &j, &k ); - - myTxt += QString( "Grid %1 %2 %3 " ).arg( i + 1, fieldWidth ).arg( j + 1, fieldWidth ).arg( k + 1, fieldWidth ); - } - - myTxt += QString( "OutSeg: %1 OutBranch: %2 " ) - .arg( resultPoint.outletSegmentId(), fieldWidth ) - .arg( resultPoint.outletBranchId(), fieldWidth ); - - int coordFieldWidth = 12; - myTxt += QString( "Bottom pos: %1 %2 %3 " ) - .arg( resultPoint.bottomPosition().x(), coordFieldWidth ) - .arg( resultPoint.bottomPosition().y(), coordFieldWidth ) - .arg( resultPoint.bottomPosition().z(), coordFieldWidth ); - - myTxt += "\n"; - txt += myTxt; - } - } - - RiaLogging::debug( txt ); - } -} - //-------------------------------------------------------------------------------------------------- /// Based on the points and cells, calculate a pipe centerline /// The returned CellIds is one less than the number of centerline points, diff --git a/ApplicationLibCode/ReservoirDataModel/Well/RigSimulationWellCenterLineCalculator.h b/ApplicationLibCode/ReservoirDataModel/Well/RigSimulationWellCenterLineCalculator.h index 5dc2d1f72e1..d87e1a6f6f3 100644 --- a/ApplicationLibCode/ReservoirDataModel/Well/RigSimulationWellCenterLineCalculator.h +++ b/ApplicationLibCode/ReservoirDataModel/Well/RigSimulationWellCenterLineCalculator.h @@ -27,7 +27,6 @@ #include class RigEclipseCaseData; -class RimSimWellInView; class RigSimWellData; class RigWellResultFrame; @@ -37,7 +36,10 @@ class RigWellResultFrame; class RigSimulationWellCenterLineCalculator { public: - static std::vector calculateWellPipeStaticCenterline( const RimSimWellInView* rimWell ); + static std::vector calculateWellPipeStaticCenterline( const RigEclipseCaseData* eclipseCaseData, + const RigSimWellData* simWellData, + bool isAutoDetectBranches, + bool useAllCellCenters ); static std::vector calculateWellPipeCenterlineForTimeStep( const RigEclipseCaseData* eclipseCaseData, const RigSimWellData* simWellData, @@ -49,10 +51,6 @@ class RigSimulationWellCenterLineCalculator extractBranchData( const std::vector& simulationBranch ); private: - static void calculateWellPipeStaticCenterline( const RimSimWellInView* rimWell, - std::vector>& pipeBranchesCLCoords, - std::vector>& pipeBranchesCellIds ); - static void calculateWellPipeCenterlineForTimeStep( const RigEclipseCaseData* eclipseCaseData, const RigSimWellData* simWellData, int timeStepIndex, diff --git a/ApplicationLibCode/ReservoirDataModel/Well/RigWellLogCsvFile.cpp b/ApplicationLibCode/ReservoirDataModel/Well/RigWellLogCsvFile.cpp index be29154edbd..ee3c3d1a45c 100644 --- a/ApplicationLibCode/ReservoirDataModel/Well/RigWellLogCsvFile.cpp +++ b/ApplicationLibCode/ReservoirDataModel/Well/RigWellLogCsvFile.cpp @@ -18,8 +18,8 @@ #include "RigWellLogCsvFile.h" -#include "RiaInterpolationTools.h" #include "RifCsvUserDataParser.h" +#include "RigInterpolationTools.h" #include "RigWellLogCurveData.h" #include "RigWellPathGeometryTools.h" @@ -120,7 +120,7 @@ bool RigWellLogCsvFile::open( const QString& fileName, RigWellPath* wellPath, QS std::vector values; for ( auto tvd : wellPathTvds ) { - double value = RiaInterpolationTools::linear( readTvds, readValues, tvd, RiaInterpolationTools::ExtrapolationMode::TREND ); + double value = RigInterpolationTools::linear( readTvds, readValues, tvd, RigInterpolationTools::ExtrapolationMode::TREND ); values.push_back( value ); } diff --git a/ApplicationLibCode/UnitTests/RiaInterpolationTools-Test.cpp b/ApplicationLibCode/UnitTests/RiaInterpolationTools-Test.cpp index b6826bb7b30..3501543a948 100644 --- a/ApplicationLibCode/UnitTests/RiaInterpolationTools-Test.cpp +++ b/ApplicationLibCode/UnitTests/RiaInterpolationTools-Test.cpp @@ -1,6 +1,6 @@ #include "gtest/gtest.h" -#include "RiaInterpolationTools.h" +#include "RigInterpolationTools.h" #include @@ -12,7 +12,7 @@ TEST( RiaInterpolationToolsTest, LinearEmptyData ) std::vector x; std::vector y; - double res = RiaInterpolationTools::linear( x, y, 99.9 ); + double res = RigInterpolationTools::linear( x, y, 99.9 ); EXPECT_EQ( std::numeric_limits::infinity(), res ); } @@ -24,7 +24,7 @@ TEST( RiaInterpolationToolsTest, SingleValue ) std::vector x = { 1.0 }; std::vector y = { 3.0 }; - double res = RiaInterpolationTools::linear( x, y, 2.0 ); + double res = RigInterpolationTools::linear( x, y, 2.0 ); EXPECT_EQ( std::numeric_limits::infinity(), res ); } @@ -36,7 +36,7 @@ TEST( RiaInterpolationToolsTest, ValidInterval ) std::vector x = { 0.0, 1.0 }; std::vector y = { 0.0, 2.0 }; - double res = RiaInterpolationTools::linear( x, y, 0.5 ); + double res = RigInterpolationTools::linear( x, y, 0.5 ); EXPECT_DOUBLE_EQ( 1.0, res ); } @@ -48,7 +48,7 @@ TEST( RiaInterpolationToolsTest, ValidIntervalLastBin ) std::vector x = { 0.0, 1.0, 100.0, 1100.0 }; std::vector y = { 0.0, 2.0, 0.0, 2000.0 }; - double res = RiaInterpolationTools::linear( x, y, 600.0 ); + double res = RigInterpolationTools::linear( x, y, 600.0 ); EXPECT_DOUBLE_EQ( 1000.0, res ); } @@ -61,7 +61,7 @@ TEST( RiaInterpolationToolsTest, ValidIntervalValueTooLow ) std::vector y = { 0.0, 2.0 }; // Outside interval on low side - double res = RiaInterpolationTools::linear( x, y, -1.0 ); + double res = RigInterpolationTools::linear( x, y, -1.0 ); EXPECT_DOUBLE_EQ( std::numeric_limits::infinity(), res ); } @@ -74,7 +74,7 @@ TEST( RiaInterpolationToolsTest, ValidIntervalValueTooHigh ) std::vector y = { 0.0, 2.0 }; // Outside interval on high side - double res = RiaInterpolationTools::linear( x, y, 100.0 ); + double res = RigInterpolationTools::linear( x, y, 100.0 ); EXPECT_DOUBLE_EQ( std::numeric_limits::infinity(), res ); } @@ -87,7 +87,7 @@ TEST( RiaInterpolationToolsTest, ValidIntervalValueTooHighExtrapolationClosest ) std::vector y = { 0.0, 2.0 }; // Outside interval on high side - double res = RiaInterpolationTools::linear( x, y, 100.0, RiaInterpolationTools::ExtrapolationMode::CLOSEST ); + double res = RigInterpolationTools::linear( x, y, 100.0, RigInterpolationTools::ExtrapolationMode::CLOSEST ); EXPECT_DOUBLE_EQ( 2.0, res ); } @@ -100,7 +100,7 @@ TEST( RiaInterpolationToolsTest, ValidIntervalValueTooLowExtrapolationClosest ) std::vector y = { 0.0, 2.0 }; // Outside interval on low side - double res = RiaInterpolationTools::linear( x, y, -1.0, RiaInterpolationTools::ExtrapolationMode::CLOSEST ); + double res = RigInterpolationTools::linear( x, y, -1.0, RigInterpolationTools::ExtrapolationMode::CLOSEST ); EXPECT_DOUBLE_EQ( 0.0, res ); } @@ -113,7 +113,7 @@ TEST( RiaInterpolationToolsTest, ValidIntervalValueTooLowExtrapolationTrend ) std::vector y = { 0.0, 2.0 }; // Outside interval on low side - double res = RiaInterpolationTools::linear( x, y, -1.0, RiaInterpolationTools::ExtrapolationMode::TREND ); + double res = RigInterpolationTools::linear( x, y, -1.0, RigInterpolationTools::ExtrapolationMode::TREND ); EXPECT_DOUBLE_EQ( -2.0, res ); } @@ -126,7 +126,7 @@ TEST( RiaInterpolationToolsTest, ValidIntervalValueTooHighExtrapolationTrend ) std::vector y = { 0.0, 1.0, 10.0, 20.0 }; // Outside interval on low side - double res = RiaInterpolationTools::linear( x, y, 4.0, RiaInterpolationTools::ExtrapolationMode::TREND ); + double res = RigInterpolationTools::linear( x, y, 4.0, RigInterpolationTools::ExtrapolationMode::TREND ); EXPECT_DOUBLE_EQ( 30.0, res ); } @@ -139,7 +139,7 @@ TEST( RiaInterpolationToolsTest, InterpolateMissingValuesStraightLine ) std::vector x = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0 }; std::vector y = { 0.0, 1.0, inf, inf, inf, 5.0 }; - RiaInterpolationTools::interpolateMissingValues( x, y ); + RigInterpolationTools::interpolateMissingValues( x, y ); EXPECT_DOUBLE_EQ( y[2], 2.0 ); EXPECT_DOUBLE_EQ( y[3], 3.0 ); EXPECT_DOUBLE_EQ( y[4], 4.0 ); @@ -154,7 +154,7 @@ TEST( RiaInterpolationToolsTest, InterpolateMissingValuesStraightLineExtrapolate std::vector x = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0 }; std::vector y = { inf, inf, 2.0, inf, 4.0, 5.0 }; - RiaInterpolationTools::interpolateMissingValues( x, y ); + RigInterpolationTools::interpolateMissingValues( x, y ); EXPECT_DOUBLE_EQ( y[0], 0.0 ); EXPECT_DOUBLE_EQ( y[1], 1.0 ); EXPECT_DOUBLE_EQ( y[2], 2.0 ); @@ -171,7 +171,7 @@ TEST( RiaInterpolationToolsTest, InterpolateMissingValuesStraightLineExtrapolate std::vector x = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0 }; std::vector y = { 0.0, inf, 2.0, inf, 4.0, inf }; - RiaInterpolationTools::interpolateMissingValues( x, y ); + RigInterpolationTools::interpolateMissingValues( x, y ); EXPECT_DOUBLE_EQ( y[0], 0.0 ); EXPECT_DOUBLE_EQ( y[1], 1.0 ); EXPECT_DOUBLE_EQ( y[2], 2.0 ); @@ -195,7 +195,7 @@ TEST( RiaInterpolationToolsTest, InterpolateMissingValuesSmallDiffs ) 1074.7396805237802 }; std::vector y = { inf, inf, inf, inf, inf, 590.65394902812329, 590.75823974609375 }; - RiaInterpolationTools::interpolateMissingValues( x, y ); + RigInterpolationTools::interpolateMissingValues( x, y ); EXPECT_DOUBLE_EQ( y[0], 590.65394902812329 ); EXPECT_DOUBLE_EQ( y[1], 590.65394902812329 ); EXPECT_DOUBLE_EQ( y[2], 590.65394902812329 ); diff --git a/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.cpp b/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.cpp index 3f996de60ef..30d097b6396 100644 --- a/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.cpp +++ b/ApplicationLibCode/UserInterface/RiuRelativePermeabilityPlotPanel.cpp @@ -21,10 +21,10 @@ #include "RiaCurveDataTools.h" #include "RiaDefines.h" #include "RiaEclipseUnitTools.h" -#include "RiaInterpolationTools.h" #include "RiaPhaseTools.h" #include "RiaPlotDefines.h" #include "RiaResultNames.h" +#include "RigInterpolationTools.h" #include "RigFlowDiagSolverInterface.h" @@ -726,7 +726,7 @@ void RiuRelativePermeabilityPlotPanel::addCurveConstSaturationIntersectionMarker std::vector* points, std::vector* axes ) { - const double yVal = RiaInterpolationTools::linear( curve.saturationVals, curve.yVals, saturationValue ); + const double yVal = RigInterpolationTools::linear( curve.saturationVals, curve.yVals, saturationValue ); if ( yVal != HUGE_VAL ) { QwtPlotMarker* pointMarker = new QwtPlotMarker;