37 const List<Type>& elems,
45 os <<
' ' << elems[elemI];
55 const List<Type>& values,
57 const label fromProcNo,
59 List<taggedValue>& dest
64 taggedValue& tagVal = dest[destI];
66 tagVal.value() = values[elemI];
67 tagVal.index() = indices[elemI];
68 tagVal.procID() = fromProcNo;
78 const List<Type>& elems,
82 pivots.
setSize(Pstream::nProcs());
88 pivots[pivotI] = elems[pivotPos];
90 pivotPos += elems.size()/Pstream::nProcs();
101 const label destProcI
104 if (destProcI != Pstream::myProcNo())
107 indices.setSize(bufSize);
111 Pout<<
"Sending to " << destProcI <<
" elements:" << values
116 OPstream toSlave(Pstream::blocking, destProcI);
117 toSlave << values << indices;
126 template <
class Type>
138 template <
class Type>
150 template <
class Type>
157 label n = this->size();
170 getPivots(sorted, pivots);
189 ListListOps::combine<labelList>
200 write(allPivots,
Pout);
204 getPivots(sortedPivots, pivots);
210 Pout<<
"new pivots:";
235 if ((pivotI <
Pstream::nProcs()) && (sorted[sortedI] > pivots[pivotI]))
237 checkAndSend(sendValues, sendIndices, sendI, destProcI);
240 sendValues.setSize(sorted.
size());
241 sendIndices.setSize(sorted.
size());
250 sendValues[sendI] = sorted[sortedI];
251 sendIndices[sendI] = sorted.
indices()[sortedI];
256 ownValues[ownI] = sorted[sortedI];
257 ownIndices[ownI] = sorted.
indices()[sortedI];
266 checkAndSend(sendValues, sendIndices, sendI, destProcI);
270 ownValues.setSize(ownI);
271 ownIndices.setSize(ownI);
275 Pout<<
"Not sending (to myself) elements "
276 << ownValues <<
endl;
296 Pout<<
"Copying from own:" << ownValues <<
endl;
300 copyInto(ownValues, ownIndices, procI, combinedI, combinedValues);
310 Pout<<
"Receiving from " << procI <<
endl;
315 fromSlave >> recValues >> recIndices;
319 Pout<<
"Received from " << procI
320 <<
" elements:" << recValues <<
endl;
326 Pout<<
"Copying starting at:" << combinedI <<
endl;
328 copyInto(recValues, recIndices, procI, combinedI, combinedValues);
331 combinedValues.
setSize(combinedI);
338 indices_.setSize(combinedI);
339 procs_.setSize(combinedI);
341 forAll(combinedValues, elemI)
343 this->operator[](elemI) = combinedValues[elemI].value();
344 indices_[elemI] = combinedValues[elemI].index();
345 procs_[elemI] = combinedValues[elemI].procID();