diff --git a/src/meshTools/triSurface/orientedSurface/orientedSurface.C b/src/meshTools/triSurface/orientedSurface/orientedSurface.C index 9cc473f3a32bf8c06734e39eb7d3b6173ea2b159..25035a24f6ebf6d69b2d29455ff4ed27937da845 100644 --- a/src/meshTools/triSurface/orientedSurface/orientedSurface.C +++ b/src/meshTools/triSurface/orientedSurface/orientedSurface.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -102,7 +102,7 @@ Foam::labelList Foam::orientedSurface::edgeToFace { if (flip[face1] == UNVISITED) { - FatalErrorIn("orientedSurface::edgeToFace") << "Problem" + FatalErrorIn("orientedSurface::edgeToFace(..)") << "Problem" << abort(FatalError); } else @@ -283,8 +283,10 @@ bool Foam::orientedSurface::flipSurface } } // Recalculate normals - s.clearOut(); - + if (hasFlipped) + { + s.clearOut(); + } return hasFlipped; } @@ -352,8 +354,28 @@ bool Foam::orientedSurface::orient // FLIP: need to flip labelList flipState(s.size(), UNVISITED); - flipState[0] = NOFLIP; - walkSurface(s, 0, flipState); + label faceI = 0; + while (true) + { + label startFaceI = -1; + while (faceI < s.size()) + { + if (flipState[faceI] == UNVISITED) + { + startFaceI = faceI; + break; + } + faceI++; + } + + if (startFaceI == -1) + { + break; + } + + flipState[startFaceI] = NOFLIP; + walkSurface(s, startFaceI, flipState); + } anyFlipped = flipSurface(s, flipState); }