mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Fix crash due to global/local grid index mixup when creating fractures on SimWellPaths.
* Introduces a convenience method on the main grid * Also converts some callers to use the convenience method.
This commit is contained in:
@@ -360,9 +360,12 @@ QString RimSimWellFracture::createOneBasedIJKText() const
|
|||||||
size_t i,j,k;
|
size_t i,j,k;
|
||||||
size_t anchorCellIdx = findAnchorEclipseCell(mainGrid);
|
size_t anchorCellIdx = findAnchorEclipseCell(mainGrid);
|
||||||
if (anchorCellIdx == cvf::UNDEFINED_SIZE_T) return "";
|
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 "";
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -285,10 +285,8 @@ void RimFaultInViewCollection::syncronizeFaults()
|
|||||||
QString secondConnectionText;
|
QString secondConnectionText;
|
||||||
|
|
||||||
{
|
{
|
||||||
const RigCell& cell = mainGrid->globalCellArray()[nncConnections[i].m_c1GlobIdx];
|
size_t gridLocalCellIndex;
|
||||||
|
const RigGridBase* hostGrid = mainGrid->gridAndGridLocalIdxFromGlobalCellIdx(nncConnections[i].m_c1GlobIdx, &gridLocalCellIndex);
|
||||||
RigGridBase* hostGrid = cell.hostGrid();
|
|
||||||
size_t gridLocalCellIndex = cell.gridLocalCellIndex();
|
|
||||||
|
|
||||||
size_t i, j, k;
|
size_t i, j, k;
|
||||||
if (hostGrid->ijkFromCellIndex(gridLocalCellIndex, &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];
|
size_t gridLocalCellIndex;
|
||||||
|
const RigGridBase* hostGrid = mainGrid->gridAndGridLocalIdxFromGlobalCellIdx(nncConnections[i].m_c2GlobIdx, &gridLocalCellIndex);
|
||||||
RigGridBase* hostGrid = cell.hostGrid();
|
|
||||||
size_t gridLocalCellIndex = cell.gridLocalCellIndex();
|
|
||||||
|
|
||||||
size_t i, j, k;
|
size_t i, j, k;
|
||||||
if (hostGrid->ijkFromCellIndex(gridLocalCellIndex, &i, &j, &k))
|
if (hostGrid->ijkFromCellIndex(gridLocalCellIndex, &i, &j, &k))
|
||||||
|
|||||||
@@ -33,12 +33,11 @@ RigCompletionDataGridCell::RigCompletionDataGridCell(size_t globalCellIndex, con
|
|||||||
{
|
{
|
||||||
if (mainGrid)
|
if (mainGrid)
|
||||||
{
|
{
|
||||||
const RigCell& cell = mainGrid->globalCellArray()[globalCellIndex];
|
size_t gridLocalCellIndex;
|
||||||
RigGridBase* grid = cell.hostGrid();
|
const RigGridBase* grid = mainGrid->gridAndGridLocalIdxFromGlobalCellIdx(globalCellIndex, &gridLocalCellIndex);
|
||||||
|
|
||||||
if (grid)
|
if (grid)
|
||||||
{
|
{
|
||||||
size_t gridLocalCellIndex = cell.gridLocalCellIndex();
|
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
size_t j = 0;
|
size_t j = 0;
|
||||||
size_t k = 0;
|
size_t k = 0;
|
||||||
|
|||||||
@@ -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
|
// Find neighbor cell
|
||||||
if (firstNO_FAULTFaceForCell) // To avoid doing this for every face, and only when detecting a NO_FAULT
|
if (firstNO_FAULTFaceForCell) // To avoid doing this for every face, and only when detecting a NO_FAULT
|
||||||
{
|
{
|
||||||
hostGrid = m_cells[gcIdx].hostGrid();
|
size_t gridLocalCellIndex;
|
||||||
hostGrid->ijkFromCellIndex(m_cells[gcIdx].gridLocalCellIndex(), &i,&j, &k);
|
hostGrid = this->gridAndGridLocalIdxFromGlobalCellIdx(gcIdx, &gridLocalCellIndex);
|
||||||
|
|
||||||
|
hostGrid->ijkFromCellIndex(gridLocalCellIndex, &i,&j, &k);
|
||||||
isCellActive = activeCellInfo->isActive(gcIdx);
|
isCellActive = activeCellInfo->isActive(gcIdx);
|
||||||
|
|
||||||
firstNO_FAULTFaceForCell = false;
|
firstNO_FAULTFaceForCell = false;
|
||||||
|
|||||||
@@ -51,6 +51,9 @@ public:
|
|||||||
std::vector<RigCell>& globalCellArray() {return m_cells;}
|
std::vector<RigCell>& globalCellArray() {return m_cells;}
|
||||||
const std::vector<RigCell>& globalCellArray() const {return m_cells;}
|
const std::vector<RigCell>& 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;
|
const RigCell& cellByGridAndGridLocalCellIdx(size_t gridIdx, size_t gridLocalCellIdx) const;
|
||||||
size_t reservoirCellIndexByGridAndGridLocalCellIndex(size_t gridIdx, size_t gridLocalCellIdx) const;
|
size_t reservoirCellIndexByGridAndGridLocalCellIndex(size_t gridIdx, size_t gridLocalCellIdx) const;
|
||||||
|
|
||||||
|
|||||||
@@ -853,11 +853,8 @@ void RiuViewerCommands::findCellAndGridIndex(const RivIntersectionSourceInfo* cr
|
|||||||
crossSectionSourceInfo->crossSection()->firstAncestorOrThisOfType(eclipseView);
|
crossSectionSourceInfo->crossSection()->firstAncestorOrThisOfType(eclipseView);
|
||||||
|
|
||||||
size_t globalCellIndex = crossSectionSourceInfo->triangleToCellIndex()[firstPartTriangleIndex];
|
size_t globalCellIndex = crossSectionSourceInfo->triangleToCellIndex()[firstPartTriangleIndex];
|
||||||
|
const RigGridBase* hostGrid = eclipseView->mainGrid()->gridAndGridLocalIdxFromGlobalCellIdx(globalCellIndex, cellIndex);
|
||||||
const RigCell& cell = eclipseView->mainGrid()->globalCellArray()[globalCellIndex];
|
*gridIndex = hostGrid->gridIndex();
|
||||||
|
|
||||||
*cellIndex = cell.gridLocalCellIndex();
|
|
||||||
*gridIndex = cell.hostGrid()->gridIndex();
|
|
||||||
}
|
}
|
||||||
else if (geomCase)
|
else if (geomCase)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user