mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
GAMG solver: Add additional controls for pre- and post-sweeps:
preSweepsLevelMultiplier
maxPreSweeps
postSweepsLevelMultiplier
maxPostSweeps
which control the way in which the number of sweeps increases with level
This commit is contained in:
@ -65,7 +65,11 @@ Foam::GAMGSolver::GAMGSolver
|
|||||||
// which may be overridden by those in controlDict
|
// which may be overridden by those in controlDict
|
||||||
cacheAgglomeration_(false),
|
cacheAgglomeration_(false),
|
||||||
nPreSweeps_(0),
|
nPreSweeps_(0),
|
||||||
|
preSweepsLevelMultiplier_(1),
|
||||||
|
maxPreSweeps_(10),
|
||||||
nPostSweeps_(2),
|
nPostSweeps_(2),
|
||||||
|
postSweepsLevelMultiplier_(1),
|
||||||
|
maxPostSweeps_(10),
|
||||||
nFinestSweeps_(2),
|
nFinestSweeps_(2),
|
||||||
scaleCorrection_(matrix.symmetric()),
|
scaleCorrection_(matrix.symmetric()),
|
||||||
directSolveCoarsest_(false),
|
directSolveCoarsest_(false),
|
||||||
@ -156,7 +160,19 @@ void Foam::GAMGSolver::readControls()
|
|||||||
// we could also consider supplying defaults here too
|
// we could also consider supplying defaults here too
|
||||||
controlDict_.readIfPresent("cacheAgglomeration", cacheAgglomeration_);
|
controlDict_.readIfPresent("cacheAgglomeration", cacheAgglomeration_);
|
||||||
controlDict_.readIfPresent("nPreSweeps", nPreSweeps_);
|
controlDict_.readIfPresent("nPreSweeps", nPreSweeps_);
|
||||||
|
controlDict_.readIfPresent
|
||||||
|
(
|
||||||
|
"preSweepsLevelMultiplier",
|
||||||
|
preSweepsLevelMultiplier_
|
||||||
|
);
|
||||||
|
controlDict_.readIfPresent("maxPreSweeps", maxPreSweeps_);
|
||||||
controlDict_.readIfPresent("nPostSweeps", nPostSweeps_);
|
controlDict_.readIfPresent("nPostSweeps", nPostSweeps_);
|
||||||
|
controlDict_.readIfPresent
|
||||||
|
(
|
||||||
|
"postSweepsLevelMultiplier",
|
||||||
|
postSweepsLevelMultiplier_
|
||||||
|
);
|
||||||
|
controlDict_.readIfPresent("maxPostSweeps", maxPostSweeps_);
|
||||||
controlDict_.readIfPresent("nFinestSweeps", nFinestSweeps_);
|
controlDict_.readIfPresent("nFinestSweeps", nFinestSweeps_);
|
||||||
controlDict_.readIfPresent("scaleCorrection", scaleCorrection_);
|
controlDict_.readIfPresent("scaleCorrection", scaleCorrection_);
|
||||||
controlDict_.readIfPresent("directSolveCoarsest", directSolveCoarsest_);
|
controlDict_.readIfPresent("directSolveCoarsest", directSolveCoarsest_);
|
||||||
|
|||||||
@ -79,9 +79,21 @@ class GAMGSolver
|
|||||||
//- Number of pre-smoothing sweeps
|
//- Number of pre-smoothing sweeps
|
||||||
label nPreSweeps_;
|
label nPreSweeps_;
|
||||||
|
|
||||||
|
//- Lever multiplier for the number of pre-smoothing sweeps
|
||||||
|
label preSweepsLevelMultiplier_;
|
||||||
|
|
||||||
|
//- Maximum number of pre-smoothing sweeps
|
||||||
|
label maxPreSweeps_;
|
||||||
|
|
||||||
//- Number of post-smoothing sweeps
|
//- Number of post-smoothing sweeps
|
||||||
label nPostSweeps_;
|
label nPostSweeps_;
|
||||||
|
|
||||||
|
//- Lever multiplier for the number of post-smoothing sweeps
|
||||||
|
label postSweepsLevelMultiplier_;
|
||||||
|
|
||||||
|
//- Maximum number of post-smoothing sweeps
|
||||||
|
label maxPostSweeps_;
|
||||||
|
|
||||||
//- Number of smoothing sweeps on finest mesh
|
//- Number of smoothing sweeps on finest mesh
|
||||||
label nFinestSweeps_;
|
label nFinestSweeps_;
|
||||||
|
|
||||||
|
|||||||
@ -156,7 +156,11 @@ void Foam::GAMGSolver::Vcycle
|
|||||||
coarseCorrFields[leveli],
|
coarseCorrFields[leveli],
|
||||||
coarseSources[leveli],
|
coarseSources[leveli],
|
||||||
cmpt,
|
cmpt,
|
||||||
nPreSweeps_ + leveli
|
min
|
||||||
|
(
|
||||||
|
nPreSweeps_ + preSweepsLevelMultiplier_*leveli,
|
||||||
|
maxPreSweeps_
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
scalarField::subField ACf
|
scalarField::subField ACf
|
||||||
@ -297,7 +301,11 @@ void Foam::GAMGSolver::Vcycle
|
|||||||
coarseCorrFields[leveli],
|
coarseCorrFields[leveli],
|
||||||
coarseSources[leveli],
|
coarseSources[leveli],
|
||||||
cmpt,
|
cmpt,
|
||||||
nPostSweeps_ + leveli
|
min
|
||||||
|
(
|
||||||
|
nPostSweeps_ + postSweepsLevelMultiplier_*leveli,
|
||||||
|
maxPostSweeps_
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user