diff --git a/ApplicationCode/ProjectDataModel/Completions/RimSimWellFracture.cpp b/ApplicationCode/ProjectDataModel/Completions/RimSimWellFracture.cpp index c30da5922c..d6f67a8d4b 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimSimWellFracture.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimSimWellFracture.cpp @@ -360,9 +360,12 @@ QString RimSimWellFracture::createOneBasedIJKText() const size_t i,j,k; size_t anchorCellIdx = findAnchorEclipseCell(mainGrid); if (anchorCellIdx == cvf::UNDEFINED_SIZE_T) return ""; + + size_t gridLocalCellIdx; + const RigGridBase* hostGrid = mainGrid->gridAndGridLocalIdxFromGlobalCellIdx(anchorCellIdx, &gridLocalCellIdx); - bool ok = mainGrid->ijkFromCellIndex(anchorCellIdx, &i, &j, &k); + bool ok = hostGrid->ijkFromCellIndex(gridLocalCellIdx, &i, &j, &k); if (!ok) return ""; - return QString("[%1, %2, %3]").arg(i + 1).arg(j + 1).arg(k + 1); + return QString("Grid %1: [%2, %3, %4]").arg(QString::fromStdString(hostGrid->gridName())).arg(i + 1).arg(j + 1).arg(k + 1); } diff --git a/ApplicationCode/ProjectDataModel/RimFaultInViewCollection.cpp b/ApplicationCode/ProjectDataModel/RimFaultInViewCollection.cpp index 1c906bc74c..5bfafccde1 100644 --- a/ApplicationCode/ProjectDataModel/RimFaultInViewCollection.cpp +++ b/ApplicationCode/ProjectDataModel/RimFaultInViewCollection.cpp @@ -285,10 +285,8 @@ void RimFaultInViewCollection::syncronizeFaults() QString secondConnectionText; { - const RigCell& cell = mainGrid->globalCellArray()[nncConnections[i].m_c1GlobIdx]; - - RigGridBase* hostGrid = cell.hostGrid(); - size_t gridLocalCellIndex = cell.gridLocalCellIndex(); + size_t gridLocalCellIndex; + const RigGridBase* hostGrid = mainGrid->gridAndGridLocalIdxFromGlobalCellIdx(nncConnections[i].m_c1GlobIdx, &gridLocalCellIndex); size_t i, j, k; if (hostGrid->ijkFromCellIndex(gridLocalCellIndex, &i, &j, &k)) @@ -308,10 +306,8 @@ void RimFaultInViewCollection::syncronizeFaults() } { - const RigCell& cell = mainGrid->globalCellArray()[nncConnections[i].m_c2GlobIdx]; - - RigGridBase* hostGrid = cell.hostGrid(); - size_t gridLocalCellIndex = cell.gridLocalCellIndex(); + size_t gridLocalCellIndex; + const RigGridBase* hostGrid = mainGrid->gridAndGridLocalIdxFromGlobalCellIdx(nncConnections[i].m_c2GlobIdx, &gridLocalCellIndex); size_t i, j, k; if (hostGrid->ijkFromCellIndex(gridLocalCellIndex, &i, &j, &k)) diff --git a/ApplicationCode/ReservoirDataModel/Completions/RigCompletionDataGridCell.cpp b/ApplicationCode/ReservoirDataModel/Completions/RigCompletionDataGridCell.cpp index ea48f8c42c..5e2c3a8c2a 100644 --- a/ApplicationCode/ReservoirDataModel/Completions/RigCompletionDataGridCell.cpp +++ b/ApplicationCode/ReservoirDataModel/Completions/RigCompletionDataGridCell.cpp @@ -33,12 +33,11 @@ RigCompletionDataGridCell::RigCompletionDataGridCell(size_t globalCellIndex, con { if (mainGrid) { - const RigCell& cell = mainGrid->globalCellArray()[globalCellIndex]; - RigGridBase* grid = cell.hostGrid(); + size_t gridLocalCellIndex; + const RigGridBase* grid = mainGrid->gridAndGridLocalIdxFromGlobalCellIdx(globalCellIndex, &gridLocalCellIndex); + if (grid) { - size_t gridLocalCellIndex = cell.gridLocalCellIndex(); - size_t i = 0; size_t j = 0; size_t k = 0; diff --git a/ApplicationCode/ReservoirDataModel/RigMainGrid.cpp b/ApplicationCode/ReservoirDataModel/RigMainGrid.cpp index 5853a121a4..adcd09cd42 100644 --- a/ApplicationCode/ReservoirDataModel/RigMainGrid.cpp +++ b/ApplicationCode/ReservoirDataModel/RigMainGrid.cpp @@ -47,6 +47,33 @@ RigMainGrid::~RigMainGrid(void) { } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigGridBase* RigMainGrid::gridAndGridLocalIdxFromGlobalCellIdx(size_t globalCellIdx, size_t* gridLocalCellIdx) +{ + CVF_ASSERT(globalCellIdx < m_cells.size()); + RigCell& cell = m_cells[globalCellIdx]; + RigGridBase* hostGrid = cell.hostGrid(); + CVF_ASSERT(hostGrid); + *gridLocalCellIdx = cell.gridLocalCellIndex(); + return hostGrid; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const RigGridBase* RigMainGrid::gridAndGridLocalIdxFromGlobalCellIdx(size_t globalCellIdx, size_t* gridLocalCellIdx) const +{ + CVF_ASSERT(globalCellIdx < m_cells.size()); + const RigCell& cell = m_cells[globalCellIdx]; + const RigGridBase* hostGrid = cell.hostGrid(); + CVF_ASSERT(hostGrid); + *gridLocalCellIdx = cell.gridLocalCellIndex(); + return hostGrid; +} + + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -313,8 +340,10 @@ void RigMainGrid::calculateFaults(const RigActiveCellInfo* activeCellInfo) // Find neighbor cell if (firstNO_FAULTFaceForCell) // To avoid doing this for every face, and only when detecting a NO_FAULT { - hostGrid = m_cells[gcIdx].hostGrid(); - hostGrid->ijkFromCellIndex(m_cells[gcIdx].gridLocalCellIndex(), &i,&j, &k); + size_t gridLocalCellIndex; + hostGrid = this->gridAndGridLocalIdxFromGlobalCellIdx(gcIdx, &gridLocalCellIndex); + + hostGrid->ijkFromCellIndex(gridLocalCellIndex, &i,&j, &k); isCellActive = activeCellInfo->isActive(gcIdx); firstNO_FAULTFaceForCell = false; diff --git a/ApplicationCode/ReservoirDataModel/RigMainGrid.h b/ApplicationCode/ReservoirDataModel/RigMainGrid.h index 2b5b1e431f..7e1fdb6098 100644 --- a/ApplicationCode/ReservoirDataModel/RigMainGrid.h +++ b/ApplicationCode/ReservoirDataModel/RigMainGrid.h @@ -51,6 +51,9 @@ public: std::vector& globalCellArray() {return m_cells;} const std::vector& globalCellArray() const {return m_cells;} + RigGridBase* gridAndGridLocalIdxFromGlobalCellIdx(size_t globalCellIdx, size_t* gridLocalCellIdx); + const RigGridBase* gridAndGridLocalIdxFromGlobalCellIdx(size_t globalCellIdx, size_t* gridLocalCellIdx) const; + const RigCell& cellByGridAndGridLocalCellIdx(size_t gridIdx, size_t gridLocalCellIdx) const; size_t reservoirCellIndexByGridAndGridLocalCellIndex(size_t gridIdx, size_t gridLocalCellIdx) const; diff --git a/ApplicationCode/UserInterface/RiuViewerCommands.cpp b/ApplicationCode/UserInterface/RiuViewerCommands.cpp index 930316aebb..3f114e3962 100644 --- a/ApplicationCode/UserInterface/RiuViewerCommands.cpp +++ b/ApplicationCode/UserInterface/RiuViewerCommands.cpp @@ -853,11 +853,8 @@ void RiuViewerCommands::findCellAndGridIndex(const RivIntersectionSourceInfo* cr crossSectionSourceInfo->crossSection()->firstAncestorOrThisOfType(eclipseView); size_t globalCellIndex = crossSectionSourceInfo->triangleToCellIndex()[firstPartTriangleIndex]; - - const RigCell& cell = eclipseView->mainGrid()->globalCellArray()[globalCellIndex]; - - *cellIndex = cell.gridLocalCellIndex(); - *gridIndex = cell.hostGrid()->gridIndex(); + const RigGridBase* hostGrid = eclipseView->mainGrid()->gridAndGridLocalIdxFromGlobalCellIdx(globalCellIndex, cellIndex); + *gridIndex = hostGrid->gridIndex(); } else if (geomCase) {