From e22205d3d4b86b4108f26b33e617303ea54fcb6b Mon Sep 17 00:00:00 2001 From: Henry <Henry> Date: Wed, 26 Dec 2012 15:54:00 +0000 Subject: [PATCH] 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 --- .../matrices/lduMatrix/solvers/GAMG/GAMGSolver.C | 16 ++++++++++++++++ .../matrices/lduMatrix/solvers/GAMG/GAMGSolver.H | 12 ++++++++++++ .../lduMatrix/solvers/GAMG/GAMGSolverSolve.C | 12 ++++++++++-- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolver.C b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolver.C index 4d2ec30de2f..a8b348e6459 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolver.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolver.C @@ -65,7 +65,11 @@ Foam::GAMGSolver::GAMGSolver // which may be overridden by those in controlDict cacheAgglomeration_(false), nPreSweeps_(0), + preSweepsLevelMultiplier_(1), + maxPreSweeps_(10), nPostSweeps_(2), + postSweepsLevelMultiplier_(1), + maxPostSweeps_(10), nFinestSweeps_(2), scaleCorrection_(matrix.symmetric()), directSolveCoarsest_(false), @@ -156,7 +160,19 @@ void Foam::GAMGSolver::readControls() // we could also consider supplying defaults here too controlDict_.readIfPresent("cacheAgglomeration", cacheAgglomeration_); controlDict_.readIfPresent("nPreSweeps", nPreSweeps_); + controlDict_.readIfPresent + ( + "preSweepsLevelMultiplier", + preSweepsLevelMultiplier_ + ); + controlDict_.readIfPresent("maxPreSweeps", maxPreSweeps_); controlDict_.readIfPresent("nPostSweeps", nPostSweeps_); + controlDict_.readIfPresent + ( + "postSweepsLevelMultiplier", + postSweepsLevelMultiplier_ + ); + controlDict_.readIfPresent("maxPostSweeps", maxPostSweeps_); controlDict_.readIfPresent("nFinestSweeps", nFinestSweeps_); controlDict_.readIfPresent("scaleCorrection", scaleCorrection_); controlDict_.readIfPresent("directSolveCoarsest", directSolveCoarsest_); diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolver.H b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolver.H index 273d2c75b21..c2aefbea16a 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolver.H +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolver.H @@ -79,9 +79,21 @@ class GAMGSolver //- Number of pre-smoothing sweeps 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 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 label nFinestSweeps_; diff --git a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolverSolve.C b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolverSolve.C index 248c421f2e3..25c8e6dbe56 100644 --- a/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolverSolve.C +++ b/src/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGSolverSolve.C @@ -156,7 +156,11 @@ void Foam::GAMGSolver::Vcycle coarseCorrFields[leveli], coarseSources[leveli], cmpt, - nPreSweeps_ + leveli + min + ( + nPreSweeps_ + preSweepsLevelMultiplier_*leveli, + maxPreSweeps_ + ) ); scalarField::subField ACf @@ -297,7 +301,11 @@ void Foam::GAMGSolver::Vcycle coarseCorrFields[leveli], coarseSources[leveli], cmpt, - nPostSweeps_ + leveli + min + ( + nPostSweeps_ + postSweepsLevelMultiplier_*leveli, + maxPostSweeps_ + ) ); } -- GitLab