void Foam::enrichedPatch::calcMeshPoints() const { if (meshPointsPtr_) { FatalErrorInFunction << "Mesh points already calculated." << abort(FatalError); } meshPointsPtr_ = new labelList(pointMap().toc()); labelList& mp = *meshPointsPtr_; sort(mp); }
Foam::pointFieldDecomposer::patchFieldDecomposer::patchFieldDecomposer ( const pointPatch& completeMeshPatch, const pointPatch& procMeshPatch, const labelList& directAddr ) : pointPatchFieldMapperPatchRef ( completeMeshPatch, procMeshPatch ), directAddressing_(procMeshPatch.size(), -1) { // Create the inverse-addressing of the patch point labels. labelList pointMap(completeMeshPatch.boundaryMesh().mesh().size(), -1); const labelList& completeMeshPatchPoints = completeMeshPatch.meshPoints(); forAll(completeMeshPatchPoints, pointi) { pointMap[completeMeshPatchPoints[pointi]] = pointi; } // Use the inverse point addressing to create the addressing table for this // patch const labelList& procMeshPatchPoints = procMeshPatch.meshPoints(); forAll(procMeshPatchPoints, pointi) { directAddressing_[pointi] = pointMap[directAddr[procMeshPatchPoints[pointi]]]; } // Check that all the patch point addresses are set if (directAddressing_.size() && min(directAddressing_) < 0) { FatalErrorIn ( "pointFieldDecomposer::patchFieldDecomposer()" ) << "Incomplete patch point addressing" << abort(FatalError); } }
// Collapses small edge to point, thus removing triangle. label collapseEdge(triSurface& surf, const scalar minLen) { label nTotalCollapsed = 0; while (true) { const pointField& localPoints = surf.localPoints(); const List<labelledTri>& localFaces = surf.localFaces(); // Mapping from old to new points labelList pointMap(surf.nPoints()); forAll(pointMap, i) { pointMap[i] = i; } // Storage for new points. pointField newPoints(localPoints); // To protect neighbours of collapsed faces. boolList okToCollapse(surf.size(), true); label nCollapsed = 0; forAll(localFaces, faceI) { if (okToCollapse[faceI]) { // Check edge lengths. const triSurface::FaceType& f = localFaces[faceI]; forAll(f, fp) { label v = f[fp]; label v1 = f[f.fcIndex(fp)]; if (mag(localPoints[v1] - localPoints[v]) < minLen) { // Collapse f[fp1] onto f[fp]. pointMap[v1] = v; newPoints[v] = 0.5*(localPoints[v1] + localPoints[v]); Pout<< "Collapsing triange " << faceI << " to edge mid " << newPoints[v] << endl; nCollapsed++; okToCollapse[faceI] = false; // Protect point neighbours from collapsing. markPointNbrs(surf, faceI, false, okToCollapse); break; } } } } Pout<< "collapseEdge : collapsing " << nCollapsed << " triangles" << endl; nTotalCollapsed += nCollapsed; if (nCollapsed == 0) { break; } // Pack the triangles surf = pack(surf, newPoints, pointMap); }