diff --git a/dune/solvers/test/cgsteptest.cc b/dune/solvers/test/cgsteptest.cc index 07c54bb2d49ac21d43a6c7529de09997448423e4..d96088403e25cb55f2917b859fdf6db4040f4e1f 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; } };