58 if (procI != Pstream::myProcNo())
60 if (subMap[procI].size())
65 if (constructMap[procI].size())
72 allComms = commsSet.
toc();
77 if (Pstream::master())
82 int slave=Pstream::firstSlave();
83 slave<=Pstream::lastSlave();
87 IPstream fromSlave(Pstream::scheduled, slave, 0, tag);
92 if (
findIndex(allComms, nbrData[i]) == -1)
96 allComms[sz] = nbrData[i];
103 int slave=Pstream::firstSlave();
104 slave<=Pstream::lastSlave();
108 OPstream toSlave(Pstream::scheduled, slave, 0, tag);
115 OPstream toMaster(Pstream::scheduled, Pstream::masterNo(), 0, tag);
116 toMaster << allComms;
126 fromMaster >> allComms;
138 ).procSchedule()[Pstream::myProcNo()]
187 const label expectedSize,
188 const label receivedSize
191 if (receivedSize != expectedSize)
194 <<
"Expected from processor " << procI
195 <<
" " << expectedSize <<
" but received "
196 << receivedSize <<
" elements."
207 forAll(constructMap_, procI)
209 const labelList& construct = constructMap_[procI];
210 if (constructHasFlip_)
215 minIndex[procI] =
min(minIndex[procI], index);
216 maxIndex[procI] =
max(maxIndex[procI], index);
223 label index = construct[i];
224 minIndex[procI] =
min(minIndex[procI], index);
225 maxIndex[procI] =
max(maxIndex[procI], index);
240 os <<
"Layout: (constructSize:" << constructSize_
241 <<
" subHasFlip:" << subHasFlip_
242 <<
" constructHasFlip:" << constructHasFlip_
245 <<
" start : 0" <<
endl
246 <<
" size : " << localSize <<
endl;
248 label offset = localSize;
253 if (constructMap_[procI].size() > 0)
255 if (minIndex[procI] != offset)
258 <<
"offset:" << offset
259 <<
" procI:" << procI
260 <<
" minIndex:" << minIndex[procI]
264 label size = maxIndex[procI]-minIndex[procI]+1;
265 os <<
"processor " << procI <<
':' <<
endl
266 <<
" start : " << offset <<
endl
267 <<
" size : " << size <<
endl;
304 compactMap[procI].clear();
307 compactMap[procI].resize(2*nNonLocal[procI]);
321 label nCompact = compactMap[procI].size();
322 compactMap[procI].insert(index, nCompact);
342 const labelList& cCells = cellCells[cellI];
358 compactMap[procI].clear();
361 compactMap[procI].resize(2*nNonLocal[procI]);
369 const labelList& cCells = cellCells[cellI];
379 label nCompact = compactMap[procI].size();
380 compactMap[procI].insert(index, nCompact);
402 constructSize_ = globalNumbering.
localSize();
403 forAll(compactStart, procI)
407 compactStart[procI] = constructSize_;
408 constructSize_ += compactMap[procI].
size();
426 wantedRemoteElements[procI] =
identity(nLocal);
427 constructMap_[procI] =
identity(nLocal);
432 labelList& remoteElem = wantedRemoteElements[procI];
433 labelList& localElem = constructMap_[procI];
434 remoteElem.
setSize(compactMap[procI].size());
435 localElem.
setSize(compactMap[procI].size());
439 const label compactI = compactStart[procI] + iter();
440 remoteElem[i] = iter.key();
441 localElem[i] = compactI;
450 Pstream::exchange<labelList, label>
452 wantedRemoteElements,
462 elements[i] =
renumber(globalNumbering, compactMap, elements[i]);
482 constructSize_ = globalNumbering.
localSize();
483 forAll(compactStart, procI)
487 compactStart[procI] = constructSize_;
488 constructSize_ += compactMap[procI].
size();
506 wantedRemoteElements[procI] =
identity(nLocal);
507 constructMap_[procI] =
identity(nLocal);
512 labelList& remoteElem = wantedRemoteElements[procI];
513 labelList& localElem = constructMap_[procI];
514 remoteElem.
setSize(compactMap[procI].size());
515 localElem.
setSize(compactMap[procI].size());
519 const label compactI = compactStart[procI] + iter();
520 remoteElem[i] = iter.key();
521 localElem[i] = compactI;
530 Pstream::exchange<labelList, label>
532 wantedRemoteElements,
546 cCells[i] =
renumber(globalNumbering, compactMap, cCells[i]);
559 constructHasFlip_(false),
567 const label constructSize,
570 const bool subHasFlip,
571 const bool constructHasFlip
574 constructSize_(constructSize),
576 constructMap_(constructMap),
577 subHasFlip_(subHasFlip),
578 constructHasFlip_(constructHasFlip),
591 constructHasFlip_(
false),
594 if (sendProcs.
size() != recvProcs.
size())
597 <<
"The send and receive data is not the same length. sendProcs:"
598 << sendProcs.
size() <<
" recvProcs:" << recvProcs.
size()
606 forAll(sendProcs, sampleI)
608 label sendProc = sendProcs[sampleI];
609 label recvProc = recvProcs[sampleI];
630 subMap_[procI].setSize(nSend[procI]);
631 constructMap_[procI].setSize(nRecv[procI]);
636 forAll(sendProcs, sampleI)
638 label sendProc = sendProcs[sampleI];
639 label recvProc = recvProcs[sampleI];
644 subMap_[recvProc][nSend[recvProc]++] = sampleI;
649 constructMap_[sendProc][nRecv[sendProc]++] = sampleI;
651 constructSize_ = sampleI+1;
667 constructHasFlip_(
false),
673 calcCompactAddressing
727 constructHasFlip_(
false),
733 calcCompactAddressing
779 constructSize_(map.constructSize_),
780 subMap_(map.subMap_),
781 constructMap_(map.constructMap_),
782 subHasFlip_(map.subHasFlip_),
783 constructHasFlip_(map.constructHasFlip_),
790 constructSize_(map().constructSize_),
791 subMap_(map().subMap_.xfer()),
792 constructMap_(map().constructMap_.xfer()),
793 subHasFlip_(map().subHasFlip_),
794 constructHasFlip_(map().constructHasFlip_),
814 schedulePtr_.clear();
835 if (globalNumbering.
isLocal(globalI))
837 return globalNumbering.
toLocal(globalI);
843 return compactMap[procI][index];
875 reinterpret_cast<char*
>(recvFields[domain].begin()),
876 recvFields[domain].size()*
sizeof(
bool),
887 const labelList& map = constructMap_[domain];
891 boolList& subField = sendFields[domain];
895 subField[i] = accessAndFlip
908 reinterpret_cast<const char*
>(subField.begin()),
909 subField.
size()*
sizeof(
bool),
951 if (recvFields[domain][i])
954 newMap[newI++] = map[i];
957 if (newI < map.
size())
960 subMap_[domain].transfer(newMap);
969 label maxConstructIndex = -1;
973 const labelList& map = constructMap_[domain];
980 label destinationI = map[i];
981 if (constructHasFlip_)
983 destinationI =
mag(destinationI)-1;
987 if (elemIsUsed[destinationI])
989 maxConstructIndex =
max(maxConstructIndex, destinationI);
991 newMap[newI++] = map[i];
994 if (newI < map.
size())
997 constructMap_[domain].transfer(newMap);
1001 constructSize_ = maxConstructIndex+1;
1004 schedulePtr_.clear();
1011 const label localSize,
1042 reinterpret_cast<char*
>(recvFields[domain].begin()),
1043 recvFields[domain].size()*
sizeof(
bool),
1054 const labelList& map = constructMap_[domain];
1058 boolList& subField = sendFields[domain];
1062 label index = map[i];
1063 if (constructHasFlip_)
1065 index =
mag(index)-1;
1067 subField[i] = elemIsUsed[index];
1074 reinterpret_cast<const char*
>(subField.begin()),
1075 subField.
size()*
sizeof(
bool),
1091 label index = map[i];
1092 if (constructHasFlip_)
1094 index =
mag(index)-1;
1110 oldToNewSub.
setSize(localSize, -1);
1112 boolList sendElemIsUsed(localSize,
false);
1119 if (recvFields[domain][i])
1121 label index = map[i];
1124 index =
mag(index)-1;
1126 sendElemIsUsed[index] =
true;
1132 forAll(sendElemIsUsed, i)
1134 if (sendElemIsUsed[i])
1136 oldToNewSub[i] = newI++;
1152 if (recvFields[domain][i])
1155 label index = map[i];
1163 index =
mag(index)-1;
1165 label newIndex = oldToNewSub[index];
1168 newIndex =
sign*(newIndex+1);
1170 newMap[newI++] = newIndex;
1174 subMap_[domain].transfer(newMap);
1189 oldToNewConstruct[i] = constructSize_++;
1195 const labelList& map = constructMap_[domain];
1202 label destinationI = map[i];
1204 if (constructHasFlip_)
1206 if (destinationI < 0)
1210 destinationI =
mag(destinationI)-1;
1214 if (elemIsUsed[destinationI])
1216 label newIndex = oldToNewConstruct[destinationI];
1217 if (constructHasFlip_)
1219 newIndex =
sign*(newIndex+1);
1221 newMap[newI++] = newIndex;
1225 constructMap_[domain].transfer(newMap);
1238 <<
"Attempted assignment to self"
1246 schedulePtr_.clear();
1254 is.
fatalCheck(
"operator>>(Istream&, mapDistributeBase&)");
1270 << map.subHasFlip_ <<
token::SPACE << map.constructHasFlip_