59 void Foam::simpleGeomDecomp::assignToProcessorGroup
62 const label nProcGroup
65 label jump = processorGroup.size()/nProcGroup;
66 label jumpb = jump + 1;
67 label fstProcessorGroup = processorGroup.size() - jump*nProcGroup;
74 for (j=0; j<fstProcessorGroup; j++)
76 for (
register label
k=0;
k<jumpb;
k++)
78 processorGroup[ind++] = j;
83 for (; j<nProcGroup; j++)
85 for (
register label
k=0;
k<jump;
k++)
87 processorGroup[ind++] = j;
93 void Foam::simpleGeomDecomp::assignToProcessorGroup
96 const label nProcGroup,
99 const scalar summedWeights
112 const scalar jump = summedWeights/nProcGroup;
113 const label nProcGroupM1 = nProcGroup - 1;
114 scalar sumWeights = 0;
119 for (j=0; j<nProcGroupM1; j++)
121 const scalar
limit = jump*scalar(j + 1);
122 while (sumWeights < limit)
124 sumWeights += weights[indices[ind]];
125 processorGroup[ind++] = j;
129 while (ind < processorGroup.size())
131 processorGroup[ind++] = nProcGroupM1;
138 Foam::simpleGeomDecomp::simpleGeomDecomp(
const dictionary& decompositionDict)
144 Foam::simpleGeomDecomp::simpleGeomDecomp
182 assignToProcessorGroup(processorGroups, n_.x());
186 finalDecomp[pointIndices[i]] = processorGroups[i];
198 assignToProcessorGroup(processorGroups, n_.y());
202 finalDecomp[pointIndices[i]] += n_.x()*processorGroups[i];
214 assignToProcessorGroup(processorGroups, n_.z());
218 finalDecomp[pointIndices[i]] += n_.x()*n_.y()*processorGroups[i];
255 const scalar summedWeights =
sum(weights);
256 assignToProcessorGroup
267 finalDecomp[pointIndices[i]] = processorGroups[i];
279 assignToProcessorGroup
290 finalDecomp[pointIndices[i]] += n_.x()*processorGroups[i];
302 assignToProcessorGroup
313 finalDecomp[pointIndices[i]] += n_.x()*n_.y()*processorGroups[i];