#2360 Elm props: Use element index in closest result intex calc

This commit is contained in:
Rebecca Cox 2018-01-10 14:14:36 +01:00
parent 65d85b82f7
commit 2ce7e2c3d2
4 changed files with 20 additions and 1 deletions

View File

@ -175,7 +175,9 @@ RigFemScalarResultFrames* RigFemPartResultsCollection::findOrLoadScalarResult(in
std::vector<RigFemScalarResultFrames*> resultsForEachComponent;
for (auto elem : elementProperties)
{
RigFemScalarResultFrames* currentFrames = m_femPartResults[partIndex]->createScalarResult(resVarAddr);
RigFemResultAddress addressForElement(RIG_ELEMENT, elem.first, "");
RigFemScalarResultFrames* currentFrames = m_femPartResults[partIndex]->createScalarResult(addressForElement);
currentFrames->enableAsSingleFrameResult();
currentFrames->frameData(0).swap(elem.second);
}
@ -2175,6 +2177,10 @@ RigFemClosestResultIndexCalculator::RigFemClosestResultIndexCalculator(RigFemPar
{
m_resultIndexToClosestResult = -1;
}
else if (resultPosition == RIG_ELEMENT)
{
m_resultIndexToClosestResult = elementIndex;
}
else
{
m_resultIndexToClosestResult = m_closestElementNodeResIdx;

View File

@ -175,6 +175,7 @@ void RivFemPartGeometryGenerator::computeArrays()
m_quadVerticesToNodeIdx.clear();
m_quadVerticesToGlobalElmNodeIdx.clear();
m_quadVerticesToGlobalElmFaceNodeIdx.clear();
m_quadVerticesToGlobalElmIdx.clear();
trianglesToElements.clear();
trianglesToElementFaces.clear();
@ -183,6 +184,7 @@ void RivFemPartGeometryGenerator::computeArrays()
vertices.reserve(estimatedQuadVxCount);
m_quadVerticesToNodeIdx.reserve(estimatedQuadVxCount);
m_quadVerticesToGlobalElmNodeIdx.reserve(estimatedQuadVxCount);
m_quadVerticesToGlobalElmIdx.reserve(estimatedQuadVxCount);
trianglesToElements.reserve(estimatedQuadVxCount/2);
trianglesToElementFaces.reserve(estimatedQuadVxCount/2);
@ -258,6 +260,11 @@ void RivFemPartGeometryGenerator::computeArrays()
m_quadVerticesToGlobalElmFaceNodeIdx.push_back(elmNodFaceResIdxFaceStart + 2);
m_quadVerticesToGlobalElmFaceNodeIdx.push_back(elmNodFaceResIdxFaceStart + 3);
m_quadVerticesToGlobalElmIdx.push_back(elmIdx);
m_quadVerticesToGlobalElmIdx.push_back(elmIdx);
m_quadVerticesToGlobalElmIdx.push_back(elmIdx);
m_quadVerticesToGlobalElmIdx.push_back(elmIdx);
trianglesToElements.push_back(elmIdx);
trianglesToElements.push_back(elmIdx);
trianglesToElementFaces.push_back(lfIdx);

View File

@ -86,6 +86,7 @@ public:
const std::vector<size_t>& quadVerticesToNodeIdxMapping() const { return m_quadVerticesToNodeIdx;}
const std::vector<size_t>& quadVerticesToGlobalElmNodeIdx() const { return m_quadVerticesToGlobalElmNodeIdx;}
const std::vector<size_t>& quadVerticesToGlobalElmFaceNodeIdx() const { return m_quadVerticesToGlobalElmFaceNodeIdx; }
const std::vector<size_t>& quadVerticesToGlobalElmIdx() const { return m_quadVerticesToGlobalElmIdx; }
RivFemPartTriangleToElmMapper* triangleToElementMapper() { return m_triangleMapper.p();}
@ -107,6 +108,7 @@ private:
std::vector<size_t> m_quadVerticesToNodeIdx;
std::vector<size_t> m_quadVerticesToGlobalElmNodeIdx;
std::vector<size_t> m_quadVerticesToGlobalElmFaceNodeIdx;
std::vector<size_t> m_quadVerticesToGlobalElmIdx;
// Mappings
cvf::ref<RivFemPartTriangleToElmMapper> m_triangleMapper;

View File

@ -259,6 +259,10 @@ void RivFemPartPartMgr::updateCellResultColor(size_t timeStepIndex, RimGeoMechCe
{
vxToResultMapping = &(m_surfaceGenerator.quadVerticesToGlobalElmFaceNodeIdx());
}
else if (resVarAddress.resultPosType == RIG_ELEMENT)
{
vxToResultMapping = &(m_surfaceGenerator.quadVerticesToGlobalElmIdx());
}
if (!vxToResultMapping) return;