From 891a2e7c29d90153744ce831a074554d824853e1 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 17 Dec 2021 12:44:06 +0100 Subject: [PATCH] #8375 Flow Vectors : Avoid recomputing NNCs when accessing flow data Avoid include of RigNNCData.h in header files. --- .../FileInterface/RifReaderEclipseOutput.cpp | 3 +- .../RivElementVectorResultPartMgr.cpp | 11 +-- .../RivNNCGeometryGenerator.cpp | 6 +- .../RivReservoirFaultsPartMgr.cpp | 3 +- .../RivWellConnectionsPartMgr.cpp | 2 + .../RimFractureContainmentTools.cpp | 1 + .../ProjectDataModel/RimEclipseCase.cpp | 3 +- .../Streamlines/RimStreamlineGenerator.cpp | 2 + .../RigAccWellFlowCalculator.cpp | 2 + .../RigCaseCellResultsData.cpp | 6 +- .../RigCaseToCaseCellMapperTools.cpp | 2 + .../RigCaseToCaseRangeFilterMapper.cpp | 2 + .../RigCellFaceGeometryTools.cpp | 3 + .../ReservoirDataModel/RigMainGrid.cpp | 4 +- .../ReservoirDataModel/RigMainGrid.h | 2 +- .../ReservoirDataModel/RigNNCData.cpp | 82 ++++++++++++------- .../ReservoirDataModel/RigNNCData.h | 22 ++--- ...igNumberOfFloodedPoreVolumesCalculator.cpp | 3 +- .../RigReservoirBuilderMock.cpp | 3 +- .../SocketInterface/RiaNNCCommands.cpp | 13 +-- .../UnitTests/RigCellGeometryTools-Test.cpp | 2 + .../RiuCellAndNncPickEventHandler.cpp | 4 +- .../UserInterface/RiuResultTextBuilder.cpp | 9 +- GrpcInterface/RiaGrpcNNCPropertiesService.cpp | 7 +- 24 files changed, 124 insertions(+), 73 deletions(-) diff --git a/ApplicationLibCode/FileInterface/RifReaderEclipseOutput.cpp b/ApplicationLibCode/FileInterface/RifReaderEclipseOutput.cpp index e1dd69efa9..8ab512011f 100644 --- a/ApplicationLibCode/FileInterface/RifReaderEclipseOutput.cpp +++ b/ApplicationLibCode/FileInterface/RifReaderEclipseOutput.cpp @@ -41,6 +41,7 @@ #include "RigEclipseResultInfo.h" #include "RigEquil.h" #include "RigMainGrid.h" +#include "RigNNCData.h" #include "RigSimWellData.h" #include "RigWellResultPoint.h" @@ -769,7 +770,7 @@ void RifReaderEclipseOutput::transferStaticNNCData( const ecl_grid_type* mainEcl transmissibilityValuesTemp.push_back( transValues[nIdx] ); } - mainGrid->nncData()->setNativeConnections( nncConnections ); + mainGrid->nncData()->setEclipseConnections( nncConnections ); mainGrid->nncData()->makeScalarResultAndSetValues( RiaDefines::propertyNameCombTrans(), transmissibilityValuesTemp ); } diff --git a/ApplicationLibCode/ModelVisualization/RivElementVectorResultPartMgr.cpp b/ApplicationLibCode/ModelVisualization/RivElementVectorResultPartMgr.cpp index a8ea28a5f6..6795d3534d 100644 --- a/ApplicationLibCode/ModelVisualization/RivElementVectorResultPartMgr.cpp +++ b/ApplicationLibCode/ModelVisualization/RivElementVectorResultPartMgr.cpp @@ -29,6 +29,7 @@ #include "RigEclipseCaseData.h" #include "RigEclipseResultAddress.h" #include "RigMainGrid.h" +#include "RigNNCData.h" #include "cafDisplayCoordTransform.h" @@ -224,11 +225,11 @@ void RivElementVectorResultPartMgr::appendDynamicGeometryPartsToModel( cvf::Mode } } - RigNNCData* nncData = eclipseCaseData->mainGrid()->nncData(); - size_t numNncConnections = nncData->connections().size(); - if ( result->showNncData() ) { + RigNNCData* nncData = eclipseCaseData->mainGrid()->nncData(); + nncData->buildPolygonsForEclipseConnections(); + std::vector>*> nncResultVals; std::vector combinedAddresses; result->resultAddressesCombined( combinedAddresses ); @@ -244,9 +245,9 @@ void RivElementVectorResultPartMgr::appendDynamicGeometryPartsToModel( cvf::Mode } } - for ( size_t nIdx = 0; nIdx < numNncConnections; ++nIdx ) + for ( size_t nIdx = 0; nIdx < nncData->eclipseConnectionCount(); ++nIdx ) { - const RigConnection& conn = nncData->connections()[nIdx]; + const RigConnection& conn = nncData->eclipseConnections()[nIdx]; if ( conn.polygon().size() ) { double resultValue = 0.0; diff --git a/ApplicationLibCode/ModelVisualization/RivNNCGeometryGenerator.cpp b/ApplicationLibCode/ModelVisualization/RivNNCGeometryGenerator.cpp index c2f8f7d85d..ffba8a42df 100644 --- a/ApplicationLibCode/ModelVisualization/RivNNCGeometryGenerator.cpp +++ b/ApplicationLibCode/ModelVisualization/RivNNCGeometryGenerator.cpp @@ -76,7 +76,7 @@ void RivNNCGeometryGenerator::computeArrays() const cvf::Vec3f offset( m_offset ); long long numConnections = - static_cast( m_nncIndexes.isNull() ? m_nncData->connections().size() : m_nncIndexes->size() ); + static_cast( m_nncIndexes.isNull() ? m_nncData->allConnections().size() : m_nncIndexes->size() ); bool isVisibilityCalcActive = m_cellVisibility.notNull() && m_grid.notNull(); std::vector* allCells = nullptr; @@ -90,12 +90,12 @@ void RivNNCGeometryGenerator::computeArrays() { size_t conIdx = m_nncIndexes.isNull() ? nIdx : ( *m_nncIndexes )[nIdx]; - if ( !m_includeAllanDiagramGeometry && conIdx >= m_nncData->nativeConnectionCount() ) + if ( !m_includeAllanDiagramGeometry && conIdx >= m_nncData->eclipseConnectionCount() ) { continue; } - const RigConnection& conn = m_nncData->connections()[conIdx]; + const RigConnection& conn = m_nncData->allConnections()[conIdx]; if ( conn.polygon().size() ) { diff --git a/ApplicationLibCode/ModelVisualization/RivReservoirFaultsPartMgr.cpp b/ApplicationLibCode/ModelVisualization/RivReservoirFaultsPartMgr.cpp index a4b6a95d2c..ef771248c3 100644 --- a/ApplicationLibCode/ModelVisualization/RivReservoirFaultsPartMgr.cpp +++ b/ApplicationLibCode/ModelVisualization/RivReservoirFaultsPartMgr.cpp @@ -20,6 +20,7 @@ #include "RivReservoirFaultsPartMgr.h" #include "RigMainGrid.h" +#include "RigNNCData.h" #include "RimEclipseCase.h" #include "RimEclipseCellColors.h" @@ -200,7 +201,7 @@ void RivReservoirFaultsPartMgr::appendPartsToModel( cvf::ModelBasicList* model ) if ( showNncs ) { RigMainGrid* mainGrid = m_reservoirView->mainGrid(); - mainGrid->nncData()->ensureConnectionDataIsProcessed(); + mainGrid->nncData()->ensureAllConnectionDataIsProcessed(); if ( showCompleteNncGeo ) { diff --git a/ApplicationLibCode/ModelVisualization/RivWellConnectionsPartMgr.cpp b/ApplicationLibCode/ModelVisualization/RivWellConnectionsPartMgr.cpp index e0255cb3cf..3e1ac604f5 100644 --- a/ApplicationLibCode/ModelVisualization/RivWellConnectionsPartMgr.cpp +++ b/ApplicationLibCode/ModelVisualization/RivWellConnectionsPartMgr.cpp @@ -37,6 +37,8 @@ #include "cvfModelBasicList.h" #include "cvfPart.h" +#include + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimFractureContainmentTools.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimFractureContainmentTools.cpp index 88945b6c2a..28f4809913 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimFractureContainmentTools.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimFractureContainmentTools.cpp @@ -33,6 +33,7 @@ #include "cvfStructGrid.h" #include +#include //-------------------------------------------------------------------------------------------------- /// diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp index 5d0e147aa6..b0b183b088 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseCase.cpp @@ -35,6 +35,7 @@ #include "RigCaseCellResultsData.h" #include "RigEclipseCaseData.h" #include "RigMainGrid.h" +#include "RigNNCData.h" #include "RigSimWellData.h" #include "RigVirtualPerforationTransmissibilities.h" #include "RigWellResultPoint.h" @@ -711,7 +712,7 @@ bool RimEclipseCase::ensureNncDataIsComputed() RigEclipseCaseData* rigEclipseCase = eclipseCaseData(); if ( rigEclipseCase && rigEclipseCase->mainGrid() ) { - computedData = rigEclipseCase->mainGrid()->nncData()->ensureConnectionDataIsProcessed(); + computedData = rigEclipseCase->mainGrid()->nncData()->ensureAllConnectionDataIsProcessed(); } return computedData; diff --git a/ApplicationLibCode/ProjectDataModel/Streamlines/RimStreamlineGenerator.cpp b/ApplicationLibCode/ProjectDataModel/Streamlines/RimStreamlineGenerator.cpp index 96e683edfd..0b523b1fcb 100644 --- a/ApplicationLibCode/ProjectDataModel/Streamlines/RimStreamlineGenerator.cpp +++ b/ApplicationLibCode/ProjectDataModel/Streamlines/RimStreamlineGenerator.cpp @@ -24,6 +24,8 @@ #include "RimStreamline.h" #include "RimStreamlineDataAccess.h" +#include + //-------------------------------------------------------------------------------------------------- /// Helper class for prioritizing streamline seed points //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ReservoirDataModel/RigAccWellFlowCalculator.cpp b/ApplicationLibCode/ReservoirDataModel/RigAccWellFlowCalculator.cpp index 1aaaf08d52..545683e923 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigAccWellFlowCalculator.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigAccWellFlowCalculator.cpp @@ -25,6 +25,8 @@ #include "RigSimulationWellCoordsAndMD.h" #include "RigWellResultPoint.h" +#include + //================================================================================================== /// /// diff --git a/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultsData.cpp b/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultsData.cpp index d3f6c0f09f..1ebb3053c4 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultsData.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultsData.cpp @@ -2465,7 +2465,7 @@ void RigCaseCellResultsData::computeNncCombRiTrans() bool isFaceNormalsOutwards = m_ownerMainGrid->isFaceNormalsOutwards(); // NNC calculation - const RigConnectionContainer& nncConnections = m_ownerMainGrid->nncData()->connections(); + const RigConnectionContainer& nncConnections = m_ownerMainGrid->nncData()->allConnections(); for ( size_t connIdx = 0; connIdx < nncConnections.size(); connIdx++ ) { size_t nativeResvCellIndex = nncConnections[connIdx].c1GlobIdx(); @@ -2829,7 +2829,7 @@ void RigCaseCellResultsData::computeNncCombRiTRANSbyArea() if ( transResults->size() != riAreaNormTransResults.size() ) return; - const RigConnectionContainer& connections = m_ownerMainGrid->nncData()->connections(); + const RigConnectionContainer& connections = m_ownerMainGrid->nncData()->allConnections(); for ( size_t nncConIdx = 0; nncConIdx < riAreaNormTransResults.size(); ++nncConIdx ) { @@ -3299,7 +3299,7 @@ void RigCaseCellResultsData::computeAllanResults( RigCaseCellResultsData* cellRe formationCount = cellResultsData->activeFormationNames()->formationNames().size(); } - const RigConnectionContainer& nncConnections = mainGrid->nncData()->connections(); + const RigConnectionContainer& nncConnections = mainGrid->nncData()->allConnections(); std::map, int> formationCombinationToCategory; for ( size_t i = 0; i < nncConnections.size(); i++ ) diff --git a/ApplicationLibCode/ReservoirDataModel/RigCaseToCaseCellMapperTools.cpp b/ApplicationLibCode/ReservoirDataModel/RigCaseToCaseCellMapperTools.cpp index c4e3f78ad6..af9e98c511 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigCaseToCaseCellMapperTools.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigCaseToCaseCellMapperTools.cpp @@ -24,6 +24,8 @@ #include "RigFemPartGrid.h" #include "RigMainGrid.h" +#include + //================================================================================================== /// //================================================================================================== diff --git a/ApplicationLibCode/ReservoirDataModel/RigCaseToCaseRangeFilterMapper.cpp b/ApplicationLibCode/ReservoirDataModel/RigCaseToCaseRangeFilterMapper.cpp index 7d7a24d572..ceab4c31d0 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigCaseToCaseRangeFilterMapper.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigCaseToCaseRangeFilterMapper.cpp @@ -27,6 +27,8 @@ #include "RimCellRangeFilter.h" +#include + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ReservoirDataModel/RigCellFaceGeometryTools.cpp b/ApplicationLibCode/ReservoirDataModel/RigCellFaceGeometryTools.cpp index ce51157d8e..78e7d0946c 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigCellFaceGeometryTools.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigCellFaceGeometryTools.cpp @@ -213,6 +213,9 @@ RigConnectionContainer RigCellFaceGeometryTools::computeOtherNncs( const RigMain return otherConnections; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- void RigCellFaceGeometryTools::extractConnectionsForFace( const RigFault::FaultFace& face, const RigMainGrid* mainGrid, const std::set>& nativeCellPairs, diff --git a/ApplicationLibCode/ReservoirDataModel/RigMainGrid.cpp b/ApplicationLibCode/ReservoirDataModel/RigMainGrid.cpp index 4a49c55ceb..a7fabf8293 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigMainGrid.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigMainGrid.cpp @@ -22,8 +22,10 @@ #include "RiaLogging.h" #include "RiaResultNames.h" + #include "RigActiveCellInfo.h" #include "RigHexIntersectionTools.h" +#include "RigNNCData.h" #include "cvfAssert.h" #include "cvfBoundingBoxTree.h" @@ -591,7 +593,7 @@ void RigMainGrid::distributeNNCsToFaults() { if ( m_faultsPrCellAcc.isNull() ) return; - const RigConnectionContainer& nncs = this->nncData()->connections(); + const RigConnectionContainer& nncs = this->nncData()->allConnections(); for ( size_t nncIdx = 0; nncIdx < nncs.size(); ++nncIdx ) { // Find the fault for each side of the nnc diff --git a/ApplicationLibCode/ReservoirDataModel/RigMainGrid.h b/ApplicationLibCode/ReservoirDataModel/RigMainGrid.h index b0d1ac25b9..dabed2d97f 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigMainGrid.h +++ b/ApplicationLibCode/ReservoirDataModel/RigMainGrid.h @@ -23,7 +23,6 @@ #include "RigCell.h" #include "RigGridBase.h" #include "RigLocalGrid.h" -#include "RigNNCData.h" #include "cvfBoundingBox.h" #include "cvfCollection.h" @@ -31,6 +30,7 @@ #include class RigActiveCellInfo; +class RigNNCData; namespace cvf { diff --git a/ApplicationLibCode/ReservoirDataModel/RigNNCData.cpp b/ApplicationLibCode/ReservoirDataModel/RigNNCData.cpp index b6c811b888..e674e65b16 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigNNCData.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigNNCData.cpp @@ -35,8 +35,9 @@ /// //-------------------------------------------------------------------------------------------------- RigNNCData::RigNNCData() - : m_nativeConnectionCount( 0 ) - , m_connectionsAreProcessed( false ) + : m_eclipseConnectionCount( 0 ) + , m_havePolygonsForEclipseConnections( false ) + , m_haveGeneratedConnections( false ) , m_mainGrid( nullptr ) , m_activeCellInfo( nullptr ) , m_computeNncForInactiveCells( false ) @@ -54,44 +55,52 @@ void RigNNCData::setSourceDataForProcessing( RigMainGrid* mainGrid, m_activeCellInfo = activeCellInfo; m_computeNncForInactiveCells = includeInactiveCells; - m_connectionsAreProcessed = false; + m_havePolygonsForEclipseConnections = false; + m_haveGeneratedConnections = false; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigNNCData::processNativeConnections( const RigMainGrid& mainGrid ) +void RigNNCData::buildPolygonsForEclipseConnections() { - // cvf::Trace::show("NNC: Total number: " + cvf::String((int)m_connections.size())); + if ( m_havePolygonsForEclipseConnections ) return; + if ( !m_mainGrid ) return; #pragma omp parallel for - for ( int cnIdx = 0; cnIdx < (int)m_connections.size(); ++cnIdx ) + for ( int cnIdx = 0; cnIdx < static_cast( eclipseConnectionCount() ); ++cnIdx ) { - const RigCell& c1 = mainGrid.globalCellArray()[m_connections[cnIdx].c1GlobIdx()]; - const RigCell& c2 = mainGrid.globalCellArray()[m_connections[cnIdx].c2GlobIdx()]; + const RigCell& c1 = m_mainGrid->globalCellArray()[m_connections[cnIdx].c1GlobIdx()]; + const RigCell& c2 = m_mainGrid->globalCellArray()[m_connections[cnIdx].c2GlobIdx()]; std::vector connectionPolygon; std::vector connectionIntersections; cvf::StructGridInterface::FaceType connectionFace = cvf::StructGridInterface::NO_FACE; - connectionFace = - RigCellFaceGeometryTools::calculateCellFaceOverlap( c1, c2, mainGrid, &connectionPolygon, &connectionIntersections ); + connectionFace = RigCellFaceGeometryTools::calculateCellFaceOverlap( c1, + c2, + *m_mainGrid, + &connectionPolygon, + &connectionIntersections ); if ( connectionFace != cvf::StructGridInterface::NO_FACE ) { m_connections[cnIdx].setFace( connectionFace ); - m_connections[cnIdx].setPolygon( - RigCellFaceGeometryTools::extractPolygon( mainGrid.nodes(), connectionPolygon, connectionIntersections ) ); + m_connections[cnIdx].setPolygon( RigCellFaceGeometryTools::extractPolygon( m_mainGrid->nodes(), + connectionPolygon, + connectionIntersections ) ); } } + + m_havePolygonsForEclipseConnections = true; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigNNCData::computeCompleteSetOfNncs( const RigMainGrid* mainGrid, - const RigActiveCellInfo* activeCellInfo, - bool includeInactiveCells ) +void RigNNCData::computeAdditionalNncs( const RigMainGrid* mainGrid, + const RigActiveCellInfo* activeCellInfo, + bool includeInactiveCells ) { RigConnectionContainer otherConnections = RigCellFaceGeometryTools::computeOtherNncs( mainGrid, m_connections, activeCellInfo, includeInactiveCells ); @@ -188,9 +197,9 @@ size_t RigNNCData::connectionsWithNoCommonArea( QStringList& connectionTextFirst //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RigNNCData::ensureConnectionDataIsProcessed() +bool RigNNCData::ensureAllConnectionDataIsProcessed() { - if ( m_connectionsAreProcessed ) return false; + if ( m_haveGeneratedConnections ) return false; if ( m_mainGrid ) { @@ -198,13 +207,13 @@ bool RigNNCData::ensureConnectionDataIsProcessed() RiaLogging::info( "NNC geometry computation - starting process" ); - processNativeConnections( *m_mainGrid ); + buildPolygonsForEclipseConnections(); progressInfo.incrementProgress(); - computeCompleteSetOfNncs( m_mainGrid, m_activeCellInfo, m_computeNncForInactiveCells ); + computeAdditionalNncs( m_mainGrid, m_activeCellInfo, m_computeNncForInactiveCells ); progressInfo.incrementProgress(); - m_connectionsAreProcessed = true; + m_haveGeneratedConnections = true; m_mainGrid->distributeNNCsToFaults(); @@ -215,7 +224,7 @@ bool RigNNCData::ensureConnectionDataIsProcessed() RiaLogging::info( "NNC geometry computation - completed process" ); - RiaLogging::info( QString( "Native NNC count : %1" ).arg( nativeConnectionCount() ) ); + RiaLogging::info( QString( "Native NNC count : %1" ).arg( eclipseConnectionCount() ) ); RiaLogging::info( QString( "Computed NNC count : %1" ).arg( m_connections.size() ) ); RiaLogging::info( QString( "NNCs with no common area count : %1" ).arg( noCommonAreaCount ) ); @@ -237,28 +246,41 @@ bool RigNNCData::ensureConnectionDataIsProcessed() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigNNCData::setNativeConnections( RigConnectionContainer& connections ) +void RigNNCData::setEclipseConnections( RigConnectionContainer& eclipseConnections ) { - m_connections = connections; - m_nativeConnectionCount = m_connections.size(); + m_connections = eclipseConnections; + m_eclipseConnectionCount = m_connections.size(); - m_connectionsAreProcessed = false; + m_haveGeneratedConnections = false; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -size_t RigNNCData::nativeConnectionCount() const +size_t RigNNCData::eclipseConnectionCount() const { - return m_nativeConnectionCount; + return m_eclipseConnectionCount; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RigConnectionContainer& RigNNCData::connections() +const RigConnectionContainer& RigNNCData::eclipseConnections() const { - ensureConnectionDataIsProcessed(); + // Return connections without calling ensureConnectionDataIsProcessed() to avoid potential heavy computations + // Relevant if only native connection data is required + // NB: If computeAdditionalNncs() is called before this method, the size of this collection is larger than + // nativeConnectionCount() + + return m_connections; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigConnectionContainer& RigNNCData::allConnections() +{ + ensureAllConnectionDataIsProcessed(); return m_connections; } @@ -268,7 +290,7 @@ RigConnectionContainer& RigNNCData::connections() //-------------------------------------------------------------------------------------------------- std::vector& RigNNCData::makeStaticConnectionScalarResult( QString nncDataType ) { - ensureConnectionDataIsProcessed(); + ensureAllConnectionDataIsProcessed(); std::vector>& results = m_connectionResults[nncDataType]; results.resize( 1 ); diff --git a/ApplicationLibCode/ReservoirDataModel/RigNNCData.h b/ApplicationLibCode/ReservoirDataModel/RigNNCData.h index 28af4b00a2..412aea8ac8 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigNNCData.h +++ b/ApplicationLibCode/ReservoirDataModel/RigNNCData.h @@ -50,15 +50,17 @@ public: RigNNCData(); - bool ensureConnectionDataIsProcessed(); void setSourceDataForProcessing( RigMainGrid* mainGrid, const RigActiveCellInfo* activeCellInfo, bool includeInactiveCells ); - void setNativeConnections( RigConnectionContainer& connections ); - size_t nativeConnectionCount() const; + void setEclipseConnections( RigConnectionContainer& eclipseConnections ); + void buildPolygonsForEclipseConnections(); + size_t eclipseConnectionCount() const; + const RigConnectionContainer& eclipseConnections() const; - RigConnectionContainer& connections(); + bool ensureAllConnectionDataIsProcessed(); + RigConnectionContainer& allConnections(); std::vector& makeStaticConnectionScalarResult( QString nncDataType ); const std::vector* staticConnectionScalarResult( const RigEclipseResultAddress& resVarAddr ) const; @@ -95,20 +97,20 @@ private: const QString getNNCDataTypeFromScalarResultIndex( const RigEclipseResultAddress& resVarAddr ) const; bool isNative( QString nncDataType ) const; - void processNativeConnections( const RigMainGrid& mainGrid ); - void computeCompleteSetOfNncs( const RigMainGrid* mainGrid, - const RigActiveCellInfo* activeCellInfo, - bool includeInactiveCells ); + void computeAdditionalNncs( const RigMainGrid* mainGrid, + const RigActiveCellInfo* activeCellInfo, + bool includeInactiveCells ); size_t connectionsWithNoCommonArea( QStringList& connectionTextFirstItems, size_t maxItemCount ); private: RigConnectionContainer m_connections; - size_t m_nativeConnectionCount; + size_t m_eclipseConnectionCount; std::map>> m_connectionResults; std::map m_resultAddrToNNCDataType; - bool m_connectionsAreProcessed; + bool m_havePolygonsForEclipseConnections; + bool m_haveGeneratedConnections; RigMainGrid* m_mainGrid; const RigActiveCellInfo* m_activeCellInfo; bool m_computeNncForInactiveCells; diff --git a/ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.cpp b/ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.cpp index da7a4c45c8..05a9b64d41 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigNumberOfFloodedPoreVolumesCalculator.cpp @@ -24,6 +24,7 @@ #include "RigCaseCellResultsData.h" #include "RigEclipseCaseData.h" #include "RigMainGrid.h" +#include "RigNNCData.h" #include "RigReservoirBuilderMock.h" #include "RimEclipseCase.h" @@ -101,7 +102,7 @@ RigNumberOfFloodedPoreVolumesCalculator::RigNumberOfFloodedPoreVolumesCalculator std::vector*> flowrateKatAllTimeSteps; RigNNCData* nncData = eclipseCaseData->mainGrid()->nncData(); - const RigConnectionContainer connections = nncData->connections(); + const RigConnectionContainer connections = nncData->allConnections(); progress.incrementProgress(); diff --git a/ApplicationLibCode/ReservoirDataModel/RigReservoirBuilderMock.cpp b/ApplicationLibCode/ReservoirDataModel/RigReservoirBuilderMock.cpp index 3307687f49..5f94079783 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigReservoirBuilderMock.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigReservoirBuilderMock.cpp @@ -24,6 +24,7 @@ #include "RigCell.h" #include "RigEclipseCaseData.h" #include "RigMainGrid.h" +#include "RigNNCData.h" #include "RigSimWellData.h" /* rand example: guess the number */ @@ -557,7 +558,7 @@ void RigReservoirBuilderMock::addFaults( RigEclipseCaseData* eclipseCase ) addNnc( grid, i1, j1, k1, i2, j2, k2, nncConnections ); } - grid->nncData()->setNativeConnections( nncConnections ); + grid->nncData()->setEclipseConnections( nncConnections ); std::vector& tranVals = grid->nncData()->makeStaticConnectionScalarResult( RiaDefines::propertyNameCombTrans() ); diff --git a/ApplicationLibCode/SocketInterface/RiaNNCCommands.cpp b/ApplicationLibCode/SocketInterface/RiaNNCCommands.cpp index 7619cf28f4..7188ca4a34 100644 --- a/ApplicationLibCode/SocketInterface/RiaNNCCommands.cpp +++ b/ApplicationLibCode/SocketInterface/RiaNNCCommands.cpp @@ -27,6 +27,7 @@ #include "RigCaseCellResultsData.h" #include "RigEclipseCaseData.h" #include "RigMainGrid.h" +#include "RigNNCData.h" #include "Rim3dOverlayInfoConfig.h" #include "RimCellEdgeColors.h" @@ -64,13 +65,13 @@ public: RigMainGrid* mainGrid = rimCase->eclipseCaseData()->mainGrid(); - size_t connectionCount = mainGrid->nncData()->connections().size(); + size_t connectionCount = mainGrid->nncData()->allConnections().size(); socketStream << (quint64)connectionCount; - for ( size_t i = 0; i < mainGrid->nncData()->connections().size(); ++i ) + for ( size_t i = 0; i < mainGrid->nncData()->allConnections().size(); ++i ) { - RigConnection connection = mainGrid->nncData()->connections()[i]; + RigConnection connection = mainGrid->nncData()->allConnections()[i]; const RigCell& cell1 = mainGrid->globalCellArray()[connection.c1GlobIdx()]; const RigCell& cell2 = mainGrid->globalCellArray()[connection.c2GlobIdx()]; @@ -163,7 +164,7 @@ public: } // then the connection count and time step count. - size_t connectionCount = mainGrid->nncData()->connections().size(); + size_t connectionCount = mainGrid->nncData()->allConnections().size(); size_t timeStepCount = requestedTimeSteps.size(); socketStream << (quint64)connectionCount; @@ -216,7 +217,7 @@ public: } // connection count - size_t connectionCount = mainGrid->nncData()->connections().size(); + size_t connectionCount = mainGrid->nncData()->allConnections().size(); socketStream << (quint64)connectionCount; RiaSocketTools::writeBlockData( server, @@ -479,7 +480,7 @@ public: RigNNCData* nncData = m_currentReservoir->eclipseCaseData()->mainGrid()->nncData(); size_t connectionCountFromOctave = m_bytesPerTimeStepToRead / sizeof( double ); - size_t connectionCount = nncData->connections().size(); + size_t connectionCount = nncData->allConnections().size(); std::vector>* resultsToAdd = nncData->generatedConnectionScalarResultByName( m_currentPropertyName ); diff --git a/ApplicationLibCode/UnitTests/RigCellGeometryTools-Test.cpp b/ApplicationLibCode/UnitTests/RigCellGeometryTools-Test.cpp index 2dfb70b838..a0bdf6b4d5 100644 --- a/ApplicationLibCode/UnitTests/RigCellGeometryTools-Test.cpp +++ b/ApplicationLibCode/UnitTests/RigCellGeometryTools-Test.cpp @@ -21,6 +21,8 @@ #include "RigCellGeometryTools.h" #include "RigMainGrid.h" +#include // Needed for HUGE_VAL on Linux + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuCellAndNncPickEventHandler.cpp b/ApplicationLibCode/UserInterface/RiuCellAndNncPickEventHandler.cpp index b8996af082..8e564ce488 100644 --- a/ApplicationLibCode/UserInterface/RiuCellAndNncPickEventHandler.cpp +++ b/ApplicationLibCode/UserInterface/RiuCellAndNncPickEventHandler.cpp @@ -217,7 +217,7 @@ bool RiuCellAndNncPickEventHandler::handle3dPickEvent( const Ric3dPickEvent& eve if ( eclipseView ) { RigMainGrid* mainGrid = eclipseView->eclipseCase()->eclipseCaseData()->mainGrid(); - const RigConnection& nncConn = mainGrid->nncData()->connections()[nncIndex]; + const RigConnection& nncConn = mainGrid->nncData()->allConnections()[nncIndex]; mainGrid->gridAndGridLocalIdxFromGlobalCellIdx( nncConn.c1GlobIdx(), &gridLocalCellIndex ); } @@ -308,7 +308,7 @@ bool RiuCellAndNncPickEventHandler::handle3dPickEvent( const Ric3dPickEvent& eve selectedItem->m_nncIndex == nncIndex ) { RigMainGrid* mainGrid = eclipseView->eclipseCase()->eclipseCaseData()->mainGrid(); - const RigConnection& nncConn = mainGrid->nncData()->connections()[nncIndex]; + const RigConnection& nncConn = mainGrid->nncData()->allConnections()[nncIndex]; size_t c1LocalIdx = cvf::UNDEFINED_SIZE_T; const RigGridBase* grid1 = mainGrid->gridAndGridLocalIdxFromGlobalCellIdx(nncConn.c1GlobIdx(), &c1LocalIdx); diff --git a/ApplicationLibCode/UserInterface/RiuResultTextBuilder.cpp b/ApplicationLibCode/UserInterface/RiuResultTextBuilder.cpp index 70b9c69745..22ba2aea6c 100644 --- a/ApplicationLibCode/UserInterface/RiuResultTextBuilder.cpp +++ b/ApplicationLibCode/UserInterface/RiuResultTextBuilder.cpp @@ -23,6 +23,7 @@ #include "RigEclipseCaseData.h" #include "RigFormationNames.h" #include "RigMainGrid.h" +#include "RigNNCData.h" #include "RigResultAccessor.h" #include "RigResultAccessorFactory.h" #include "RigSimWellData.h" @@ -444,9 +445,9 @@ QString RiuResultTextBuilder::nncResultText() RigNNCData* nncData = grid->nncData(); CVF_ASSERT( nncData ); - if ( nncData && m_nncIndex < nncData->connections().size() ) + if ( nncData && m_nncIndex < nncData->allConnections().size() ) { - const RigConnection& conn = nncData->connections()[m_nncIndex]; + const RigConnection& conn = nncData->allConnections()[m_nncIndex]; cvf::StructGridInterface::FaceEnum face( conn.face() ); @@ -800,11 +801,11 @@ QString RiuResultTextBuilder::nncDetails() RigNNCData* nncData = grid->nncData(); CVF_ASSERT( nncData ); - if ( nncData && m_nncIndex < nncData->connections().size() ) + if ( nncData && m_nncIndex < nncData->allConnections().size() ) { text += "-- NNC details --\n"; { - const RigConnection& conn = nncData->connections()[m_nncIndex]; + const RigConnection& conn = nncData->allConnections()[m_nncIndex]; cvf::StructGridInterface::FaceEnum face( conn.face() ); // First cell of NNC diff --git a/GrpcInterface/RiaGrpcNNCPropertiesService.cpp b/GrpcInterface/RiaGrpcNNCPropertiesService.cpp index f4d0103f9f..7554d42052 100644 --- a/GrpcInterface/RiaGrpcNNCPropertiesService.cpp +++ b/GrpcInterface/RiaGrpcNNCPropertiesService.cpp @@ -25,6 +25,7 @@ #include "RigEclipseResultAddress.h" #include "RigEclipseResultInfo.h" #include "RigMainGrid.h" +#include "RigNNCData.h" #include "RimEclipseCase.h" #include "RimEclipseCellColors.h" @@ -89,7 +90,7 @@ rips::Vec3i* createConnectionVec3i( const RigCell& cell ) grpc::Status RiaNNCConnectionsStateHandler::assignReply( rips::NNCConnections* reply ) { RigMainGrid* mainGrid = m_eclipseCase->eclipseCaseData()->mainGrid(); - const RigConnectionContainer& connections = mainGrid->nncData()->connections(); + const RigConnectionContainer& connections = mainGrid->nncData()->allConnections(); size_t connectionCount = connections.size(); const size_t packageSize = RiaGrpcServiceInterface::numberOfDataUnitsInPackage( sizeof( rips::NNCConnection ) ); @@ -189,7 +190,7 @@ const std::vector* getScalarResultByName( const RigNNCData* nncD grpc::Status RiaNNCValuesStateHandler::assignReply( rips::NNCValues* reply ) { RigMainGrid* mainGrid = m_eclipseCase->eclipseCaseData()->mainGrid(); - auto connections = mainGrid->nncData()->connections(); + auto connections = mainGrid->nncData()->allConnections(); QString propertyName = QString::fromStdString( m_request->property_name() ); RigNNCData::NNCResultType propertyType = static_cast( m_request->property_type() ); @@ -362,7 +363,7 @@ grpc::Status RiaNNCInputValuesStateHandler::init( const NNCValuesInputRequest* r m_eclipseCase->results( m_porosityModel )->ensureKnownResultLoaded( resAddr ); nncData->setEclResultAddress( m_propertyName, resAddr ); - m_cellCount = caseData->mainGrid()->nncData()->connections().size(); + m_cellCount = caseData->mainGrid()->nncData()->allConnections().size(); resultsToAdd->resize( m_cellCount, HUGE_VAL );