mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-10 15:36:09 -06:00
#3300 Fix crash when loading formation indices as part of a project file.
* Rename structGrid() to getOrCreateStructGrid() to make it obvious that it allocates internally.
This commit is contained in:
parent
116c61eaf8
commit
4fd9cdfda3
@ -71,7 +71,7 @@ void RigFemPart::appendElement(RigElementType elmType, int id, const int* connec
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const RigFemPartGrid* RigFemPart::structGrid() const
|
||||
const RigFemPartGrid* RigFemPart::getOrCreateStructGrid() const
|
||||
{
|
||||
if (m_structGrid.isNull())
|
||||
{
|
||||
|
@ -85,7 +85,7 @@ public:
|
||||
|
||||
cvf::Vec3f faceNormal(int elmentIndex, int faceIndex) const;
|
||||
|
||||
const RigFemPartGrid* structGrid() const;
|
||||
const RigFemPartGrid* getOrCreateStructGrid() const;
|
||||
const std::vector<int>& elementIdxToId() const { return m_elementId; }
|
||||
|
||||
private:
|
||||
|
@ -1516,7 +1516,7 @@ RigFemScalarResultFrames* RigFemPartResultsCollection::calculateCompactionValues
|
||||
part->findIntersectingCells(bb, &refElementCandidates);
|
||||
|
||||
// Also make sure the struct grid is created, as this is required before using OpenMP
|
||||
part->structGrid();
|
||||
part->getOrCreateStructGrid();
|
||||
}
|
||||
|
||||
#pragma omp parallel for
|
||||
@ -1832,6 +1832,9 @@ RigFemScalarResultFrames* RigFemPartResultsCollection::calculateFormationIndices
|
||||
|
||||
if (activeFormNames)
|
||||
{
|
||||
// Has to be done before the parallel loop because the first call allocates.
|
||||
const RigFemPartGrid* structGrid = femPart->getOrCreateStructGrid();
|
||||
|
||||
int elementCount = femPart->elementCount();
|
||||
|
||||
#pragma omp parallel for
|
||||
@ -1841,7 +1844,7 @@ RigFemScalarResultFrames* RigFemPartResultsCollection::calculateFormationIndices
|
||||
int elmNodeCount = RigFemTypes::elmentNodeCount(elmType);
|
||||
|
||||
size_t i, j, k;
|
||||
bool validIndex = femPart->structGrid()->ijkFromCellIndex(elmIdx, &i, &j, &k);
|
||||
bool validIndex = structGrid->ijkFromCellIndex(elmIdx, &i, &j, &k);
|
||||
if (validIndex)
|
||||
{
|
||||
int formNameIdx = activeFormNames->formationIndexFromKLayerIdx(k);
|
||||
@ -2771,7 +2774,7 @@ void findReferenceElementForNode(const RigFemPart& part, size_t nodeIdx, size_t
|
||||
std::vector<size_t> refElementCandidates;
|
||||
part.findIntersectingCells(bb, &refElementCandidates);
|
||||
|
||||
const RigFemPartGrid* grid = part.structGrid();
|
||||
const RigFemPartGrid* grid = part.getOrCreateStructGrid();
|
||||
const std::vector<cvf::Vec3f>& nodeCoords = part.nodes().coordinates;
|
||||
|
||||
refElement->elementIdx = cvf::UNDEFINED_SIZE_T;
|
||||
|
@ -57,7 +57,7 @@ void RivFemElmVisibilityCalculator::computeRangeVisibility(cvf::UByteArray* elmV
|
||||
{
|
||||
elmVisibilities->resize(femPart->elementCount());
|
||||
|
||||
const RigFemPartGrid* grid = femPart->structGrid();
|
||||
const RigFemPartGrid* grid = femPart->getOrCreateStructGrid();
|
||||
|
||||
if (rangeFilter.hasIncludeRanges())
|
||||
{
|
||||
|
@ -145,7 +145,7 @@ void RimGeoMechResultDefinition::defineUiOrdering(QString uiConfigName, caf::Pdm
|
||||
{
|
||||
if (m_geomCase && m_geomCase->geoMechData() )
|
||||
{
|
||||
m_compactionRefLayerUiField = (int)m_geomCase->geoMechData()->femParts()->part(0)->structGrid()->reservoirIJKBoundingBox().first.z();
|
||||
m_compactionRefLayerUiField = (int)m_geomCase->geoMechData()->femParts()->part(0)->getOrCreateStructGrid()->reservoirIJKBoundingBox().first.z();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -220,7 +220,7 @@ QList<caf::PdmOptionItemInfo> RimGeoMechResultDefinition::calculateValueOptions(
|
||||
{
|
||||
if (m_geomCase->geoMechData())
|
||||
{
|
||||
size_t kCount = m_geomCase->geoMechData()->femParts()->part(0)->structGrid()->gridPointCountK() - 1;
|
||||
size_t kCount = m_geomCase->geoMechData()->femParts()->part(0)->getOrCreateStructGrid()->gridPointCountK() - 1;
|
||||
for ( size_t layerIdx = 0; layerIdx < kCount; ++layerIdx )
|
||||
{
|
||||
options.push_back(caf::PdmOptionItemInfo(QString::number(layerIdx + 1), (int)layerIdx));
|
||||
|
@ -108,9 +108,9 @@ void RigCaseToCaseRangeFilterMapper::convertRangeFilter(const RimCellRangeFilter
|
||||
}
|
||||
else
|
||||
{
|
||||
maxIIndex = femPart->structGrid()->cellCountI()- 1;
|
||||
maxJIndex = femPart->structGrid()->cellCountJ()- 1;
|
||||
maxKIndex = femPart->structGrid()->cellCountK()- 1;
|
||||
maxIIndex = femPart->getOrCreateStructGrid()->cellCountI()- 1;
|
||||
maxJIndex = femPart->getOrCreateStructGrid()->cellCountJ()- 1;
|
||||
maxKIndex = femPart->getOrCreateStructGrid()->cellCountK()- 1;
|
||||
|
||||
}
|
||||
src.EndI = CVF_MIN(src.EndI, maxIIndex);
|
||||
@ -398,7 +398,7 @@ RigCaseToCaseRangeFilterMapper::findBestFemCellFromEclCell(const RigMainGrid* ma
|
||||
|
||||
if (elmIdxToBestMatch != -1)
|
||||
{
|
||||
bool validIndex = dependentFemPart->structGrid()->ijkFromCellIndex(elmIdxToBestMatch, fi, fj, fk);
|
||||
bool validIndex = dependentFemPart->getOrCreateStructGrid()->ijkFromCellIndex(elmIdxToBestMatch, fi, fj, fk);
|
||||
CVF_ASSERT(validIndex);
|
||||
}
|
||||
else
|
||||
@ -429,7 +429,7 @@ RigCaseToCaseRangeFilterMapper::findBestEclCellFromFemCell(const RigFemPart* dep
|
||||
|
||||
bool isEclFaceNormalsOutwards = masterEclGrid->isFaceNormalsOutwards();
|
||||
|
||||
int elementIdx = static_cast<int>(dependentFemPart->structGrid()->cellIndexFromIJK(fi, fj, fk));
|
||||
int elementIdx = static_cast<int>(dependentFemPart->getOrCreateStructGrid()->cellIndexFromIJK(fi, fj, fk));
|
||||
|
||||
cvf::Vec3d elmCorners[8];
|
||||
RigCaseToCaseCellMapperTools::elementCorners(dependentFemPart, elementIdx, elmCorners);
|
||||
|
@ -74,7 +74,7 @@ const cvf::StructGridInterface* RigReservoirGridTools::gridByIndex(RimCase* rimC
|
||||
}
|
||||
else if (geoMechPartCollection)
|
||||
{
|
||||
return geoMechPartCollection->part(gridIndex)->structGrid();
|
||||
return geoMechPartCollection->part(gridIndex)->getOrCreateStructGrid();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
|
@ -618,7 +618,7 @@ public:
|
||||
else if (item->type() == RiuSelectionItem::GEOMECH_SELECTION_OBJECT)
|
||||
{
|
||||
const RiuGeoMechSelectionItem* geomechItem = static_cast<const RiuGeoMechSelectionItem*>(item);
|
||||
validIndex = geomechItem->m_view->femParts()->part(geomechItem->m_gridIndex)->structGrid()->ijkFromCellIndex(geomechItem->m_cellIndex, &i, &j, &k);
|
||||
validIndex = geomechItem->m_view->femParts()->part(geomechItem->m_gridIndex)->getOrCreateStructGrid()->ijkFromCellIndex(geomechItem->m_cellIndex, &i, &j, &k);
|
||||
CVF_ASSERT(validIndex);
|
||||
gridIndex = geomechItem->m_gridIndex;
|
||||
caseId = geomechItem->m_view->geoMechCase()->caseId;
|
||||
|
@ -141,7 +141,7 @@ QString RiuFemResultTextBuilder::geometrySelectionText(QString itemSeparator)
|
||||
size_t i = 0;
|
||||
size_t j = 0;
|
||||
size_t k = 0;
|
||||
if (geomData->femParts()->part(m_gridIndex)->structGrid()->ijkFromCellIndex(m_cellIndex, &i, &j, &k))
|
||||
if (geomData->femParts()->part(m_gridIndex)->getOrCreateStructGrid()->ijkFromCellIndex(m_cellIndex, &i, &j, &k))
|
||||
{
|
||||
// Adjust to 1-based Eclipse indexing
|
||||
i++;
|
||||
@ -224,7 +224,7 @@ QString RiuFemResultTextBuilder::formationDetails()
|
||||
{
|
||||
size_t i = 0;
|
||||
size_t j = 0;
|
||||
geomData->femParts()->part(m_gridIndex)->structGrid()->ijkFromCellIndex(m_cellIndex, &i, &j, &k);
|
||||
geomData->femParts()->part(m_gridIndex)->getOrCreateStructGrid()->ijkFromCellIndex(m_cellIndex, &i, &j, &k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ QString RiuFemTimeHistoryResultAccessor::geometrySelectionText() const
|
||||
size_t i = 0;
|
||||
size_t j = 0;
|
||||
size_t k = 0;
|
||||
if (m_geoMechCaseData->femParts()->part(m_gridIndex)->structGrid()->ijkFromCellIndex(m_elementIndex, &i, &j, &k))
|
||||
if (m_geoMechCaseData->femParts()->part(m_gridIndex)->getOrCreateStructGrid()->ijkFromCellIndex(m_elementIndex, &i, &j, &k))
|
||||
{
|
||||
// Adjust to 1-based Eclipse indexing
|
||||
i++;
|
||||
|
@ -379,7 +379,7 @@ void RiuMohrsCirclePlot::queryData(RimGeoMechView* geoMechView, size_t gridIndex
|
||||
double frictionAngleDeg = geoMechView->geoMechCase()->frictionAngleDeg();
|
||||
|
||||
size_t i, j, k;
|
||||
bool validIndex = femPart->structGrid()->ijkFromCellIndex(elmIndex, &i, &j, &k);
|
||||
bool validIndex = femPart->getOrCreateStructGrid()->ijkFromCellIndex(elmIndex, &i, &j, &k);
|
||||
|
||||
CVF_ASSERT(validIndex);
|
||||
if (validIndex)
|
||||
|
@ -1079,7 +1079,7 @@ void RiuViewerCommands::ijkFromCellIndex(size_t gridIdx, size_t cellIndex, size
|
||||
|
||||
if (geomView && geomView->geoMechCase())
|
||||
{
|
||||
geomView->femParts()->part(gridIdx)->structGrid()->ijkFromCellIndex(cellIndex, i, j, k);
|
||||
geomView->femParts()->part(gridIdx)->getOrCreateStructGrid()->ijkFromCellIndex(cellIndex, i, j, k);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user