mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3186 Fix crash when selecting element nodal (and some other types) for some GeoMech well log curves.
This commit is contained in:
@@ -386,3 +386,32 @@ size_t RigFemPart::elementNodeResultCount() const
|
||||
return lastElmResultIdx + 1;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// Generate a sensible index into the result vector based on which result position type is used.
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
size_t RigFemPart::resultValueIdxFromResultPosType(RigFemResultPosEnum resultPosType, int elementIdx, int elmLocalNodeIdx) const
|
||||
{
|
||||
if (resultPosType == RIG_ELEMENT || resultPosType == RIG_FORMATION_NAMES)
|
||||
{
|
||||
CVF_ASSERT(elementIdx < m_elementId.size());
|
||||
return elementIdx;
|
||||
}
|
||||
|
||||
size_t elementNodeResultIdx = this->elementNodeResultIdx(static_cast<int>(elementIdx), elmLocalNodeIdx);
|
||||
CVF_ASSERT(elementNodeResultIdx < elementNodeResultCount());
|
||||
|
||||
if (resultPosType == RIG_ELEMENT_NODAL || resultPosType == RIG_INTEGRATION_POINT)
|
||||
{
|
||||
return elementNodeResultIdx;
|
||||
}
|
||||
else if (resultPosType == RIG_NODAL)
|
||||
{
|
||||
size_t nodeIdx = nodeIdxFromElementNodeResultIdx(elementNodeResultIdx);
|
||||
CVF_ASSERT(nodeIdx < m_nodes.nodeIds.size());
|
||||
return nodeIdx;
|
||||
}
|
||||
|
||||
CVF_ASSERT(false);
|
||||
return 0u;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "RigFemTypes.h"
|
||||
#include "RigFemResultPosEnum.h"
|
||||
#include "cvfObject.h"
|
||||
#include "cvfAssert.h"
|
||||
#include "cvfBoundingBox.h"
|
||||
@@ -63,7 +64,7 @@ public:
|
||||
size_t elementNodeResultIdx(int elementIdx, int elmLocalNodeIdx) const { return m_elementConnectivityStartIndices[elementIdx] + elmLocalNodeIdx;}
|
||||
size_t elementNodeResultCount() const;
|
||||
int nodeIdxFromElementNodeResultIdx(size_t elmNodeResultIdx) const { return m_allElementConnectivities[elmNodeResultIdx]; }
|
||||
|
||||
size_t resultValueIdxFromResultPosType(RigFemResultPosEnum resultPosType, int elementIdx, int elmLocalNodeIdx) const;
|
||||
RigFemPartNodes& nodes() {return m_nodes;}
|
||||
const RigFemPartNodes& nodes() const {return m_nodes;}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user