33 const label fineLevelIndex
36 const lduMesh& fineMesh = meshLevel(fineLevelIndex);
42 label nFineFaces = upperAddr.
size();
45 const labelField& restrictMap = restrictAddressing(fineLevelIndex);
47 if (
min(restrictMap) == -1)
49 FatalErrorIn(
"GAMGAgglomeration::agglomerateLduAddressing")
53 if (restrictMap.
size() != fineMeshAddr.
size())
57 "GAMGAgglomeration::agglomerateLduAddressing"
58 "(const label fineLevelIndex)"
59 ) <<
"restrict map does not correspond to fine level. " <<
endl
60 <<
" Sizes: restrictMap: " << restrictMap.
size()
61 <<
" nEqns: " << fineMeshAddr.
size()
67 const label nCoarseCells = nCells_[fineLevelIndex];
78 labelList cCellFaces(maxNnbrs*nCoarseCells);
81 faceRestrictAddressing_.set(fineLevelIndex,
new labelList(nFineFaces));
82 labelList& faceRestrictAddr = faceRestrictAddressing_[fineLevelIndex];
88 label nCoarseFaces = 0;
91 forAll (upperAddr, fineFacei)
93 label rmUpperAddr = restrictMap[upperAddr[fineFacei]];
94 label rmLowerAddr = restrictMap[lowerAddr[fineFacei]];
96 if (rmUpperAddr == rmLowerAddr)
101 faceRestrictAddr[fineFacei] = -(rmUpperAddr + 1);
107 label cOwn = rmUpperAddr;
108 label cNei = rmLowerAddr;
111 if (rmUpperAddr > rmLowerAddr)
118 label* ccFaces = &cCellFaces[maxNnbrs*cOwn];
120 bool nbrFound =
false;
121 label& ccnFaces = cCellnFaces[cOwn];
123 for (
int i=0; i<ccnFaces; i++)
125 if (initCoarseNeighb[ccFaces[i]] == cNei)
128 faceRestrictAddr[fineFacei] = ccFaces[i];
135 if (ccnFaces >= maxNnbrs)
137 label oldMaxNnbrs = maxNnbrs;
140 cCellFaces.
setSize(maxNnbrs*nCoarseCells);
144 label* oldCcNbrs = &cCellFaces[oldMaxNnbrs*i];
145 label* newCcNbrs = &cCellFaces[maxNnbrs*i];
147 for (
int j=0; j<cCellnFaces[i]; j++)
149 newCcNbrs[j] = oldCcNbrs[j];
153 ccFaces = &cCellFaces[maxNnbrs*cOwn];
156 ccFaces[ccnFaces] = nCoarseFaces;
157 initCoarseNeighb[nCoarseFaces] = cNei;
158 faceRestrictAddr[fineFacei] = nCoarseFaces;
175 label coarseFacei = 0;
179 label* cFaces = &cCellFaces[maxNnbrs*cci];
180 label ccnFaces = cCellnFaces[cci];
182 for (
int i=0; i<ccnFaces; i++)
184 coarseOwner[coarseFacei] = cci;
185 coarseNeighbour[coarseFacei] = initCoarseNeighb[cFaces[i]];
186 coarseFaceMap[cFaces[i]] = coarseFacei;
191 forAll(faceRestrictAddr, fineFacei)
193 if (faceRestrictAddr[fineFacei] >= 0)
195 faceRestrictAddr[fineFacei] =
196 coarseFaceMap[faceRestrictAddr[fineFacei]];
211 interfaceLevels_[fineLevelIndex];
221 interfaceLevels_[fineLevelIndex + 1];
226 forAll (fineInterfaces, inti)
228 if (fineInterfaces.
set(inti))
230 fineInterfaces[inti].initInternalFieldTransfer
239 forAll (fineInterfaces, inti)
241 if (fineInterfaces.
set(inti))
248 fineInterfaces[inti],
249 fineInterfaces[inti].interfaceInternalField(restrictMap),
250 fineInterfaces[inti].internalFieldTransfer
258 coarseInterfaceAddr[inti] = coarseInterfaces[inti].faceCells();