void Foam::Pstream::setParRun() { parRun_ = true; Pout.prefix() = '[' + name(myProcNo()) + "] "; Perr.prefix() = '[' + name(myProcNo()) + "] "; }
void Foam::UPstream::setParRun(const label nProcs) { if (nProcs == 0) { parRun_ = false; freeCommunicator(UPstream::worldComm); label comm = allocateCommunicator(-1, labelList(1, label(0)), false); if (comm != UPstream::worldComm) { FatalErrorIn("UPstream::setParRun(const label)") << "problem : comm:" << comm << " UPstream::worldComm:" << UPstream::worldComm << Foam::exit(FatalError); } Pout.prefix() = ""; Perr.prefix() = ""; } else { parRun_ = true; // Redo worldComm communicator (this has been created at static // initialisation time) freeCommunicator(UPstream::worldComm); label comm = allocateCommunicator(-1, identity(nProcs), true); if (comm != UPstream::worldComm) { FatalErrorInFunction << "problem : comm:" << comm << " UPstream::worldComm:" << UPstream::worldComm << Foam::exit(FatalError); } Pout.prefix() = '[' + name(myProcNo(Pstream::worldComm)) + "] "; Perr.prefix() = '[' + name(myProcNo(Pstream::worldComm)) + "] "; } }
Foam::processorCyclicPolyPatch::processorCyclicPolyPatch ( const word& name, const dictionary& dict, const label index, const polyBoundaryMesh& bm ) : processorPolyPatch(name, dict, index, bm), tag_ ( Pstream::nProcs()*max(myProcNo(), neighbProcNo()) + min(myProcNo(), neighbProcNo()) ), referPatchName_(dict.lookup("referPatch")), referPatchID_(-1) { if (debug) { Pout<< "processorCyclicPolyPatch " << name << " uses tag " << tag_ << endl; } }
Foam::processorGAMGInterface::processorGAMGInterface ( const lduInterface& fineInterface, const labelField& localRestrictAddressing, const labelField& neighbourRestrictAddressing ) : GAMGInterface ( fineInterface, localRestrictAddressing, neighbourRestrictAddressing ), fineProcInterface_(refCast<const processorLduInterface>(fineInterface)) { // Make a lookup table of entries for owner/neighbour HashTable<SLList<label>, label, Hash<label> > neighboursTable ( localRestrictAddressing.size() ); // Table of face-sets to be agglomerated HashTable<SLList<SLList<label> >, label, Hash<label> > faceFaceTable ( localRestrictAddressing.size() ); label nCoarseFaces = 0; forAll (localRestrictAddressing, ffi) { label curMaster = -1; label curSlave = -1; // Do switching on master/slave indexes based on the owner/neighbour of // the processor index such that both sides get the same answer. if (myProcNo() < neighbProcNo()) { // Master side curMaster = localRestrictAddressing[ffi]; curSlave = neighbourRestrictAddressing[ffi]; } else { // Slave side curMaster = neighbourRestrictAddressing[ffi]; curSlave = localRestrictAddressing[ffi]; } // Look for the master cell. If it has already got a face, // add the coefficient to the face. If not, create a new face. if (neighboursTable.found(curMaster)) { // Check all current neighbours to see if the current slave already // exists and if so, add the fine face to the agglomeration. SLList<label>& curNbrs = neighboursTable.find(curMaster)(); SLList<SLList<label> >& curFaceFaces = faceFaceTable.find(curMaster)(); bool nbrFound = false; SLList<label>::iterator nbrsIter = curNbrs.begin(); SLList<SLList<label> >::iterator faceFacesIter = curFaceFaces.begin(); for ( ; nbrsIter != curNbrs.end(), faceFacesIter != curFaceFaces.end(); ++nbrsIter, ++faceFacesIter ) { if (nbrsIter() == curSlave) { nbrFound = true; faceFacesIter().append(ffi); break; } } if (!nbrFound) { curNbrs.append(curSlave); curFaceFaces.append(ffi); // New coarse face created nCoarseFaces++; } } else { // This master has got no neighbours yet. Add a neighbour // and a coefficient, thus creating a new face neighboursTable.insert(curMaster, SLList<label>(curSlave)); faceFaceTable.insert(curMaster, SLList<SLList<label> >(ffi)); // New coarse face created nCoarseFaces++; } } // end for all fine faces
void Foam::OPstream::print(Ostream& os) const { os << "Writing from processor " << toProcNo_ << " to processor " << myProcNo() << Foam::endl; }
void Foam::IPstream::print(Ostream& os) const { os << "Reading from processor " << fromProcNo_ << " to processor " << myProcNo() << Foam::endl; }
Foam::processorGAMGInterface::processorGAMGInterface ( const label index, const lduInterfacePtrsList& coarseInterfaces, const lduInterface& fineInterface, const labelField& localRestrictAddressing, const labelField& neighbourRestrictAddressing, const label fineLevelIndex, const label coarseComm ) : GAMGInterface ( index, coarseInterfaces ), comm_(coarseComm), myProcNo_(refCast<const processorLduInterface>(fineInterface).myProcNo()), neighbProcNo_ ( refCast<const processorLduInterface>(fineInterface).neighbProcNo() ), forwardT_(refCast<const processorLduInterface>(fineInterface).forwardT()), tag_(refCast<const processorLduInterface>(fineInterface).tag()) { // From coarse face to coarse cell DynamicList<label> dynFaceCells(localRestrictAddressing.size()); // From fine face to coarse face DynamicList<label> dynFaceRestrictAddressing ( localRestrictAddressing.size() ); // From coarse cell pair to coarse face HashTable<label, labelPair, labelPair::Hash<> > cellsToCoarseFace ( 2*localRestrictAddressing.size() ); forAll(localRestrictAddressing, ffi) { labelPair cellPair; // Do switching on master/slave indexes based on the owner/neighbour of // the processor index such that both sides get the same answer. if (myProcNo() < neighbProcNo()) { // Master side cellPair = labelPair ( localRestrictAddressing[ffi], neighbourRestrictAddressing[ffi] ); } else { // Slave side cellPair = labelPair ( neighbourRestrictAddressing[ffi], localRestrictAddressing[ffi] ); } HashTable<label, labelPair, labelPair::Hash<> >::const_iterator fnd = cellsToCoarseFace.find(cellPair); if (fnd == cellsToCoarseFace.end()) { // New coarse face label coarseI = dynFaceCells.size(); dynFaceRestrictAddressing.append(coarseI); dynFaceCells.append(localRestrictAddressing[ffi]); cellsToCoarseFace.insert(cellPair, coarseI); } else { // Already have coarse face dynFaceRestrictAddressing.append(fnd()); } }
void Foam::UOPstream::print(Ostream& os) const { os << "Writing from processor " << toProcNo_ << " to processor " << myProcNo() << " in communicator " << comm_ << " and tag " << tag_ << Foam::endl; }