61 if (proci != Pstream::myProcNo())
63 if (subMap[proci].size())
68 if (constructMap[proci].size())
75 allComms = commsSet.
toc();
80 if (Pstream::master())
85 int slave=Pstream::firstSlave();
86 slave<=Pstream::lastSlave();
90 IPstream fromSlave(Pstream::commsTypes::scheduled, slave, 0, tag);
95 if (!allComms.found(nbrData[i]))
97 label sz = allComms.size();
99 allComms[sz] = nbrData[i];
106 int slave=Pstream::firstSlave();
107 slave<=Pstream::lastSlave();
111 OPstream toSlave(Pstream::commsTypes::scheduled, slave, 0, tag);
120 Pstream::commsTypes::scheduled,
125 toMaster << allComms;
130 Pstream::commsTypes::scheduled,
135 fromMaster >> allComms;
147 ).procSchedule()[Pstream::myProcNo()]
196 const label expectedSize,
197 const label receivedSize
200 if (receivedSize != expectedSize)
203 <<
"Expected from processor " << proci
204 <<
" " << expectedSize <<
" but received "
205 << receivedSize <<
" elements."
216 forAll(constructMap_, proci)
218 const labelList& construct = constructMap_[proci];
219 if (constructHasFlip_)
223 label index =
mag(construct[i])-1;
224 minIndex[proci] =
min(minIndex[proci], index);
225 maxIndex[proci] =
max(maxIndex[proci], index);
232 label index = construct[i];
233 minIndex[proci] =
min(minIndex[proci], index);
234 maxIndex[proci] =
max(maxIndex[proci], index);
249 os <<
"Layout: (constructSize:" << constructSize_
250 <<
" subHasFlip:" << subHasFlip_
251 <<
" constructHasFlip:" << constructHasFlip_
254 <<
" start : 0" <<
endl
255 <<
" size : " << localSize <<
endl;
257 label offset = localSize;
262 if (constructMap_[proci].size() > 0)
264 if (minIndex[proci] != offset)
267 <<
"offset:" << offset
268 <<
" proci:" << proci
269 <<
" minIndex:" << minIndex[proci]
273 label size = maxIndex[proci]-minIndex[proci]+1;
274 os <<
"processor " << proci <<
':' <<
endl
275 <<
" start : " << offset <<
endl
276 <<
" size : " << size <<
endl;
297 for (
const label globalIdx : elements)
299 if (globalIdx != -1 && !globalNumbering.
isLocal(globalIdx))
301 label proci = globalNumbering.
whichProcID(globalIdx);
308 compactMap[proci].clear();
311 compactMap[proci].resize(2*nNonLocal[proci]);
317 for (
const label globalIdx : elements)
319 if (globalIdx != -1 && !globalNumbering.
isLocal(globalIdx))
321 label proci = globalNumbering.
whichProcID(globalIdx);
322 label index = globalNumbering.
toLocal(proci, globalIdx);
323 label nCompact = compactMap[proci].size();
324 compactMap[proci].insert(index, nCompact);
342 for (
const labelList& cCells : cellCells)
344 for (
const label globalIdx : cCells)
346 if (globalIdx != -1 && !globalNumbering.
isLocal(globalIdx))
348 label proci = globalNumbering.
whichProcID(globalIdx);
356 compactMap[proci].clear();
359 compactMap[proci].resize(2*nNonLocal[proci]);
365 for (
const labelList& cCells : cellCells)
367 for (
const label globalIdx : cCells)
369 if (globalIdx != -1 && !globalNumbering.
isLocal(globalIdx))
371 label proci = globalNumbering.
whichProcID(globalIdx);
372 label index = globalNumbering.
toLocal(proci, globalIdx);
373 label nCompact = compactMap[proci].size();
374 compactMap[proci].insert(index, nCompact);
396 constructSize_ = globalNumbering.
localSize();
397 forAll(compactStart, proci)
401 compactStart[proci] = constructSize_;
402 constructSize_ += compactMap[proci].size();
419 label nLocal = globalNumbering.
localSize();
420 wantedRemoteElements[proci] =
identity(nLocal);
421 constructMap_[proci] =
identity(nLocal);
426 labelList& remoteElem = wantedRemoteElements[proci];
427 labelList& localElem = constructMap_[proci];
428 remoteElem.
setSize(compactMap[proci].size());
429 localElem.
setSize(compactMap[proci].size());
433 const label compactI = compactStart[proci] + iter.val();
434 remoteElem[i] = iter.key();
435 localElem[i] = compactI;
443 Pstream::exchange<labelList, label>
445 wantedRemoteElements,
452 for (label& elem : elements)
454 elem =
renumber(globalNumbering, compactMap, elem);
474 constructSize_ = globalNumbering.
localSize();
475 forAll(compactStart, proci)
479 compactStart[proci] = constructSize_;
480 constructSize_ += compactMap[proci].size();
496 label nLocal = globalNumbering.
localSize();
497 wantedRemoteElements[proci] =
identity(nLocal);
498 constructMap_[proci] =
identity(nLocal);
503 labelList& remoteElem = wantedRemoteElements[proci];
504 labelList& localElem = constructMap_[proci];
505 remoteElem.
setSize(compactMap[proci].size());
506 localElem.
setSize(compactMap[proci].size());
510 const label compactI = compactStart[proci] + iter.val();
511 remoteElem[i] = iter.key();
512 localElem[i] = compactI;
520 Pstream::exchange<labelList, label>
522 wantedRemoteElements,
531 for (label& celli : cCells)
533 celli =
renumber(globalNumbering, compactMap, celli);
545 constructHasFlip_(false),
553 constructSize_(map.constructSize_),
554 subMap_(map.subMap_),
555 constructMap_(map.constructMap_),
556 subHasFlip_(map.subHasFlip_),
557 constructHasFlip_(map.constructHasFlip_),
572 const label constructSize,
575 const bool subHasFlip,
576 const bool constructHasFlip
579 constructSize_(constructSize),
580 subMap_(std::move(subMap)),
581 constructMap_(std::move(constructMap)),
582 subHasFlip_(subHasFlip),
583 constructHasFlip_(constructHasFlip),
596 constructHasFlip_(
false),
599 if (sendProcs.
size() != recvProcs.
size())
602 <<
"The send and receive data is not the same length. sendProcs:"
603 << sendProcs.
size() <<
" recvProcs:" << recvProcs.
size()
611 forAll(sendProcs, sampleI)
613 const label sendProc = sendProcs[sampleI];
614 const label recvProc = recvProcs[sampleI];
635 subMap_[proci].setSize(nSend[proci]);
636 constructMap_[proci].setSize(nRecv[proci]);
641 forAll(sendProcs, sampleI)
643 const label sendProc = sendProcs[sampleI];
644 const label recvProc = recvProcs[sampleI];
649 subMap_[recvProc][nSend[recvProc]++] = sampleI;
654 constructMap_[sendProc][nRecv[sendProc]++] = sampleI;
656 constructSize_ = sampleI+1;
672 constructHasFlip_(
false),
678 calcCompactAddressing
731 constructHasFlip_(
false),
737 calcCompactAddressing
783 const bool subHasFlip,
784 const bool constructHasFlip
788 subMap_(std::move(subMap)),
789 subHasFlip_(subHasFlip),
790 constructHasFlip_(constructHasFlip),
811 label segmenti = nLocal;
812 forAll(constructMap, proci)
817 label nRecv = recvSizes[proci];
818 constructMap[proci].
setSize(nRecv);
820 for (label i = 0; i < nRecv; i++)
822 constructMap[proci][i] = segmenti++;
827 constructSize_ = segmenti;
828 constructMap_.
transfer(constructMap);
853 schedulePtr_.clear();
872 if (globalNumbering.
isLocal(globalI))
874 return globalNumbering.
toLocal(globalI);
878 label proci = globalNumbering.
whichProcID(globalI);
879 label index = globalNumbering.
toLocal(proci, globalI);
880 return compactMap[proci][index];
907 recvFields[domain].
setSize(map.size());
912 reinterpret_cast<char*
>(recvFields[domain].
data()),
913 recvFields[domain].size()*
sizeof(
bool),
924 const labelList& map = constructMap_[domain];
928 boolList& subField = sendFields[domain];
932 subField[i] = accessAndFlip
945 reinterpret_cast<const char*
>(subField.cdata()),
946 subField.size()*
sizeof(
bool),
988 if (recvFields[domain][i])
991 newMap[newI++] = map[i];
994 if (newI < map.size())
997 subMap_[domain].transfer(newMap);
1006 label maxConstructIndex = -1;
1010 const labelList& map = constructMap_[domain];
1017 label destinationI = map[i];
1018 if (constructHasFlip_)
1020 destinationI =
mag(destinationI)-1;
1024 if (elemIsUsed[destinationI])
1026 maxConstructIndex =
max(maxConstructIndex, destinationI);
1028 newMap[newI++] = map[i];
1031 if (newI < map.size())
1034 constructMap_[domain].transfer(newMap);
1038 constructSize_ = maxConstructIndex+1;
1041 schedulePtr_.clear();
1048 const label localSize,
1074 recvFields[domain].
setSize(map.size());
1079 reinterpret_cast<char*
>(recvFields[domain].
data()),
1080 recvFields[domain].size()*
sizeof(
bool),
1091 const labelList& map = constructMap_[domain];
1095 boolList& subField = sendFields[domain];
1099 label index = map[i];
1100 if (constructHasFlip_)
1102 index =
mag(index)-1;
1104 subField[i] = elemIsUsed[index];
1111 reinterpret_cast<const char*
>(subField.cdata()),
1112 subField.size()*
sizeof(
bool),
1128 label index = map[i];
1129 if (constructHasFlip_)
1131 index =
mag(index)-1;
1147 oldToNewSub.
setSize(localSize, -1);
1149 boolList sendElemIsUsed(localSize,
false);
1156 if (recvFields[domain][i])
1158 label index = map[i];
1161 index =
mag(index)-1;
1163 sendElemIsUsed[index] =
true;
1169 forAll(sendElemIsUsed, i)
1171 if (sendElemIsUsed[i])
1173 oldToNewSub[i] = newI++;
1189 if (recvFields[domain][i])
1192 label index = map[i];
1200 index =
mag(index)-1;
1202 label newIndex = oldToNewSub[index];
1205 newIndex =
sign*(newIndex+1);
1207 newMap[newI++] = newIndex;
1210 newMap.setSize(newI);
1211 subMap_[domain].transfer(newMap);
1220 oldToNewConstruct.
setSize(elemIsUsed.size(), -1);
1226 oldToNewConstruct[i] = constructSize_++;
1232 const labelList& map = constructMap_[domain];
1239 label destinationI = map[i];
1241 if (constructHasFlip_)
1243 if (destinationI < 0)
1247 destinationI =
mag(destinationI)-1;
1251 if (elemIsUsed[destinationI])
1253 label newIndex = oldToNewConstruct[destinationI];
1254 if (constructHasFlip_)
1256 newIndex =
sign*(newIndex+1);
1258 newMap[newI++] = newIndex;
1261 newMap.setSize(newI);
1262 constructMap_[domain].transfer(newMap);
1281 schedulePtr_.clear();