Foam::scalar Foam::primitiveMeshTools::faceSkewness ( const primitiveMesh& mesh, const pointField& p, const vectorField& fCtrs, const vectorField& fAreas, const label faceI, const point& ownCc, const point& neiCc ) { vector Cpf = fCtrs[faceI] - ownCc; vector d = neiCc - ownCc; // Skewness vector vector sv = Cpf - ((fAreas[faceI] & Cpf)/((fAreas[faceI] & d) + ROOTVSMALL))*d; vector svHat = sv/(mag(sv) + ROOTVSMALL); // Normalisation distance calculated as the approximate distance // from the face centre to the edge of the face in the direction // of the skewness scalar fd = 0.2*mag(d) + ROOTVSMALL; const face& f = mesh.faces()[faceI]; forAll(f, pi) { fd = max(fd, mag(svHat & (p[f[pi]] - fCtrs[faceI]))); }
// Find label of face. label findFace(const primitiveMesh& mesh, const face& f) { const labelList& pFaces = mesh.pointFaces()[f[0]]; forAll(pFaces, i) { label faceI = pFaces[i]; if (mesh.faces()[faceI] == f) { return faceI; } }
// Step across point to other edge on face Foam::label Foam::regionSide::otherEdge ( const primitiveMesh& mesh, const label faceI, const label edgeI, const label pointI ) { const edge& e = mesh.edges()[edgeI]; // Get other point on edge. label freePointI = e.otherVertex(pointI); const labelList& fEdges = mesh.faceEdges()[faceI]; forAll(fEdges, fEdgeI) { const label otherEdgeI = fEdges[fEdgeI]; const edge& otherE = mesh.edges()[otherEdgeI]; if ( ( otherE.start() == pointI && otherE.end() != freePointI ) || ( otherE.end() == pointI && otherE.start() != freePointI ) ) { // otherE shares one (but not two) points with e. return otherEdgeI; } } FatalErrorIn ( "regionSide::otherEdge(const primitiveMesh&, const label, const label" ", const label)" ) << "Cannot find other edge on face " << faceI << " that uses point " << pointI << " but not point " << freePointI << endl << "Edges on face:" << fEdges << " verts:" << UIndirectList<edge>(mesh.edges(), fEdges)() << " Vertices on face:" << mesh.faces()[faceI] << " Vertices on original edge:" << e << abort(FatalError); return -1; }
Foam::cellShape Foam::degenerateMatcher::match ( const primitiveMesh& mesh, const label cellI ) { return match ( mesh.faces(), mesh.faceOwner(), cellI, mesh.cells()[cellI] ); }