#8375 Flow Vectors : Avoid recomputing NNCs when accessing flow data

Avoid include of RigNNCData.h in header files.
This commit is contained in:
Magne Sjaastad 2021-12-17 12:44:06 +01:00
parent d82fa7f72b
commit 891a2e7c29
24 changed files with 124 additions and 73 deletions

View File

@ -41,6 +41,7 @@
#include "RigEclipseResultInfo.h" #include "RigEclipseResultInfo.h"
#include "RigEquil.h" #include "RigEquil.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include "RigNNCData.h"
#include "RigSimWellData.h" #include "RigSimWellData.h"
#include "RigWellResultPoint.h" #include "RigWellResultPoint.h"
@ -769,7 +770,7 @@ void RifReaderEclipseOutput::transferStaticNNCData( const ecl_grid_type* mainEcl
transmissibilityValuesTemp.push_back( transValues[nIdx] ); transmissibilityValuesTemp.push_back( transValues[nIdx] );
} }
mainGrid->nncData()->setNativeConnections( nncConnections ); mainGrid->nncData()->setEclipseConnections( nncConnections );
mainGrid->nncData()->makeScalarResultAndSetValues( RiaDefines::propertyNameCombTrans(), mainGrid->nncData()->makeScalarResultAndSetValues( RiaDefines::propertyNameCombTrans(),
transmissibilityValuesTemp ); transmissibilityValuesTemp );
} }

View File

