From 9f3e27e0aa0768a65b687925faa740d8a417509c Mon Sep 17 00:00:00 2001 From: Mark Olesen <Mark.Olesen@Germany> Date: Tue, 11 Apr 2017 00:53:03 +0200 Subject: [PATCH] BUG: indexing in extendedEdgeMesh::add fails (fixes #448) - 1st problem arises when there are edges, but edgeNormals is empty. The UIndirectList fails (zero elements, non-zero addressing) - further problem occurs if there is a mismatch in the number of edges and edges normals (incorrect indexing on loop). --- .../extendedEdgeMesh/extendedEdgeMesh.C | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/edgeMesh/extendedEdgeMesh/extendedEdgeMesh.C b/src/edgeMesh/extendedEdgeMesh/extendedEdgeMesh.C index 49e240abdfe..331bfe20235 100644 --- a/src/edgeMesh/extendedEdgeMesh/extendedEdgeMesh.C +++ b/src/edgeMesh/extendedEdgeMesh/extendedEdgeMesh.C @@ -1260,20 +1260,36 @@ void Foam::extendedEdgeMesh::add(const extendedEdgeMesh& fem) // ~~~~~~~ // Combine normals - DynamicField<point> newNormals(normals().size()+fem.normals().size()); + DynamicField<point> newNormals + ( + normals().size() + + fem.normals().size() + ); newNormals.append(normals()); newNormals.append(fem.normals()); // Combine and re-index into newNormals - labelListList newEdgeNormals(edgeNormals().size()+fem.edgeNormals().size()); - UIndirectList<labelList>(newEdgeNormals, reverseEdgeMap) = - edgeNormals(); - UIndirectList<labelList>(newEdgeNormals, reverseFemEdgeMap) = - fem.edgeNormals(); - forAll(reverseFemEdgeMap, i) - { - label mapI = reverseFemEdgeMap[i]; + labelListList newEdgeNormals + ( + edgeNormals().size() + + fem.edgeNormals().size() + ); + + UIndirectList<labelList> + ( + newEdgeNormals, + SubList<label>(reverseEdgeMap, edgeNormals().size()) + ) = edgeNormals(); + UIndirectList<labelList> + ( + newEdgeNormals, + SubList<label>(reverseFemEdgeMap, fem.edgeNormals().size()) + ) = fem.edgeNormals(); + + forAll(fem.edgeNormals(), i) + { + const label mapI = reverseFemEdgeMap[i]; labelList& en = newEdgeNormals[mapI]; forAll(en, j) { @@ -1300,9 +1316,10 @@ void Foam::extendedEdgeMesh::add(const extendedEdgeMesh& fem) newFeaturePointNormals, SubList<label>(reverseFemPointMap, fem.featurePointNormals().size()) ) = fem.featurePointNormals(); + forAll(fem.featurePointNormals(), i) { - label mapI = reverseFemPointMap[i]; + const label mapI = reverseFemPointMap[i]; labelList& fn = newFeaturePointNormals[mapI]; forAll(fn, j) { -- GitLab