// Get point neighbours of faceI (including faceI). Returns number of faces. // Note: does not allocate storage but does use linear search to determine // uniqueness. For polygonal faces this might be quite inefficient. Foam::label Foam::cellDistFuncs::getPointNeighbours ( const primitivePatch& patch, const label patchFaceI, labelList& neighbours ) const { label nNeighbours = 0; // Add myself neighbours[nNeighbours++] = patchFaceI; // Add all face neighbours const labelList& faceNeighbours = patch.faceFaces()[patchFaceI]; forAll(faceNeighbours, faceNeighbourI) { neighbours[nNeighbours++] = faceNeighbours[faceNeighbourI]; } // Remember part of neighbours that contains edge-connected faces. label nEdgeNbs = nNeighbours; // Add all point-only neighbours by linear searching in edge neighbours. // Assumes that point-only neighbours are not using multiple points on // face. const face& f = patch.localFaces()[patchFaceI]; forAll(f, fp) { label pointI = f[fp]; const labelList& pointNbs = patch.pointFaces()[pointI]; forAll(pointNbs, nbI) { label faceI = pointNbs[nbI]; // Check for faceI in edge-neighbours part of neighbours if (findIndex(nEdgeNbs, neighbours, faceI) == -1) { neighbours[nNeighbours++] = faceI; } }
// Dump patch + weights to vtk file void writeWeights ( const scalarField& wghtSum, const primitivePatch& patch, const fileName& directory, const fileName& prefix, const word& timeName ) { vtkSurfaceWriter writer; writer.write ( directory, prefix + "_proc" + Foam::name(Pstream::myProcNo()) + "_" + timeName, patch.localPoints(), patch.localFaces(), "weightsSum", wghtSum, false ); }