#3186 Fix crash when selecting element nodal (and some other types) for some GeoMech well log curves.

This commit is contained in:
Gaute Lindkvist
2018-08-07 12:38:48 +02:00
parent 8425ea96ad
commit c869ce4430
4 changed files with 64 additions and 20 deletions

View File

@@ -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;
}

View File

@@ -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;}