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