//- 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) {}
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 ); }