45 matrix_.Amul(Apsi,
psi, interfaceBouCoeffs_, interfaces_, cmpt);
52 scalar normFactor = this->normFactor(
psi, source, Apsi, finestCorrection);
56 Pout<<
" Normalisation factor = " << normFactor <<
endl;
66 matrix().
mesh().comm()
113 (scratch1.size() ? scratch1 : Apsi),
114 (scratch2.size() ? scratch2 : finestCorrection),
122 matrix_.Amul(Apsi,
psi, interfaceBouCoeffs_, interfaces_, cmpt);
123 finestResidual = source;
124 finestResidual -= Apsi;
129 matrix().
mesh().comm()
169 const label coarsestLevel = matrixLevels_.size() - 1;
172 agglomeration_.restrictField(coarseSources[0], finestResidual, 0,
true);
174 if (debug >= 2 && nPreSweeps_)
176 Pout<<
"Pre-smoothing scaling factors: ";
181 for (
label leveli = 0; leveli < coarsestLevel; leveli++)
183 if (coarseSources.
set(leveli + 1))
189 coarseCorrFields[leveli] = 0.0;
191 smoothers[leveli + 1].smooth
193 coarseCorrFields[leveli],
194 coarseSources[leveli],
198 nPreSweeps_ + preSweepsLevelMultiplier_*leveli,
206 coarseCorrFields[leveli].size()
211 if (scaleCorrection_ && leveli < coarsestLevel - 1)
215 coarseCorrFields[leveli],
220 matrixLevels_[leveli],
221 interfaceLevelsBouCoeffs_[leveli],
222 interfaceLevels_[leveli],
223 coarseSources[leveli],
229 matrixLevels_[leveli].Amul
235 coarseCorrFields[leveli],
236 interfaceLevelsBouCoeffs_[leveli],
237 interfaceLevels_[leveli],
241 coarseSources[leveli] -= ACf;
245 agglomeration_.restrictField
247 coarseSources[leveli + 1],
248 coarseSources[leveli],
255 if (debug >= 2 && nPreSweeps_)
262 if (coarseCorrFields.
set(coarsestLevel))
266 coarseCorrFields[coarsestLevel],
267 coarseSources[coarsestLevel]
273 Pout<<
"Post-smoothing scaling factors: ";
281 for (
label leveli = coarsestLevel - 1; leveli >= 0; leveli--)
283 if (coarseCorrFields.
set(leveli))
291 coarseCorrFields[leveli].size()
298 preSmoothedCoarseCorrField.assign(coarseCorrFields[leveli]);
301 agglomeration_.prolongField
303 coarseCorrFields[leveli],
305 coarseCorrFields.
set(leveli + 1)
306 ? coarseCorrFields[leveli + 1]
318 coarseCorrFields[leveli].size()
323 if (interpolateCorrection_)
325 if (coarseCorrFields.
set(leveli+1))
329 coarseCorrFields[leveli],
331 matrixLevels_[leveli],
332 interfaceLevelsBouCoeffs_[leveli],
333 interfaceLevels_[leveli],
334 agglomeration_.restrictAddressing(leveli + 1),
335 coarseCorrFields[leveli + 1],
343 coarseCorrFields[leveli],
345 matrixLevels_[leveli],
346 interfaceLevelsBouCoeffs_[leveli],
347 interfaceLevels_[leveli],
358 && (interpolateCorrection_ || leveli < coarsestLevel - 1)
363 coarseCorrFields[leveli],
365 matrixLevels_[leveli],
366 interfaceLevelsBouCoeffs_[leveli],
367 interfaceLevels_[leveli],
368 coarseSources[leveli],
377 coarseCorrFields[leveli] += preSmoothedCoarseCorrField;
380 smoothers[leveli + 1].smooth
382 coarseCorrFields[leveli],
383 coarseSources[leveli],
387 nPostSweeps_ + postSweepsLevelMultiplier_*leveli,
395 agglomeration_.prolongField
403 if (interpolateCorrection_)
412 agglomeration_.restrictAddressing(0),
418 if (scaleCorrection_)
435 psi[i] += finestCorrection[i];
457 label maxSize = matrix_.diag().size();
459 coarseCorrFields.
setSize(matrixLevels_.size());
460 coarseSources.
setSize(matrixLevels_.size());
461 smoothers.
setSize(matrixLevels_.size() + 1);
478 forAll(matrixLevels_, leveli)
480 if (agglomeration_.nCells(leveli) >= 0)
482 label nCoarseCells = agglomeration_.nCells(leveli);
487 if (matrixLevels_.set(leveli))
489 const lduMatrix& mat = matrixLevels_[leveli];
493 maxSize =
max(maxSize, nCoarseCells);
503 matrixLevels_[leveli],
504 interfaceLevelsBouCoeffs_[leveli],
505 interfaceLevelsIntCoeffs_[leveli],
506 interfaceLevels_[leveli],
513 if (maxSize > matrix_.diag().size())
516 scratch1.setSize(maxSize);
517 scratch2.setSize(maxSize);
528 const label coarsestLevel = matrixLevels_.size() - 1;
530 label coarseComm = matrixLevels_[coarsestLevel].mesh().comm();
531 label oldWarn = UPstream::warnComm;
532 UPstream::warnComm = coarseComm;
534 if (directSolveCoarsest_)
536 coarsestCorrField = coarsestSource;
537 coarsestLUMatrixPtr_->solve(coarsestCorrField);
646 coarsestCorrField = 0;
649 if (matrixLevels_[coarsestLevel].asymmetric())
651 coarseSolverPerf =
BICCG
654 matrixLevels_[coarsestLevel],
655 interfaceLevelsBouCoeffs_[coarsestLevel],
656 interfaceLevelsIntCoeffs_[coarsestLevel],
657 interfaceLevels_[coarsestLevel],
668 coarseSolverPerf =
ICCG
671 matrixLevels_[coarsestLevel],
672 interfaceLevelsBouCoeffs_[coarsestLevel],
673 interfaceLevelsIntCoeffs_[coarsestLevel],
674 interfaceLevels_[coarsestLevel],
690 UPstream::warnComm = oldWarn;