@ -29,6 +29,7 @@
#include "RigEclipseCaseData.h" #include "RigEclipseCaseData.h"
#include "RigEclipseResultAddress.h" #include "RigEclipseResultAddress.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include "RigNNCData.h"
#include "cafDisplayCoordTransform.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() ) if ( result->showNncData() )
{ {
RigNNCData* nncData = eclipseCaseData->mainGrid()->nncData();
nncData->buildPolygonsForEclipseConnections();
std::vector<const std::vector<std::vector<double>>*> nncResultVals; std::vector<const std::vector<std::vector<double>>*> nncResultVals;
std::vector<RigEclipseResultAddress> combinedAddresses; std::vector<RigEclipseResultAddress> combinedAddresses;
result->resultAddressesCombined( 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() ) if ( conn.polygon().size() )
{ {
double resultValue = 0.0; double resultValue = 0.0;

View File

@ -76,7 +76,7 @@ void RivNNCGeometryGenerator::computeArrays()
const cvf::Vec3f offset( m_offset ); const cvf::Vec3f offset( m_offset );
long long numConnections = long long numConnections =
static_cast<long long>( m_nncIndexes.isNull() ? m_nncData->connections().size() : m_nncIndexes->size() ); static_cast<long long>( m_nncIndexes.isNull() ? m_nncData->allConnections().size() : m_nncIndexes->size() );
bool isVisibilityCalcActive = m_cellVisibility.notNull() && m_grid.notNull(); bool isVisibilityCalcActive = m_cellVisibility.notNull() && m_grid.notNull();
std::vector<RigCell>* allCells = nullptr; std::vector<RigCell>* allCells = nullptr;
@ -90,12 +90,12 @@ void RivNNCGeometryGenerator::computeArrays()
{ {
size_t conIdx = m_nncIndexes.isNull() ? nIdx : ( *m_nncIndexes )[nIdx]; 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; continue;
} }
const RigConnection& conn = m_nncData->connections()[conIdx]; const RigConnection& conn = m_nncData->allConnections()[conIdx];
if ( conn.polygon().size() ) if ( conn.polygon().size() )
{ {

View File

@ -20,6 +20,7 @@
#include "RivReservoirFaultsPartMgr.h" #include "RivReservoirFaultsPartMgr.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include "RigNNCData.h"
#include "RimEclipseCase.h" #include "RimEclipseCase.h"
#include "RimEclipseCellColors.h" #include "RimEclipseCellColors.h"
@ -200,7 +201,7 @@ void RivReservoirFaultsPartMgr::appendPartsToModel( cvf::ModelBasicList* model )
if ( showNncs ) if ( showNncs )
{ {
RigMainGrid* mainGrid = m_reservoirView->mainGrid(); RigMainGrid* mainGrid = m_reservoirView->mainGrid();
mainGrid->nncData()->ensureConnectionDataIsProcessed(); mainGrid->nncData()->ensureAllConnectionDataIsProcessed();
if ( showCompleteNncGeo ) if ( showCompleteNncGeo )
{ {

View File

@ -37,6 +37,8 @@
#include "cvfModelBasicList.h" #include "cvfModelBasicList.h"
#include "cvfPart.h" #include "cvfPart.h"
#include <cmath>
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -33,6 +33,7 @@
#include "cvfStructGrid.h" #include "cvfStructGrid.h"
#include <array> #include <array>
#include <cmath>
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///

View File

@ -35,6 +35,7 @@
#include "RigCaseCellResultsData.h" #include "RigCaseCellResultsData.h"
#include "RigEclipseCaseData.h" #include "RigEclipseCaseData.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include "RigNNCData.h"
#include "RigSimWellData.h" #include "RigSimWellData.h"
#include "RigVirtualPerforationTransmissibilities.h" #include "RigVirtualPerforationTransmissibilities.h"
#include "RigWellResultPoint.h" #include "RigWellResultPoint.h"
@ -711,7 +712,7 @@ bool RimEclipseCase::ensureNncDataIsComputed()
RigEclipseCaseData* rigEclipseCase = eclipseCaseData(); RigEclipseCaseData* rigEclipseCase = eclipseCaseData();
if ( rigEclipseCase && rigEclipseCase->mainGrid() ) if ( rigEclipseCase && rigEclipseCase->mainGrid() )
{ {
computedData = rigEclipseCase->mainGrid()->nncData()->ensureConnectionDataIsProcessed(); computedData = rigEclipseCase->mainGrid()->nncData()->ensureAllConnectionDataIsProcessed();
} }
return computedData; return computedData;

View File

@ -24,6 +24,8 @@
#include "RimStreamline.h" #include "RimStreamline.h"
#include "RimStreamlineDataAccess.h" #include "RimStreamlineDataAccess.h"
#include <cmath>
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// Helper class for prioritizing streamline seed points /// Helper class for prioritizing streamline seed points
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -25,6 +25,8 @@
#include "RigSimulationWellCoordsAndMD.h" #include "RigSimulationWellCoordsAndMD.h"
#include "RigWellResultPoint.h" #include "RigWellResultPoint.h"
#include <cmath>
//================================================================================================== //==================================================================================================
/// ///
/// ///

View File

@ -2465,7 +2465,7 @@ void RigCaseCellResultsData::computeNncCombRiTrans()
bool isFaceNormalsOutwards = m_ownerMainGrid->isFaceNormalsOutwards(); bool isFaceNormalsOutwards = m_ownerMainGrid->isFaceNormalsOutwards();
// NNC calculation // 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++ ) for ( size_t connIdx = 0; connIdx < nncConnections.size(); connIdx++ )
{ {
size_t nativeResvCellIndex = nncConnections[connIdx].c1GlobIdx(); size_t nativeResvCellIndex = nncConnections[connIdx].c1GlobIdx();
@ -2829,7 +2829,7 @@ void RigCaseCellResultsData::computeNncCombRiTRANSbyArea()
if ( transResults->size() != riAreaNormTransResults.size() ) return; 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 ) for ( size_t nncConIdx = 0; nncConIdx < riAreaNormTransResults.size(); ++nncConIdx )
{ {
@ -3299,7 +3299,7 @@ void RigCaseCellResultsData::computeAllanResults( RigCaseCellResultsData* cellRe
formationCount = cellResultsData->activeFormationNames()->formationNames().size(); formationCount = cellResultsData->activeFormationNames()->formationNames().size();
} }
const RigConnectionContainer& nncConnections = mainGrid->nncData()->connections(); const RigConnectionContainer& nncConnections = mainGrid->nncData()->allConnections();
std::map<std::pair<int, int>, int> formationCombinationToCategory; std::map<std::pair<int, int>, int> formationCombinationToCategory;
for ( size_t i = 0; i < nncConnections.size(); i++ ) for ( size_t i = 0; i < nncConnections.size(); i++ )

View File

@ -24,6 +24,8 @@
#include "RigFemPartGrid.h" #include "RigFemPartGrid.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include <cmath>
//================================================================================================== //==================================================================================================
/// ///
//================================================================================================== //==================================================================================================

View File

@ -27,6 +27,8 @@
#include "RimCellRangeFilter.h" #include "RimCellRangeFilter.h"
#include <cmath>
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -213,6 +213,9 @@ RigConnectionContainer RigCellFaceGeometryTools::computeOtherNncs( const RigMain
return otherConnections; return otherConnections;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RigCellFaceGeometryTools::extractConnectionsForFace( const RigFault::FaultFace& face, void RigCellFaceGeometryTools::extractConnectionsForFace( const RigFault::FaultFace& face,
const RigMainGrid* mainGrid, const RigMainGrid* mainGrid,
const std::set<std::pair<unsigned, unsigned>>& nativeCellPairs, const std::set<std::pair<unsigned, unsigned>>& nativeCellPairs,

View File

@ -22,8 +22,10 @@
#include "RiaLogging.h" #include "RiaLogging.h"
#include "RiaResultNames.h" #include "RiaResultNames.h"
#include "RigActiveCellInfo.h" #include "RigActiveCellInfo.h"
#include "RigHexIntersectionTools.h" #include "RigHexIntersectionTools.h"
#include "RigNNCData.h"
#include "cvfAssert.h" #include "cvfAssert.h"
#include "cvfBoundingBoxTree.h" #include "cvfBoundingBoxTree.h"
@ -591,7 +593,7 @@ void RigMainGrid::distributeNNCsToFaults()
{ {
if ( m_faultsPrCellAcc.isNull() ) return; 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 ) for ( size_t nncIdx = 0; nncIdx < nncs.size(); ++nncIdx )
{ {
// Find the fault for each side of the nnc // Find the fault for each side of the nnc

View File

@ -23,7 +23,6 @@
#include "RigCell.h" #include "RigCell.h"
#include "RigGridBase.h" #include "RigGridBase.h"
#include "RigLocalGrid.h" #include "RigLocalGrid.h"
#include "RigNNCData.h"
#include "cvfBoundingBox.h" #include "cvfBoundingBox.h"
#include "cvfCollection.h" #include "cvfCollection.h"
@ -31,6 +30,7 @@
#include <vector> #include <vector>
class RigActiveCellInfo; class RigActiveCellInfo;
class RigNNCData;
namespace cvf namespace cvf
{ {

View File

@ -35,8 +35,9 @@
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RigNNCData::RigNNCData() RigNNCData::RigNNCData()
: m_nativeConnectionCount( 0 ) : m_eclipseConnectionCount( 0 )
, m_connectionsAreProcessed( false ) , m_havePolygonsForEclipseConnections( false )
, m_haveGeneratedConnections( false )
, m_mainGrid( nullptr ) , m_mainGrid( nullptr )
, m_activeCellInfo( nullptr ) , m_activeCellInfo( nullptr )
, m_computeNncForInactiveCells( false ) , m_computeNncForInactiveCells( false )
@ -54,44 +55,52 @@ void RigNNCData::setSourceDataForProcessing( RigMainGrid* mainGrid,
m_activeCellInfo = activeCellInfo; m_activeCellInfo = activeCellInfo;
m_computeNncForInactiveCells = includeInactiveCells; 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 #pragma omp parallel for
for ( int cnIdx = 0; cnIdx < (int)m_connections.size(); ++cnIdx ) for ( int cnIdx = 0; cnIdx < static_cast<int>( eclipseConnectionCount() ); ++cnIdx )
{ {
const RigCell& c1 = mainGrid.globalCellArray()[m_connections[cnIdx].c1GlobIdx()]; const RigCell& c1 = m_mainGrid->globalCellArray()[m_connections[cnIdx].c1GlobIdx()];
const RigCell& c2 = mainGrid.globalCellArray()[m_connections[cnIdx].c2GlobIdx()]; const RigCell& c2 = m_mainGrid->globalCellArray()[m_connections[cnIdx].c2GlobIdx()];
std::vector<size_t> connectionPolygon; std::vector<size_t> connectionPolygon;
std::vector<cvf::Vec3d> connectionIntersections; std::vector<cvf::Vec3d> connectionIntersections;
cvf::StructGridInterface::FaceType connectionFace = cvf::StructGridInterface::NO_FACE; cvf::StructGridInterface::FaceType connectionFace = cvf::StructGridInterface::NO_FACE;
connectionFace = connectionFace = RigCellFaceGeometryTools::calculateCellFaceOverlap( c1,
RigCellFaceGeometryTools::calculateCellFaceOverlap( c1, c2, mainGrid, &connectionPolygon, &connectionIntersections ); c2,
*m_mainGrid,
&connectionPolygon,
&connectionIntersections );
if ( connectionFace != cvf::StructGridInterface::NO_FACE ) if ( connectionFace != cvf::StructGridInterface::NO_FACE )
{ {
m_connections[cnIdx].setFace( connectionFace ); m_connections[cnIdx].setFace( connectionFace );
m_connections[cnIdx].setPolygon( m_connections[cnIdx].setPolygon( RigCellFaceGeometryTools::extractPolygon( m_mainGrid->nodes(),
RigCellFaceGeometryTools::extractPolygon( mainGrid.nodes(), connectionPolygon, connectionIntersections ) ); connectionPolygon,
connectionIntersections ) );
} }
} }
m_havePolygonsForEclipseConnections = true;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RigNNCData::computeCompleteSetOfNncs( const RigMainGrid* mainGrid, void RigNNCData::computeAdditionalNncs( const RigMainGrid* mainGrid,
const RigActiveCellInfo* activeCellInfo, const RigActiveCellInfo* activeCellInfo,
bool includeInactiveCells ) bool includeInactiveCells )
{ {
RigConnectionContainer otherConnections = RigConnectionContainer otherConnections =
RigCellFaceGeometryTools::computeOtherNncs( mainGrid, m_connections, activeCellInfo, includeInactiveCells ); 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 ) if ( m_mainGrid )
{ {
@ -198,13 +207,13 @@ bool RigNNCData::ensureConnectionDataIsProcessed()
RiaLogging::info( "NNC geometry computation - starting process" ); RiaLogging::info( "NNC geometry computation - starting process" );
processNativeConnections( *m_mainGrid ); buildPolygonsForEclipseConnections();
progressInfo.incrementProgress(); progressInfo.incrementProgress();
computeCompleteSetOfNncs( m_mainGrid, m_activeCellInfo, m_computeNncForInactiveCells ); computeAdditionalNncs( m_mainGrid, m_activeCellInfo, m_computeNncForInactiveCells );
progressInfo.incrementProgress(); progressInfo.incrementProgress();
m_connectionsAreProcessed = true; m_haveGeneratedConnections = true;
m_mainGrid->distributeNNCsToFaults(); m_mainGrid->distributeNNCsToFaults();
@ -215,7 +224,7 @@ bool RigNNCData::ensureConnectionDataIsProcessed()
RiaLogging::info( "NNC geometry computation - completed process" ); 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( "Computed NNC count : %1" ).arg( m_connections.size() ) );
RiaLogging::info( QString( "NNCs with no common area count : %1" ).arg( noCommonAreaCount ) ); 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_connections = eclipseConnections;
m_nativeConnectionCount = m_connections.size(); 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; return m_connections;
} }
@ -268,7 +290,7 @@ RigConnectionContainer& RigNNCData::connections()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::vector<double>& RigNNCData::makeStaticConnectionScalarResult( QString nncDataType ) std::vector<double>& RigNNCData::makeStaticConnectionScalarResult( QString nncDataType )
{ {
ensureConnectionDataIsProcessed(); ensureAllConnectionDataIsProcessed();
std::vector<std::vector<double>>& results = m_connectionResults[nncDataType]; std::vector<std::vector<double>>& results = m_connectionResults[nncDataType];
results.resize( 1 ); results.resize( 1 );

View File

@ -50,15 +50,17 @@ public:
RigNNCData(); RigNNCData();
bool ensureConnectionDataIsProcessed();
void setSourceDataForProcessing( RigMainGrid* mainGrid, void setSourceDataForProcessing( RigMainGrid* mainGrid,
const RigActiveCellInfo* activeCellInfo, const RigActiveCellInfo* activeCellInfo,
bool includeInactiveCells ); bool includeInactiveCells );
void setNativeConnections( RigConnectionContainer& connections ); void setEclipseConnections( RigConnectionContainer& eclipseConnections );
size_t nativeConnectionCount() const; void buildPolygonsForEclipseConnections();
size_t eclipseConnectionCount() const;
const RigConnectionContainer& eclipseConnections() const;
RigConnectionContainer& connections(); bool ensureAllConnectionDataIsProcessed();
RigConnectionContainer& allConnections();
std::vector<double>& makeStaticConnectionScalarResult( QString nncDataType ); std::vector<double>& makeStaticConnectionScalarResult( QString nncDataType );
const std::vector<double>* staticConnectionScalarResult( const RigEclipseResultAddress& resVarAddr ) const; const std::vector<double>* staticConnectionScalarResult( const RigEclipseResultAddress& resVarAddr ) const;
@ -95,20 +97,20 @@ private:
const QString getNNCDataTypeFromScalarResultIndex( const RigEclipseResultAddress& resVarAddr ) const; const QString getNNCDataTypeFromScalarResultIndex( const RigEclipseResultAddress& resVarAddr ) const;
bool isNative( QString nncDataType ) const; bool isNative( QString nncDataType ) const;
void processNativeConnections( const RigMainGrid& mainGrid ); void computeAdditionalNncs( const RigMainGrid* mainGrid,
void computeCompleteSetOfNncs( const RigMainGrid* mainGrid, const RigActiveCellInfo* activeCellInfo,
const RigActiveCellInfo* activeCellInfo, bool includeInactiveCells );
bool includeInactiveCells );
size_t connectionsWithNoCommonArea( QStringList& connectionTextFirstItems, size_t maxItemCount ); size_t connectionsWithNoCommonArea( QStringList& connectionTextFirstItems, size_t maxItemCount );
private: private:
RigConnectionContainer m_connections; RigConnectionContainer m_connections;
size_t m_nativeConnectionCount; size_t m_eclipseConnectionCount;
std::map<QString, std::vector<std::vector<double>>> m_connectionResults; std::map<QString, std::vector<std::vector<double>>> m_connectionResults;
std::map<RigEclipseResultAddress, QString> m_resultAddrToNNCDataType; std::map<RigEclipseResultAddress, QString> m_resultAddrToNNCDataType;
bool m_connectionsAreProcessed; bool m_havePolygonsForEclipseConnections;
bool m_haveGeneratedConnections;
RigMainGrid* m_mainGrid; RigMainGrid* m_mainGrid;
const RigActiveCellInfo* m_activeCellInfo; const RigActiveCellInfo* m_activeCellInfo;
bool m_computeNncForInactiveCells; bool m_computeNncForInactiveCells;

View File

@ -24,6 +24,7 @@
#include "RigCaseCellResultsData.h" #include "RigCaseCellResultsData.h"
#include "RigEclipseCaseData.h" #include "RigEclipseCaseData.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include "RigNNCData.h"
#include "RigReservoirBuilderMock.h" #include "RigReservoirBuilderMock.h"
#include "RimEclipseCase.h" #include "RimEclipseCase.h"
@ -101,7 +102,7 @@ RigNumberOfFloodedPoreVolumesCalculator::RigNumberOfFloodedPoreVolumesCalculator
std::vector<const std::vector<double>*> flowrateKatAllTimeSteps; std::vector<const std::vector<double>*> flowrateKatAllTimeSteps;
RigNNCData* nncData = eclipseCaseData->mainGrid()->nncData(); RigNNCData* nncData = eclipseCaseData->mainGrid()->nncData();
const RigConnectionContainer connections = nncData->connections(); const RigConnectionContainer connections = nncData->allConnections();
progress.incrementProgress(); progress.incrementProgress();

View File

@ -24,6 +24,7 @@
#include "RigCell.h" #include "RigCell.h"
#include "RigEclipseCaseData.h" #include "RigEclipseCaseData.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include "RigNNCData.h"
#include "RigSimWellData.h" #include "RigSimWellData.h"
/* rand example: guess the number */ /* rand example: guess the number */
@ -557,7 +558,7 @@ void RigReservoirBuilderMock::addFaults( RigEclipseCaseData* eclipseCase )
addNnc( grid, i1, j1, k1, i2, j2, k2, nncConnections ); addNnc( grid, i1, j1, k1, i2, j2, k2, nncConnections );
} }
grid->nncData()->setNativeConnections( nncConnections ); grid->nncData()->setEclipseConnections( nncConnections );
std::vector<double>& tranVals = std::vector<double>& tranVals =
grid->nncData()->makeStaticConnectionScalarResult( RiaDefines::propertyNameCombTrans() ); grid->nncData()->makeStaticConnectionScalarResult( RiaDefines::propertyNameCombTrans() );

View File

@ -27,6 +27,7 @@
#include "RigCaseCellResultsData.h" #include "RigCaseCellResultsData.h"
#include "RigEclipseCaseData.h" #include "RigEclipseCaseData.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include "RigNNCData.h"
#include "Rim3dOverlayInfoConfig.h" #include "Rim3dOverlayInfoConfig.h"
#include "RimCellEdgeColors.h" #include "RimCellEdgeColors.h"
@ -64,13 +65,13 @@ public:
RigMainGrid* mainGrid = rimCase->eclipseCaseData()->mainGrid(); RigMainGrid* mainGrid = rimCase->eclipseCaseData()->mainGrid();
size_t connectionCount = mainGrid->nncData()->connections().size(); size_t connectionCount = mainGrid->nncData()->allConnections().size();
socketStream << (quint64)connectionCount; 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& cell1 = mainGrid->globalCellArray()[connection.c1GlobIdx()];
const RigCell& cell2 = mainGrid->globalCellArray()[connection.c2GlobIdx()]; const RigCell& cell2 = mainGrid->globalCellArray()[connection.c2GlobIdx()];
@ -163,7 +164,7 @@ public:
} }
// then the connection count and time step count. // 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(); size_t timeStepCount = requestedTimeSteps.size();
socketStream << (quint64)connectionCount; socketStream << (quint64)connectionCount;
@ -216,7 +217,7 @@ public:
} }
// connection count // connection count
size_t connectionCount = mainGrid->nncData()->connections().size(); size_t connectionCount = mainGrid->nncData()->allConnections().size();
socketStream << (quint64)connectionCount; socketStream << (quint64)connectionCount;
RiaSocketTools::writeBlockData( server, RiaSocketTools::writeBlockData( server,
@ -479,7 +480,7 @@ public:
RigNNCData* nncData = m_currentReservoir->eclipseCaseData()->mainGrid()->nncData(); RigNNCData* nncData = m_currentReservoir->eclipseCaseData()->mainGrid()->nncData();
size_t connectionCountFromOctave = m_bytesPerTimeStepToRead / sizeof( double ); size_t connectionCountFromOctave = m_bytesPerTimeStepToRead / sizeof( double );
size_t connectionCount = nncData->connections().size(); size_t connectionCount = nncData->allConnections().size();
std::vector<std::vector<double>>* resultsToAdd = std::vector<std::vector<double>>* resultsToAdd =
nncData->generatedConnectionScalarResultByName( m_currentPropertyName ); nncData->generatedConnectionScalarResultByName( m_currentPropertyName );

View File

@ -21,6 +21,8 @@
#include "RigCellGeometryTools.h" #include "RigCellGeometryTools.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include <cmath> // Needed for HUGE_VAL on Linux
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -217,7 +217,7 @@ bool RiuCellAndNncPickEventHandler::handle3dPickEvent( const Ric3dPickEvent& eve
if ( eclipseView ) if ( eclipseView )
{ {
RigMainGrid* mainGrid = eclipseView->eclipseCase()->eclipseCaseData()->mainGrid(); 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 ); mainGrid->gridAndGridLocalIdxFromGlobalCellIdx( nncConn.c1GlobIdx(), &gridLocalCellIndex );
} }
@ -308,7 +308,7 @@ bool RiuCellAndNncPickEventHandler::handle3dPickEvent( const Ric3dPickEvent& eve
selectedItem->m_nncIndex == nncIndex ) selectedItem->m_nncIndex == nncIndex )
{ {
RigMainGrid* mainGrid = eclipseView->eclipseCase()->eclipseCaseData()->mainGrid(); 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; size_t c1LocalIdx = cvf::UNDEFINED_SIZE_T;
const RigGridBase* grid1 = mainGrid->gridAndGridLocalIdxFromGlobalCellIdx(nncConn.c1GlobIdx(), &c1LocalIdx); const RigGridBase* grid1 = mainGrid->gridAndGridLocalIdxFromGlobalCellIdx(nncConn.c1GlobIdx(), &c1LocalIdx);

View File

@ -23,6 +23,7 @@
#include "RigEclipseCaseData.h" #include "RigEclipseCaseData.h"
#include "RigFormationNames.h" #include "RigFormationNames.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include "RigNNCData.h"
#include "RigResultAccessor.h" #include "RigResultAccessor.h"
#include "RigResultAccessorFactory.h" #include "RigResultAccessorFactory.h"
#include "RigSimWellData.h" #include "RigSimWellData.h"
@ -444,9 +445,9 @@ QString RiuResultTextBuilder::nncResultText()
RigNNCData* nncData = grid->nncData(); RigNNCData* nncData = grid->nncData();
CVF_ASSERT( 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() ); cvf::StructGridInterface::FaceEnum face( conn.face() );
@ -800,11 +801,11 @@ QString RiuResultTextBuilder::nncDetails()
RigNNCData* nncData = grid->nncData(); RigNNCData* nncData = grid->nncData();
CVF_ASSERT( nncData ); CVF_ASSERT( nncData );
if ( nncData && m_nncIndex < nncData->connections().size() ) if ( nncData && m_nncIndex < nncData->allConnections().size() )
{ {
text += "-- NNC details --\n"; text += "-- NNC details --\n";
{ {
const RigConnection& conn = nncData->connections()[m_nncIndex]; const RigConnection& conn = nncData->allConnections()[m_nncIndex];
cvf::StructGridInterface::FaceEnum face( conn.face() ); cvf::StructGridInterface::FaceEnum face( conn.face() );
// First cell of NNC // First cell of NNC

View File

@ -25,6 +25,7 @@
#include "RigEclipseResultAddress.h" #include "RigEclipseResultAddress.h"
#include "RigEclipseResultInfo.h" #include "RigEclipseResultInfo.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include "RigNNCData.h"
#include "RimEclipseCase.h" #include "RimEclipseCase.h"
#include "RimEclipseCellColors.h" #include "RimEclipseCellColors.h"
@ -89,7 +90,7 @@ rips::Vec3i* createConnectionVec3i( const RigCell& cell )
grpc::Status RiaNNCConnectionsStateHandler::assignReply( rips::NNCConnections* reply ) grpc::Status RiaNNCConnectionsStateHandler::assignReply( rips::NNCConnections* reply )
{ {
RigMainGrid* mainGrid = m_eclipseCase->eclipseCaseData()->mainGrid(); RigMainGrid* mainGrid = m_eclipseCase->eclipseCaseData()->mainGrid();
const RigConnectionContainer& connections = mainGrid->nncData()->connections(); const RigConnectionContainer& connections = mainGrid->nncData()->allConnections();
size_t connectionCount = connections.size(); size_t connectionCount = connections.size();
const size_t packageSize = RiaGrpcServiceInterface::numberOfDataUnitsInPackage( sizeof( rips::NNCConnection ) ); const size_t packageSize = RiaGrpcServiceInterface::numberOfDataUnitsInPackage( sizeof( rips::NNCConnection ) );
@ -189,7 +190,7 @@ const std::vector<double>* getScalarResultByName( const RigNNCData* nncD
grpc::Status RiaNNCValuesStateHandler::assignReply( rips::NNCValues* reply ) grpc::Status RiaNNCValuesStateHandler::assignReply( rips::NNCValues* reply )
{ {
RigMainGrid* mainGrid = m_eclipseCase->eclipseCaseData()->mainGrid(); RigMainGrid* mainGrid = m_eclipseCase->eclipseCaseData()->mainGrid();
auto connections = mainGrid->nncData()->connections(); auto connections = mainGrid->nncData()->allConnections();
QString propertyName = QString::fromStdString( m_request->property_name() ); QString propertyName = QString::fromStdString( m_request->property_name() );
RigNNCData::NNCResultType propertyType = static_cast<RigNNCData::NNCResultType>( m_request->property_type() ); RigNNCData::NNCResultType propertyType = static_cast<RigNNCData::NNCResultType>( m_request->property_type() );
@ -362,7 +363,7 @@ grpc::Status RiaNNCInputValuesStateHandler::init( const NNCValuesInputRequest* r
m_eclipseCase->results( m_porosityModel )->ensureKnownResultLoaded( resAddr ); m_eclipseCase->results( m_porosityModel )->ensureKnownResultLoaded( resAddr );
nncData->setEclResultAddress( m_propertyName, 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 ); resultsToAdd->resize( m_cellCount, HUGE_VAL );