34 template<
class Container,
class ProcPatch>
43 label nNeighbours = 0;
47 boolList isNeighbourProc(nProcs,
false);
51 const typename Container::const_reference patch =
patches[
patchi];
53 if (isA<ProcPatch>(patch))
55 const ProcPatch& procPatch =
56 refCast<const ProcPatch>(patch);
58 label pNeighbProcNo = procPatch.neighbProcNo();
60 if (!isNeighbourProc[pNeighbProcNo])
64 maxNb =
max(maxNb, procPatch.neighbProcNo());
66 isNeighbourProc[pNeighbProcNo] =
true;
75 forAll(isNeighbourProc, procI)
77 if (isNeighbourProc[procI])
79 neighbours[nNeighbours++] = procI;
83 procPatchMap_.
setSize(maxNb + 1);
88 const typename Container::const_reference patch =
patches[
patchi];
90 if (isA<ProcPatch>(patch))
92 const ProcPatch& procPatch =
93 refCast<const ProcPatch>(patch);
96 procPatchMap_[procPatch.neighbProcNo()] =
patchi;
107 template<
class Container,
class ProcPatch>
115 patchSchedule_(2*
patches.size())
117 if (Pstream::parRun())
120 operator[](Pstream::myProcNo(comm)) =
124 Pstream::gatherList(*
this, Pstream::msgType(), comm);
125 Pstream::scatterList(*
this, Pstream::msgType(), comm);
128 if (Pstream::parRun() && Pstream::defaultCommsType == Pstream::scheduled)
130 label patchEvali = 0;
139 patchSchedule_[patchEvali].patch =
patchi;
140 patchSchedule_[patchEvali++].init =
true;
141 patchSchedule_[patchEvali].patch =
patchi;
142 patchSchedule_[patchEvali++].init =
false;
155 nComms += operator[](procI).size();
161 const labelList& nbrs = operator[](procI);
178 Pstream::nProcs(comm),
180 ).procSchedule()[Pstream::myProcNo(comm)]
185 label commI = mySchedule[iter];
188 label nb = comms[commI][0];
189 if (nb == Pstream::myProcNo(comm))
191 nb = comms[commI][1];
195 if (Pstream::myProcNo(comm) > nb)
197 patchSchedule_[patchEvali].patch =
patchi;
198 patchSchedule_[patchEvali++].init =
true;
199 patchSchedule_[patchEvali].patch =
patchi;
200 patchSchedule_[patchEvali++].init =
false;
204 patchSchedule_[patchEvali].patch =
patchi;
205 patchSchedule_[patchEvali++].init =
false;
206 patchSchedule_[patchEvali].patch =
patchi;
207 patchSchedule_[patchEvali++].init =
true;
213 patchSchedule_ = nonBlockingSchedule(
patches);
220 template<
class Container,
class ProcPatch>
229 label patchEvali = 0;
243 patchSchedule[patchEvali].patch =
patchi;
244 patchSchedule[patchEvali++].init =
true;
245 patchSchedule[patchEvali].patch =
patchi;
246 patchSchedule[patchEvali++].init =
false;
258 patchSchedule[patchEvali].patch =
patchi;
259 patchSchedule[patchEvali++].init =
true;
268 patchSchedule[patchEvali].patch =
patchi;
269 patchSchedule[patchEvali++].init =
false;
273 return patchSchedule;