diff --git a/dune/solvers/test/gssteptest.cc b/dune/solvers/test/gssteptest.cc index 0f7356877cd7be7680b98e54ef18d90a13681b33..30b8e58b9e446ebaabc4bfb1aef73c40c535d05a 100644 --- a/dune/solvers/test/gssteptest.cc +++ b/dune/solvers/test/gssteptest.cc @@ -24,13 +24,14 @@ * is solved correctly for a random rhs by a LoopSolver employing * a GSStep. */ -template <size_t blocksize> +template <size_t blocksize, bool trivialDirichletOnly = true> struct GSTestSuite { template <class GridType> bool check(const GridType& grid) { bool passed = true; - using Problem = SymmetricSampleProblem<blocksize, typename GridType::LevelGridView>; + using Problem = SymmetricSampleProblem<blocksize, typename GridType::LevelGridView, + trivialDirichletOnly>; Problem p(grid.levelGridView(grid.maxLevel())); const auto verbosity = Solver::QUIET; @@ -144,14 +145,19 @@ struct GSTestSuite { Matrix, Vector>::createPtrFromConfig(config); auto gsString2 = Dune::formatString("Dune::Solvers::BlockGS(%s) %s", type, reg ? "regularized" : ""); - test(&gsStep1, gsString1); - test(gsStep2Ptr.get(), gsString2); - diffTest(&gsStep1, gsString1, gsStep2Ptr.get(), gsString2, 1e-8); + if (trivialDirichletOnly) { // TODO: missing feature in SDBlockGS + test(&gsStep1, gsString1); + test(gsStep2Ptr.get(), gsString2); + diffTest(&gsStep1, gsString1, gsStep2Ptr.get(), gsString2, 1e-8); + } else { + test(gsStep2Ptr.get(), gsString2); + } } } } // test projected block GS + if (trivialDirichletOnly) // TODO: missing feature in ProjectedBlockGS { size_t size = p.u.size(); using GSStep = ProjectedBlockGSStep<Matrix, Vector>; @@ -186,5 +192,10 @@ int main(int argc, char** argv) { GSTestSuite<2> testsuite2; passed &= checkWithStandardGrids(testsuite2); + std::cout << std::endl; + + GSTestSuite<2, false> testsuite2f; + passed &= checkWithStandardGrids(testsuite2f); + return passed ? 0 : 1; }