ENH: Change concave cell checking to be based on face centres and face

planes, rather than a vertex-by-vertex check.  Assesses concavity as
relevant to the tracking.
This commit is contained in:
graham
2010-03-31 18:10:05 +01:00
parent 3cf4d721eb
commit bb1a2476fd
2 changed files with 27 additions and 35 deletions

View File

@ -649,7 +649,7 @@ public:
labelHashSet* setPtr = NULL labelHashSet* setPtr = NULL
) const; ) const;
//- Check for concave cells //- Check for concave cells by the planes of faces
bool checkConcaveCells bool checkConcaveCells
( (
const bool report = false, const bool report = false,

View File

@ -2111,7 +2111,6 @@ bool Foam::primitiveMesh::checkConcaveCells
const labelList& fOwner = faceOwner(); const labelList& fOwner = faceOwner();
const vectorField& fAreas = faceAreas(); const vectorField& fAreas = faceAreas();
const pointField& fCentres = faceCentres(); const pointField& fCentres = faceCentres();
const pointField& pts = points();
label nConcaveCells = 0; label nConcaveCells = 0;
@ -2119,8 +2118,6 @@ bool Foam::primitiveMesh::checkConcaveCells
{ {
const cell& cFaces = c[cellI]; const cell& cFaces = c[cellI];
const labelList& cPoints = cellPoints()[cellI];
bool concave = false; bool concave = false;
forAll(cFaces, i) forAll(cFaces, i)
@ -2134,8 +2131,6 @@ bool Foam::primitiveMesh::checkConcaveCells
const point& fC = fCentres[fI]; const point& fC = fCentres[fI];
const face& f = faces()[fI];
vector fN = fAreas[fI]; vector fN = fAreas[fI];
fN /= max(mag(fN), VSMALL); fN /= max(mag(fN), VSMALL);
@ -2147,20 +2142,16 @@ bool Foam::primitiveMesh::checkConcaveCells
fN *= -1; fN *= -1;
} }
// Is any vertex of the cell on the wrong side of the // Is the centre of any other face of the cell on the
// plane of this face? // wrong side of the plane of this face?
forAll(cPoints, cPtI) forAll(cFaces, j)
{ {
label ptI = cPoints[cPtI]; if (j != i)
// Skip points that are on this face
if (findIndex(f, ptI) > -1)
{ {
continue; label fJ = cFaces[j];
}
const point& pt = pts[ptI]; const point& pt = fCentres[fJ];
// If the cell is concave, the point will be on the // If the cell is concave, the point will be on the
// positive normal side of the plane of f, defined by // positive normal side of the plane of f, defined by
@ -2190,6 +2181,7 @@ bool Foam::primitiveMesh::checkConcaveCells
} }
} }
} }
}
reduce(nConcaveCells, sumOp<label>()); reduce(nConcaveCells, sumOp<label>());