35 lduMatrix::solver::addsymMatrixConstructorToTable<GAMGSolver>
38 lduMatrix::solver::addasymMatrixConstructorToTable<GAMGSolver>
47 const word& fieldName,
67 cacheAgglomeration_(
true),
69 preSweepsLevelMultiplier_(1),
72 postSweepsLevelMultiplier_(1),
75 interpolateCorrection_(
false),
77 directSolveCoarsest_(
false),
80 matrixLevels_(agglomeration_.size()),
81 primitiveInterfaceLevels_(agglomeration_.size()),
82 interfaceLevels_(agglomeration_.size()),
83 interfaceLevelsBouCoeffs_(agglomeration_.size()),
84 interfaceLevelsIntCoeffs_(agglomeration_.size())
88 if (agglomeration_.processorAgglomerate())
90 forAll(agglomeration_, fineLevelIndex)
92 if (agglomeration_.hasMeshLevel(fineLevelIndex))
96 (fineLevelIndex+1) < agglomeration_.size()
97 && agglomeration_.hasProcMesh(fineLevelIndex+1)
107 agglomeration_.interfaceLevel(fineLevelIndex);
111 fineMeshInterfaces.
size()
115 dummyPrimMeshInterfaces.
size()
117 forAll(fineMeshInterfaces, intI)
119 if (fineMeshInterfaces.
set(intI))
122 refCast<const GAMGInterface>
124 fineMeshInterfaces[intI]
128 dummyPrimMeshInterfaces.
set
133 fineMeshInterfaces[intI].
type(),
142 forAll(dummyPrimMeshInterfaces, intI)
144 if (dummyPrimMeshInterfaces.
set(intI))
146 dummyMeshInterfaces.
set
149 &dummyPrimMeshInterfaces[intI]
160 agglomeration_.meshLevel(fineLevelIndex),
166 agglomeration_.procAgglomMap(fineLevelIndex+1);
168 agglomeration_.agglomProcIDs(fineLevelIndex+1);
170 procAgglomerateMatrix
182 agglomeration_.meshLevel(fineLevelIndex + 1),
183 agglomeration_.interfaceLevel(fineLevelIndex + 1)
195 forAll(agglomeration_, fineLevelIndex)
201 agglomeration_.meshLevel(fineLevelIndex + 1),
202 agglomeration_.interfaceLevel(fineLevelIndex + 1)
212 label fineLevelIndex = 0;
213 fineLevelIndex <= matrixLevels_.size();
217 if (fineLevelIndex == 0 || matrixLevels_.set(fineLevelIndex-1))
219 const lduMatrix& matrix = matrixLevel(fineLevelIndex);
221 interfaceLevel(fineLevelIndex);
223 Pout<<
"level:" << fineLevelIndex <<
nl
224 <<
" nCells:" << matrix.
diag().size() <<
nl
225 <<
" nFaces:" << matrix.
lower().size() <<
nl
226 <<
" nInterfaces:" << interfaces.
size()
231 if (interfaces.
set(i))
234 <<
"\ttype:" << interfaces[i].type()
241 Pout<<
"level:" << fineLevelIndex <<
" : no matrix" <<
endl;
248 if (matrixLevels_.size())
250 if (directSolveCoarsest_)
252 const label coarsestLevel = matrixLevels_.size() - 1;
254 if (matrixLevels_.set(coarsestLevel))
257 matrixLevels_[coarsestLevel].mesh();
260 label oldWarn = UPstream::warnComm;
261 UPstream::warnComm = coarseComm;
263 coarsestLUMatrixPtr_.set
267 matrixLevels_[coarsestLevel],
268 interfaceLevelsBouCoeffs_[coarsestLevel],
269 interfaceLevels_[coarsestLevel]
273 UPstream::warnComm = oldWarn;
280 <<
"No coarse levels created, either matrix too small for GAMG"
281 " or nCellsInCoarsestLevel too large.\n"
282 " Either choose another solver of reduce "
283 "nCellsInCoarsestLevel."
306 controlDict_.readIfPresent(
"cacheAgglomeration", cacheAgglomeration_);
307 controlDict_.readIfPresent(
"nPreSweeps", nPreSweeps_);
308 controlDict_.readIfPresent
310 "preSweepsLevelMultiplier",
311 preSweepsLevelMultiplier_
313 controlDict_.readIfPresent(
"maxPreSweeps", maxPreSweeps_);
314 controlDict_.readIfPresent(
"nPostSweeps", nPostSweeps_);
315 controlDict_.readIfPresent
317 "postSweepsLevelMultiplier",
318 postSweepsLevelMultiplier_
320 controlDict_.readIfPresent(
"maxPostSweeps", maxPostSweeps_);
321 controlDict_.readIfPresent(
"nFinestSweeps", nFinestSweeps_);
322 controlDict_.readIfPresent(
"interpolateCorrection", interpolateCorrection_);
323 controlDict_.readIfPresent(
"scaleCorrection", scaleCorrection_);
324 controlDict_.readIfPresent(
"directSolveCoarsest", directSolveCoarsest_);
328 Pout<<
"GAMGSolver settings :"
329 <<
" cacheAgglomeration:" << cacheAgglomeration_
330 <<
" nPreSweeps:" << nPreSweeps_
331 <<
" preSweepsLevelMultiplier:" << preSweepsLevelMultiplier_
332 <<
" maxPreSweeps:" << maxPreSweeps_
333 <<
" nPostSweeps:" << nPostSweeps_
334 <<
" postSweepsLevelMultiplier:" << postSweepsLevelMultiplier_
335 <<
" maxPostSweeps:" << maxPostSweeps_
336 <<
" nFinestSweeps:" << nFinestSweeps_
337 <<
" interpolateCorrection:" << interpolateCorrection_
338 <<
" scaleCorrection:" << scaleCorrection_
339 <<
" directSolveCoarsest:" << directSolveCoarsest_
353 return matrixLevels_[i - 1];
369 return interfaceLevels_[i - 1];
382 return interfaceBouCoeffs_;
386 return interfaceLevelsBouCoeffs_[i - 1];
399 return interfaceIntCoeffs_;
403 return interfaceLevelsIntCoeffs_[i - 1];