// Return smallest true distance from p to any of wallFaces. // Note that even if normal hits face we still check other faces. // Note that wallFaces is untruncated and we explicitly pass in size. Foam::scalar Foam::cellDistFuncs::smallestDist ( const point& p, const polyPatch& patch, const label nWallFaces, const labelList& wallFaces, label& minFaceI ) const { const pointField& points = patch.points(); scalar minDist = GREAT; minFaceI = -1; for (label wallFaceI = 0; wallFaceI < nWallFaces; wallFaceI++) { label patchFaceI = wallFaces[wallFaceI]; pointHit curHit = patch[patchFaceI].nearestPoint(p, points); if (curHit.distance() < minDist) { minDist = curHit.distance(); minFaceI = patch.start() + patchFaceI; } } return minDist; }
//- Calculate map from new patch faces to old patch faces. -1 where // could not map. Foam::labelList Foam::fvMeshAdder::calcPatchMap ( const label oldStart, const label oldSize, const labelList& oldToNew, const polyPatch& newPatch, const label unmappedValue ) { labelList newToOld(newPatch.size(), unmappedValue); label newStart = newPatch.start(); label newSize = newPatch.size(); for (label i = 0; i < oldSize; i++) { label newFaceI = oldToNew[oldStart+i]; if (newFaceI >= newStart && newFaceI < newStart+newSize) { newToOld[newFaceI-newStart] = i; } } return newToOld; }
Foam::polyPatch::polyPatch ( const polyPatch& pp, const polyBoundaryMesh& bm ) : patchIdentifier(pp), primitivePatch ( faceSubList ( bm.mesh().faces(), pp.size(), pp.start() ), bm.mesh().points() ), start_(pp.start()), boundaryMesh_(bm), faceCellsPtr_(NULL), mePtr_(NULL) {}
void Foam::FaceCellWave<Type, TrackingData>::checkCyclic ( const polyPatch& patch ) const { const cyclicPolyPatch& nbrPatch = refCast<const cyclicPolyPatch>(patch).neighbPatch(); forAll(patch, patchFaceI) { label i1 = patch.start() + patchFaceI; label i2 = nbrPatch.start() + patchFaceI; if ( !allFaceInfo_[i1].sameGeometry ( mesh_, allFaceInfo_[i2], geomTol_, td_ ) ) { FatalErrorIn ( "FaceCellWave<Type, TrackingData>" "::checkCyclic(const polyPatch&)" ) << "problem: i:" << i1 << " otheri:" << i2 << " faceInfo:" << allFaceInfo_[i1] << " otherfaceInfo:" << allFaceInfo_[i2] << abort(FatalError); } if (changedFace_[i1] != changedFace_[i2]) { FatalErrorIn ( "FaceCellWave<Type, TrackingData>" "::checkCyclic(const polyPatch&)" ) << " problem: i:" << i1 << " otheri:" << i2 << " faceInfo:" << allFaceInfo_[i1] << " otherfaceInfo:" << allFaceInfo_[i2] << " changedFace:" << changedFace_[i1] << " otherchangedFace:" << changedFace_[i2] << abort(FatalError); } }
void Foam::FaceCellWave<Type, TrackingData>::checkCyclic ( const polyPatch& patch ) const { // For debugging: check status on both sides of cyclic const cyclicPolyPatch& nbrPatch = refCast<const cyclicPolyPatch>(patch).neighbPatch(); forAll(patch, patchFacei) { label i1 = patch.start() + patchFacei; label i2 = nbrPatch.start() + patchFacei; if ( !allFaceInfo_[i1].sameGeometry ( mesh_, allFaceInfo_[i2], geomTol_, td_ ) ) { FatalErrorInFunction << " faceInfo:" << allFaceInfo_[i1] << " otherfaceInfo:" << allFaceInfo_[i2] << abort(FatalError); } if (changedFace_[i1] != changedFace_[i2]) { FatalErrorInFunction << " faceInfo:" << allFaceInfo_[i1] << " otherfaceInfo:" << allFaceInfo_[i2] << " changedFace:" << changedFace_[i1] << " otherchangedFace:" << changedFace_[i2] << abort(FatalError); } }
Foam::ensightPartFaces::ensightPartFaces ( label partNumber, const polyMesh& pMesh, const polyPatch& pPatch ) : ensightPart(partNumber, pPatch.name(), pMesh) { isCellData_ = false; offset_ = pPatch.start(); size_ = pPatch.size(); // count the shapes label nTri = 0; label nQuad = 0; label nPoly = 0; forAll (pPatch, patchfaceI) { const face& f = pMesh.faces()[patchfaceI + offset_]; if (f.size() == 3) { nTri++; } else if (f.size() == 4) { nQuad++; } else { nPoly++; } } // we can avoid double looping, but at the cost of allocation labelList triCells(nTri); labelList quadCells(nQuad); labelList polygonCells(nPoly); nTri = 0; nQuad = 0; nPoly = 0; // classify the shapes forAll(pPatch, patchfaceI) { const face& f = pMesh.faces()[patchfaceI + offset_]; if (f.size() == 3) { triCells[nTri++] = patchfaceI; } else if (f.size() == 4) { quadCells[nQuad++] = patchfaceI; } else { polygonCells[nPoly++] = patchfaceI; } } // MUST match with elementTypes elemLists_.setSize(elementTypes().size()); elemLists_[tria3Elements].transfer( triCells ); elemLists_[quad4Elements].transfer( quadCells ); elemLists_[nsidedElements].transfer( polygonCells ); }