31 void Foam::GAMGSolver::agglomerateMatrix(
const label fineLevelIndex)
34 const lduMatrix& fineMatrix = matrixLevel(fineLevelIndex);
40 new lduMatrix(agglomeration_.
meshLevel(fineLevelIndex + 1))
42 lduMatrix& coarseMatrix = matrixLevels_[fineLevelIndex];
50 agglomeration_.
restrictField(coarseDiag, fineMatrix.diag(), fineLevelIndex);
54 interfaceLevel(fineLevelIndex);
57 const FieldField<Field, scalar>& fineInterfaceBouCoeffs =
58 interfaceBouCoeffsLevel(fineLevelIndex);
61 const FieldField<Field, scalar>& fineInterfaceIntCoeffs =
62 interfaceIntCoeffsLevel(fineLevelIndex);
73 interfaceLevels_[fineLevelIndex];
76 interfaceLevelsBouCoeffs_.
set
79 new FieldField<Field, scalar>(fineInterfaces.size())
81 FieldField<Field, scalar>& coarseInterfaceBouCoeffs =
82 interfaceLevelsBouCoeffs_[fineLevelIndex];
85 interfaceLevelsIntCoeffs_.
set
88 new FieldField<Field, scalar>(fineInterfaces.size())
90 FieldField<Field, scalar>& coarseInterfaceIntCoeffs =
91 interfaceLevelsIntCoeffs_[fineLevelIndex];
94 forAll (fineInterfaces, inti)
96 if (fineInterfaces.set(inti))
98 const GAMGInterface& coarseInterface =
99 refCast<const GAMGInterface>
114 coarseInterfaceBouCoeffs.set
117 coarseInterface.agglomerateCoeffs(fineInterfaceBouCoeffs[inti])
120 coarseInterfaceIntCoeffs.set
123 coarseInterface.agglomerateCoeffs(fineInterfaceIntCoeffs[inti])
131 if (fineMatrix.hasLower())
148 forAll(faceRestrictAddr, fineFacei)
150 label cFace = faceRestrictAddr[fineFacei];
156 if (cl[cFace] == restrictAddr[l[fineFacei]])
158 coarseUpper[cFace] += fineUpper[fineFacei];
159 coarseLower[cFace] += fineLower[fineFacei];
161 else if (cu[cFace] == restrictAddr[l[fineFacei]])
163 coarseUpper[cFace] += fineLower[fineFacei];
164 coarseLower[cFace] += fineUpper[fineFacei];
170 "GAMGSolver::agglomerateMatrix(const label)"
171 ) <<
"Inconsistent addressing between "
172 "fine and coarse grids"
179 coarseDiag[-1 - cFace] +=
180 fineUpper[fineFacei] + fineLower[fineFacei];
192 forAll(faceRestrictAddr, fineFacei)
194 label cFace = faceRestrictAddr[fineFacei];
198 coarseUpper[cFace] += fineUpper[fineFacei];
203 coarseDiag[-1 - cFace] += 2*fineUpper[fineFacei];