From ae2acb3f6d2e290bb9fa4fa45db9c2aa1d3d2cb9 Mon Sep 17 00:00:00 2001 From: Max Kahnt <max.kahnt@fu-berlin.de> Date: Mon, 22 Feb 2016 10:47:46 +0100 Subject: [PATCH] Add ProjectedBlockGSStep test. --- dune/solvers/test/gssteptest.cc | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/dune/solvers/test/gssteptest.cc b/dune/solvers/test/gssteptest.cc index 4552f71f..089d7e56 100644 --- a/dune/solvers/test/gssteptest.cc +++ b/dune/solvers/test/gssteptest.cc @@ -11,6 +11,7 @@ #include <dune/solvers/solvers/loopsolver.hh> #include <dune/solvers/iterationsteps/blockgsstep.hh> +#include <dune/solvers/iterationsteps/projectedblockgsstep.hh> #include <dune/solvers/iterationsteps/semidefiniteblockgsstep.hh> #include "common.hh" @@ -55,7 +56,7 @@ struct GSTestSuite bool check(const GridType& grid) { double stepTol = 1e-12; // termination criterion - double solveTol = 1e-6; // error in the solution + double solveTol = 1.3e-5; // error in the solution int maxIterations = 10000; bool passed = true; @@ -97,6 +98,27 @@ struct GSTestSuite test(&gsStep, "BlockGS"); } + { + size_t size = p.u.size(); + using GSStep = ProjectedBlockGSStep<Matrix, Vector>; + ProjectedBlockGSStep<Matrix, Vector> gsStep; + typename GSStep::HasObstacle hasObstacle(size, false); + gsStep.hasObstacle_ = &hasObstacle; + test(&gsStep, "ProjectedBlockGS w/o obstacle"); + + hasObstacle.setAll(); + std::vector<typename GSStep::Obstacle> obstacles(size); + for(size_t i=0; i<size; ++i) { + hasObstacle[i] = true; + for(size_t j=0; j<Vector::block_type::dimension; ++j) { + obstacles[i].lower(j) = j; + obstacles[i].upper(j) = j+1; + } + } + gsStep.obstacles_ = &obstacles; + test(&gsStep, "ProjectedBlockGS w obstacle"); + } + for(auto reg : {false, true}) { for(auto type : {"direct", "ldlt", "cg"}) { Dune::ParameterTree config; -- GitLab