From b49a879c563c273e540677f080c1ecd1a45585a1 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Fri, 2 Oct 2015 08:22:27 +0200 Subject: [PATCH] CGStepTest: Use symmetric BlockGS preconditioner --- dune/solvers/test/cgsteptest.cc | 39 +++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/dune/solvers/test/cgsteptest.cc b/dune/solvers/test/cgsteptest.cc index 07c54bb2..d9608840 100644 --- a/dune/solvers/test/cgsteptest.cc +++ b/dune/solvers/test/cgsteptest.cc @@ -9,6 +9,7 @@ #include <dune/solvers/norms/energynorm.hh> #include <dune/solvers/solvers/loopsolver.hh> +#include <dune/solvers/iterationsteps/blockgsstep.hh> #include <dune/solvers/iterationsteps/cgstep.hh> #include <dune/solvers/solvers/cgsolver.hh> @@ -111,6 +112,25 @@ struct CGTestSuite passed = passed and analyser.analyse(u_copy, testCase); } + { + std::string const testCase = "CGSolver, preconditioned "; + + Vector u_copy = u; + Vector rhs_copy = rhs; + + using BGS = BlockGSStep<Matrix,Vector,BitVector>; + BGS blockgs(BGS::Direction::SYMMETRIC); + blockgs.ignoreNodes_ = new BitVector(u.size(), false); + + CGSolver<Matrix,Vector> solver(&A, &u_copy, &rhs_copy, &blockgs, + maxIterations, stepTol, &energyNorm, + verbosity, relativeErrors); + solver.check(); + solver.preprocess(); + solver.solve(); + + passed = passed and analyser.analyse(u_copy, testCase); + } { std::string const testCase = "Dune::Solvers::CGStep "; @@ -126,6 +146,25 @@ struct CGTestSuite passed = passed and analyser.analyse(u_copy, testCase); } + { + std::string const testCase = "Dune::Solvers::CGStep, preconditioned"; + + Vector u_copy = u; + Vector rhs_copy = rhs; + + using BGS = BlockGSStep<Matrix,Vector,BitVector>; + BGS blockgs(BGS::Direction::SYMMETRIC); + blockgs.ignoreNodes_ = new BitVector(u.size(), false); + + Dune::Solvers::CGStep<Matrix,Vector> cgStep(A, u_copy, rhs_copy, blockgs); + ::LoopSolver<Vector> solver(&cgStep, maxIterations, stepTol, &energyNorm, + verbosity, relativeErrors); + solver.check(); + solver.preprocess(); + solver.solve(); + + passed = passed and analyser.analyse(u_copy, testCase); + } return passed; } }; -- GitLab