40 void Foam::MGridGenGAMGAgglomeration::
41 makeCompactCellFaceAddressingAndFaceWeights
43 const lduAddressing& fineAddressing,
44 List<idxtype>& cellCells,
45 List<idxtype>& cellCellOffsets,
47 List<scalar>& faceWeights
50 const label nFineCells = fineAddressing.size();
51 const label nFineFaces = fineAddressing.upperAddr().size();
61 nNbrs[upperAddr[facei]]++;
66 nNbrs[lowerAddr[facei]]++;
70 cellCellOffsets.setSize(nFineCells + 1);
71 cellCells.setSize(2*nFineFaces);
72 faceWeights.setSize(2*nFineFaces);
75 cellCellOffsets[0] = 0;
78 cellCellOffsets[celli+1] = cellCellOffsets[celli] + nNbrs[celli];
86 label own = upperAddr[facei];
87 label nei = lowerAddr[facei];
89 label l1 = cellCellOffsets[own] + nNbrs[own]++;
90 label l2 = cellCellOffsets[nei] + nNbrs[nei]++;
95 faceWeights[l1] =
mag(Si[facei]);
96 faceWeights[l2] =
mag(Si[facei]);
106 const lduAddressing& fineAddressing,
112 const label nFineCells = fineAddressing.size();
115 List<idxtype> cellCells;
116 List<idxtype> cellCellOffsets;
119 List<scalar> faceWeights;
122 makeCompactCellFaceAddressingAndFaceWeights
132 List<int> options(4, 0);
136 options[3] = fvMesh_.nGeometricD();
140 List<int> finalAgglom(nFineCells);
146 cellCellOffsets.begin(),
147 const_cast<scalar*
>(V.begin()),
148 const_cast<scalar*>(Sb.begin()),
159 return tmp<labelField>(
new labelField(finalAgglom));