Foam::labelList Foam::meshToMesh::maskCells ( const polyMesh& src, const polyMesh& tgt ) const { boundBox intersectBb ( max(src.bounds().min(), tgt.bounds().min()), min(src.bounds().max(), tgt.bounds().max()) ); intersectBb.inflate(0.01); const cellList& srcCells = src.cells(); const faceList& srcFaces = src.faces(); const pointField& srcPts = src.points(); DynamicList<label> cells(src.size()); forAll(srcCells, srcI) { boundBox cellBb(srcCells[srcI].points(srcFaces, srcPts), false); if (intersectBb.overlaps(cellBb)) { cells.append(srcI); } }
// Check writing tolerance before doing any serious work scalar getMergeDistance(const polyMesh& mesh, const scalar mergeTol) { const boundBox& meshBb = mesh.bounds(); scalar mergeDist = mergeTol * meshBb.mag(); scalar writeTol = std::pow ( scalar(10.0), -scalar(IOstream::defaultPrecision()) ); Info<< nl << "Overall mesh bounding box : " << meshBb << nl << "Relative tolerance : " << mergeTol << nl << "Absolute matching distance : " << mergeDist << nl << endl; if (mesh.time().writeFormat() == IOstream::ASCII && mergeTol < writeTol) { FatalErrorIn("getMergeDistance(const polyMesh&, const scalar)") << "Your current settings specify ASCII writing with " << IOstream::defaultPrecision() << " digits precision." << endl << "Your merging tolerance (" << mergeTol << ") is finer than this." << endl << "Please change your writeFormat to binary" << " or increase the writePrecision" << endl << "or adjust the merge tolerance (-mergeTol)." << exit(FatalError); } return mergeDist; }
Foam::labelList Foam::refinementParameters::findCells(const polyMesh& mesh) const { // Force calculation of tet-diag decomposition (for use in findCell) (void)mesh.tetBasePtIs(); // Global calculation engine globalIndex globalCells(mesh.nCells()); // Cell label per point labelList cellLabels(keepPoints_.size()); forAll(keepPoints_, i) { const point& keepPoint = keepPoints_[i]; label localCellI = mesh.findCell(keepPoint); label globalCellI = -1; if (localCellI != -1) { globalCellI = globalCells.toGlobal(localCellI); } reduce(globalCellI, maxOp<label>()); if (globalCellI == -1) { FatalErrorInFunction << "Point " << keepPoint << " is not inside the mesh or on a face or edge." << nl << "Bounding box of the mesh:" << mesh.bounds() << exit(FatalError); } label procI = globalCells.whichProcID(globalCellI); label procCellI = globalCells.toLocal(procI, globalCellI); Info<< "Found point " << keepPoint << " in cell " << procCellI << " on processor " << procI << endl; if (globalCells.isLocal(globalCellI)) { cellLabels[i] = localCellI; } else { cellLabels[i] = -1; } } return cellLabels; }
Foam::labelList Foam::refinementParameters::findCells(const polyMesh& mesh) const { // Global calculation engine globalIndex globalCells(mesh.nCells()); // Cell label per point labelList cellLabels(keepPoints_.size()); forAll(keepPoints_, i) { const point& keepPoint = keepPoints_[i]; label localCellI = mesh.findCell(keepPoint); label globalCellI = -1; if (localCellI != -1) { Pout<< "Found point " << keepPoint << " in cell " << localCellI << " on processor " << Pstream::myProcNo() << endl; globalCellI = globalCells.toGlobal(localCellI); } reduce(globalCellI, maxOp<label>()); if (globalCellI == -1) { FatalErrorIn ( "refinementParameters::findCells(const polyMesh&) const" ) << "Point " << keepPoint << " is not inside the mesh or on a face or edge." << nl << "Bounding box of the mesh:" << mesh.bounds() << exit(FatalError); } if (globalCells.isLocal(globalCellI)) { cellLabels[i] = localCellI; } else { cellLabels[i] = -1; } } return cellLabels; }