void faMeshDecomposition::distributeFaces() { Info<< "\nCalculating distribution of faces" << endl; cpuTime decompositionTime; for (label procI = 0; procI < nProcs(); procI++) { Time processorDb ( Time::controlDictName, time().rootPath(), time().caseName()/fileName(word("processor") + Foam::name(procI)) ); fvMesh procMesh ( IOobject ( fvMesh::defaultRegion, processorDb.timeName(), processorDb ) ); labelHashSet faceProcAddressingHash ( labelIOList ( IOobject ( "faceProcAddressing", "constant", procMesh.meshSubDir, procMesh, IOobject::MUST_READ, IOobject::NO_WRITE ) ) ); forAll (faceLabels(), faceI) { if (faceProcAddressingHash.found(faceLabels()[faceI] + 1)) { faceToProc_[faceI] = procI; } } } Info<< "\nFinished decomposition in " << decompositionTime.elapsedCpuTime() << " s" << endl; }
Foam::polyMesh::readUpdateState Foam::polyMesh::readUpdate() { if (debug) { Info<< "polyMesh::readUpdateState polyMesh::readUpdate() : " << "Updating mesh based on saved data." << endl; } // Find the point and cell instance fileName pointsInst(time().findInstance(meshDir(), "points")); fileName facesInst(time().findInstance(meshDir(), "faces")); if (debug) { Info<< "Faces instance: old = " << facesInstance() << " new = " << facesInst << nl << "Points instance: old = " << pointsInstance() << " new = " << pointsInst << endl; } if (facesInst != facesInstance()) { // Topological change if (debug) { Info<< "Topological change" << endl; } clearOut(); // Set instance to new instance. Note that points instance can differ // from from faces instance. setInstance(facesInst); points_.instance() = pointsInst; points_ = pointIOField ( IOobject ( "points", pointsInst, meshSubDir, *this, IOobject::MUST_READ, IOobject::NO_WRITE, false ) ); faces_ = faceCompactIOList ( IOobject ( "faces", facesInst, meshSubDir, *this, IOobject::MUST_READ, IOobject::NO_WRITE, false ) ); owner_ = labelIOList ( IOobject ( "owner", facesInst, meshSubDir, *this, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, false ) ); neighbour_ = labelIOList ( IOobject ( "neighbour", facesInst, meshSubDir, *this, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE, false ) ); // Reset the boundary patches polyBoundaryMesh newBoundary ( IOobject ( "boundary", facesInst, meshSubDir, *this, IOobject::MUST_READ, IOobject::NO_WRITE, false ), *this ); // Check that patch types and names are unchanged bool boundaryChanged = false; if (newBoundary.size() != boundary_.size()) { boundaryChanged = true; } else { wordList newTypes = newBoundary.types(); wordList newNames = newBoundary.names(); wordList oldTypes = boundary_.types(); wordList oldNames = boundary_.names(); forAll(oldTypes, patchI) { if ( oldTypes[patchI] != newTypes[patchI] || oldNames[patchI] != newNames[patchI] ) { boundaryChanged = true; break; } } } if (boundaryChanged) { WarningIn("polyMesh::readUpdateState polyMesh::readUpdate()") << "Number of patches has changed. This may have " << "unexpected consequences. Proceed with care." << endl; boundary_.clear(); boundary_.setSize(newBoundary.size()); forAll(newBoundary, patchI) { boundary_.set(patchI, newBoundary[patchI].clone(boundary_)); } } else {