void Foam::processorLduInterface::receive ( const Pstream::commsTypes commsType, UList<Type>& f ) const { if (commsType == Pstream::blocking || commsType == Pstream::scheduled) { IPstream::read ( commsType, neighbProcNo(), reinterpret_cast<char*>(f.begin()), f.byteSize(), tag() ); } else if (commsType == Pstream::nonBlocking) { memcpy(f.begin(), receiveBuf_.begin(), f.byteSize()); } else { FatalErrorIn("processorLduInterface::receive") << "Unsupported communications type " << commsType << exit(FatalError); } }
void Foam::processorLduInterface::send ( const Pstream::commsTypes commsType, const UList<Type>& f ) const { label nBytes = f.byteSize(); if ( commsType == Pstream::commsTypes::blocking || commsType == Pstream::commsTypes::scheduled ) { OPstream::write ( commsType, neighbProcNo(), reinterpret_cast<const char*>(f.begin()), nBytes, tag(), comm() ); } else if (commsType == Pstream::commsTypes::nonBlocking) { resizeBuf(receiveBuf_, nBytes); IPstream::read ( commsType, neighbProcNo(), receiveBuf_.begin(), nBytes, tag(), comm() ); resizeBuf(sendBuf_, nBytes); memcpy(sendBuf_.begin(), f.begin(), nBytes); OPstream::write ( commsType, neighbProcNo(), sendBuf_.begin(), nBytes, tag(), comm() ); } else { FatalErrorInFunction << "Unsupported communications type " << int(commsType) << exit(FatalError); } }
bool Foam::UList<T>::operator<(const UList<T>& a) const { for ( const_iterator vi = begin(), ai = a.begin(); vi < end() && ai < a.end(); vi++, ai++ ) { if (*vi < *ai) { return true; } else if (*vi > *ai) { return false; } } if (this->size_ < a.size_) { return true; } else { return false; } }
void Foam::processorLduInterface::compressedReceive ( const Pstream::commsTypes commsType, UList<Type>& f ) const { if (sizeof(scalar) != sizeof(float) && Pstream::floatTransfer && f.size()) { static const label nCmpts = sizeof(Type)/sizeof(scalar); label nm1 = (f.size() - 1)*nCmpts; label nlast = sizeof(Type)/sizeof(float); label nFloats = nm1 + nlast; label nBytes = nFloats*sizeof(float); if ( commsType == Pstream::commsTypes::blocking || commsType == Pstream::commsTypes::scheduled ) { resizeBuf(receiveBuf_, nBytes); IPstream::read ( commsType, neighbProcNo(), receiveBuf_.begin(), nBytes, tag(), comm() ); } else if (commsType != Pstream::commsTypes::nonBlocking) { FatalErrorInFunction << "Unsupported communications type " << int(commsType) << exit(FatalError); } const float *fArray = reinterpret_cast<const float*>(receiveBuf_.begin()); f.last() = reinterpret_cast<const Type&>(fArray[nm1]); scalar *sArray = reinterpret_cast<scalar*>(f.begin()); const scalar *slast = &sArray[nm1]; for (label i=0; i<nm1; i++) { sArray[i] = fArray[i] + slast[i%nCmpts]; } } else { this->receive<Type>(commsType, f); } }
void Foam::shuffle(UList<T>& a) { std::random_shuffle(a.begin(), a.end()); }
void Foam::stableSort(UList<T>& a, const Cmp& cmp) { std::stable_sort(a.begin(), a.end(), cmp); }
void Foam::stableSort(UList<T>& a) { std::stable_sort(a.begin(), a.end()); }
void Foam::processorLduInterface::compressedSend ( const Pstream::commsTypes commsType, const UList<Type>& f ) const { if (sizeof(scalar) != sizeof(float) && Pstream::floatTransfer && f.size()) { static const label nCmpts = sizeof(Type)/sizeof(scalar); label nm1 = (f.size() - 1)*nCmpts; label nlast = sizeof(Type)/sizeof(float); label nFloats = nm1 + nlast; label nBytes = nFloats*sizeof(float); const scalar *sArray = reinterpret_cast<const scalar*>(f.begin()); const scalar *slast = &sArray[nm1]; resizeBuf(sendBuf_, nBytes); float *fArray = reinterpret_cast<float*>(sendBuf_.begin()); for (register label i=0; i<nm1; i++) { fArray[i] = sArray[i] - slast[i%nCmpts]; } reinterpret_cast<Type&>(fArray[nm1]) = f.last(); if (commsType == Pstream::blocking || commsType == Pstream::scheduled) { OPstream::write ( commsType, neighbProcNo(), sendBuf_.begin(), nBytes, tag() ); } else if (commsType == Pstream::nonBlocking) { resizeBuf(receiveBuf_, nBytes); IPstream::read ( commsType, neighbProcNo(), receiveBuf_.begin(), receiveBuf_.size(), tag() ); OPstream::write ( commsType, neighbProcNo(), sendBuf_.begin(), nBytes, tag() ); } else { FatalErrorIn("processorLduInterface::compressedSend") << "Unsupported communications type " << commsType << exit(FatalError); } } else { this->send(commsType, f); } }