34 lduMatrix::solver::addsymMatrixConstructorToTable<GAMGSolver>
37 lduMatrix::solver::addasymMatrixConstructorToTable<GAMGSolver>
46 const word& fieldName,
66 cacheAgglomeration_(
false),
71 directSolveCoarsest_(
false),
72 agglomeration_(GAMGAgglomeration::New(matrix_, controlDict_)),
74 matrixLevels_(agglomeration_.size()),
75 interfaceLevels_(agglomeration_.size()),
76 interfaceLevelsBouCoeffs_(agglomeration_.size()),
77 interfaceLevelsIntCoeffs_(agglomeration_.size())
81 forAll(agglomeration_, fineLevelIndex)
83 agglomerateMatrix(fineLevelIndex);
86 if (matrixLevels_.size())
88 const label coarsestLevel = matrixLevels_.size() - 1;
90 if (directSolveCoarsest_)
92 coarsestLUMatrixPtr_.set
96 matrixLevels_[coarsestLevel],
97 interfaceLevelsBouCoeffs_[coarsestLevel],
98 interfaceLevels_[coarsestLevel]
107 "GAMGSolver::GAMGSolver"
109 "const word& fieldName,"
110 "const lduMatrix& matrix,"
111 "const FieldField<Field, scalar>& interfaceBouCoeffs,"
112 "const FieldField<Field, scalar>& interfaceIntCoeffs,"
113 "const lduInterfaceFieldPtrsList& interfaces,"
114 "const dictionary& solverControls"
116 ) <<
"No coarse levels created, either matrix too small for GAMG"
117 " or nCellsInCoarsestLevel too large.\n"
118 " Either choose another solver of reduce "
119 "nCellsInCoarsestLevel."
130 forAll (interfaceLevels_, leveli)
143 if (!cacheAgglomeration_)
145 delete &agglomeration_;
152 void Foam::GAMGSolver::readControls()
157 controlDict_.readIfPresent(
"cacheAgglomeration", cacheAgglomeration_);
158 controlDict_.readIfPresent(
"nPreSweeps", nPreSweeps_);
159 controlDict_.readIfPresent(
"nPostSweeps", nPostSweeps_);
160 controlDict_.readIfPresent(
"nFinestSweeps", nFinestSweeps_);
161 controlDict_.readIfPresent(
"scaleCorrection", scaleCorrection_);
162 controlDict_.readIfPresent(
"directSolveCoarsest", directSolveCoarsest_);
166 const Foam::lduMatrix& Foam::GAMGSolver::matrixLevel(
const label i)
const
174 return matrixLevels_[i - 1];
190 return interfaceLevels_[i - 1];
196 Foam::GAMGSolver::interfaceBouCoeffsLevel
203 return interfaceBouCoeffs_;
207 return interfaceLevelsBouCoeffs_[i - 1];
213 Foam::GAMGSolver::interfaceIntCoeffsLevel
220 return interfaceIntCoeffs_;
224 return interfaceLevelsIntCoeffs_[i - 1];