diff --git a/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchToolsSortPoints.C b/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchToolsSortPoints.C index 5cc074ba96e579dcc800b5bbd0dc32af97894add..e6e507caaa61f2b2e0b62c616e0fcb1a9a1c751d 100644 --- a/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchToolsSortPoints.C +++ b/src/OpenFOAM/meshes/primitiveMesh/PatchTools/PatchToolsSortPoints.C @@ -49,7 +49,7 @@ Foam::PatchTools::sortedPointEdges const labelListList& faceEdges = p.faceEdges(); // create the lists for the various results. (resized on completion) - labelListList sortedPointEdges(pointEdges.size()); + labelListList sortedPointEdges(pointEdges); DynamicList<label> newEdgeList; @@ -57,12 +57,16 @@ Foam::PatchTools::sortedPointEdges { const labelList& pEdges = pointEdges[pointI]; + label nPointEdges = pEdges.size(); + label edgeI = pEdges[0]; label prevFaceI = edgeFaces[edgeI][0]; newEdgeList.clear(); - newEdgeList.setCapacity(pEdges.size()); + newEdgeList.setCapacity(nPointEdges); + + label nVisitedEdges = 0; do { @@ -103,10 +107,42 @@ Foam::PatchTools::sortedPointEdges prevFaceI = faceI; + nVisitedEdges++; + if (nVisitedEdges > nPointEdges) + { + WarningIn("Foam::PatchTools::sortedPointEdges()") + << "Unable to order pointEdges as the face connections " + << "are not circular" << nl + << " Original pointEdges = " << pEdges << nl + << " New pointEdges = " << newEdgeList + << endl; + + newEdgeList = pEdges; + + break; + } + } while (edgeI != pEdges[0]); - if (newEdgeList.size() == pEdges.size()) + if (newEdgeList.size() == nPointEdges) { + forAll(pEdges, eI) + { + if (findIndex(newEdgeList, pEdges[eI]) == -1) + { + WarningIn("Foam::PatchTools::sortedPointEdges()") + << "Cannot find all original edges in the new list" + << nl + << " Original pointEdges = " << pEdges << nl + << " New pointEdges = " << newEdgeList + << endl; + + newEdgeList = pEdges; + + break; + } + } + sortedPointEdges[pointI] = newEdgeList; } }