38 const label nFineCells = fineMatrixAddressing.
size();
45 labelList cellFaceOffsets(nFineCells + 1);
53 nNbrs[upperAddr[facei]]++;
58 nNbrs[lowerAddr[facei]]++;
61 cellFaceOffsets[0] = 0;
64 cellFaceOffsets[celli+1] = cellFaceOffsets[celli] + nNbrs[celli];
74 cellFaceOffsets[upperAddr[facei]] + nNbrs[upperAddr[facei]]
77 nNbrs[upperAddr[facei]]++;
84 cellFaceOffsets[lowerAddr[facei]] + nNbrs[lowerAddr[facei]]
87 nNbrs[lowerAddr[facei]]++;
99 for (label celli=0; celli<nFineCells; celli++)
101 if (coarseCellMap[celli] < 0)
103 label matchFaceNo = -1;
104 scalar maxFaceWeight = -GREAT;
109 label faceOs=cellFaceOffsets[celli];
110 faceOs<cellFaceOffsets[celli+1];
114 label facei = cellFaces[faceOs];
120 coarseCellMap[upperAddr[facei]] < 0
121 && coarseCellMap[lowerAddr[facei]] < 0
122 && faceWeights[facei] > maxFaceWeight
127 maxFaceWeight = faceWeights[facei];
131 if (matchFaceNo >= 0)
134 coarseCellMap[upperAddr[matchFaceNo]] = nCoarseCells;
135 coarseCellMap[lowerAddr[matchFaceNo]] = nCoarseCells;
142 label clusterMatchFaceNo = -1;
143 scalar clusterMaxFaceCoeff = -GREAT;
147 label faceOs=cellFaceOffsets[celli];
148 faceOs<cellFaceOffsets[celli+1];
152 label facei = cellFaces[faceOs];
154 if (faceWeights[facei] > clusterMaxFaceCoeff)
156 clusterMatchFaceNo = facei;
157 clusterMaxFaceCoeff = faceWeights[facei];
161 if (clusterMatchFaceNo >= 0)
164 coarseCellMap[celli] =
max
166 coarseCellMap[upperAddr[clusterMatchFaceNo]],
167 coarseCellMap[lowerAddr[clusterMatchFaceNo]]
177 for (label celli=0; celli<nFineCells; celli++)
179 if (coarseCellMap[celli] < 0)
181 coarseCellMap[celli] = nCoarseCells;
190 forAll (coarseCellMap, celli)
192 coarseCellMap[celli] = nCoarseCells - coarseCellMap[celli];
197 return tcoarseCellMap;
220 label nPairLevels = 0;
221 label nCreatedLevels = 0;
223 while (nCreatedLevels < maxLevels_ - 1)
225 label nCoarseCells = -1;
230 meshLevel(nCreatedLevels).lduAddr(),
234 if (continueAgglomerating(nCoarseCells))
236 nCells_[nCreatedLevels] = nCoarseCells;
237 restrictAddressing_.set(nCreatedLevels, finalAgglomPtr);
244 agglomerateLduAddressing(nCreatedLevels);
252 meshLevels_[nCreatedLevels].upperAddr().size(),
266 delete faceWeightsPtr;
269 faceWeightsPtr = aggFaceWeightsPtr;
272 if (nPairLevels % mergeLevels_)
274 combineLevels(nCreatedLevels);
285 compactLevels(nCreatedLevels);
290 delete faceWeightsPtr;