diff --git a/src/edgeMesh/extendedFeatureEdgeMesh/extendedFeatureEdgeMeshTemplates.C b/src/edgeMesh/extendedFeatureEdgeMesh/extendedFeatureEdgeMeshTemplates.C index 63cef912b1302db4e27671622fe8b37f557f685a..aec975d54d65f9fade292237f9c35c82711b3b1a 100644 --- a/src/edgeMesh/extendedFeatureEdgeMesh/extendedFeatureEdgeMeshTemplates.C +++ b/src/edgeMesh/extendedFeatureEdgeMesh/extendedFeatureEdgeMeshTemplates.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -59,14 +59,14 @@ void Foam::extendedFeatureEdgeMesh::sortPointsAndEdges DynamicList<vector> norms; vectorField edgeDirections(nFeatEds); labelListList edgeNormals(nFeatEds); + labelListList normalDirections(nFeatEds); DynamicList<label> regionEdges; // Keep track of the ordered feature point feature edges labelListList featurePointFeatureEdges(nFeatPts); forAll(featurePointFeatureEdges, pI) { - featurePointFeatureEdges[pI] = - labelList(pointEdges[featurePoints[pI]].size(), -1); + featurePointFeatureEdges[pI] = pointEdges[featurePoints[pI]]; } // Mapping between old and new indices, there is entry in the map for each @@ -74,6 +74,10 @@ void Foam::extendedFeatureEdgeMesh::sortPointsAndEdges // >= 0 corresponds to the index labelList pointMap(sFeatLocalPts.size(), -1); + // Mapping between surface edge index and its feature edge index. -1 if it + // is not a feature edge + labelList edgeMap(sFeatEds.size(), -1); + // Noting when the normal of a face has been used so not to duplicate labelList faceMap(surf.size(), -1); @@ -98,7 +102,11 @@ void Foam::extendedFeatureEdgeMesh::sortPointsAndEdges { label sFEI = featureEdges[i]; - const edge& fE(sFeatEds[sFEI]); + edgeMap[sFEI] = i; + + const edge& fE = sFeatEds[sFEI]; + + edgeDirections[i] = fE.vec(sFeatLocalPts); // Check to see if the points have been already used if (pointMap[fE.start()] == -1) @@ -150,51 +158,37 @@ void Foam::extendedFeatureEdgeMesh::sortPointsAndEdges edStatus[i] = classifyEdge(norms, edgeNormals[i], fC0tofC1); - edgeDirections[i] = fE.vec(sFeatLocalPts); - if (isRegionFeatureEdge[i]) { regionEdges.append(i); } - - forAll(featurePointFeatureEdges, pI) - { - const labelList& fpfEdges = pointEdges[featurePoints[pI]]; - - labelList& fpfe = featurePointFeatureEdges[pI]; - - forAll(fpfEdges, eI) - { - if (sFEI == fpfEdges[eI]) - { - fpfe[eI] = i; - } - } - } } + // Populate feature point feature edges + DynamicList<label> newFeatureEdges; + forAll(featurePointFeatureEdges, pI) { const labelList& fpfe = featurePointFeatureEdges[pI]; - DynamicList<label> newFeatureEdges(fpfe.size()); + newFeatureEdges.setCapacity(fpfe.size()); forAll(fpfe, eI) { - const label edgeIndex = fpfe[eI]; + const label oldEdgeIndex = fpfe[eI]; + const label newEdgeIndex = edgeMap[oldEdgeIndex]; - if (edgeIndex != -1) + if (newEdgeIndex != -1) { - newFeatureEdges.append(edgeIndex); + newFeatureEdges.append(newEdgeIndex); } } - featurePointFeatureEdges[pI] = newFeatureEdges; + featurePointFeatureEdges[pI].transfer(newFeatureEdges); } // Reorder the edges by classification - List<DynamicList<label> > allEds(nEdgeTypes); DynamicList<label>& externalEds(allEds[0]); @@ -277,7 +271,8 @@ void Foam::extendedFeatureEdgeMesh::sortPointsAndEdges edgeMesh::operator=(edgeMesh(pts, eds)); // Initialise sorted edge related data - edgeDirections_ = edgeDirections/mag(edgeDirections); + edgeDirections_ = edgeDirections/(mag(edgeDirections) + VSMALL); + edgeNormals_ = edgeNormals; regionEdges_ = regionEdges;