From 7edff98d2d19ee8b1b46595046ec06e681444b26 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Thu, 14 Jul 2016 20:48:58 +0200 Subject: [PATCH] Propagate ignoreNodes to preconditioner In analogy to a multigridstep and its basesolver/smoother/etc. --- dune/solvers/iterationsteps/cgstep.cc | 7 +++++++ dune/solvers/test/cgsteptest.cc | 1 - 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/dune/solvers/iterationsteps/cgstep.cc b/dune/solvers/iterationsteps/cgstep.cc index 3085b2b7..94f86e9d 100644 --- a/dune/solvers/iterationsteps/cgstep.cc +++ b/dune/solvers/iterationsteps/cgstep.cc @@ -1,6 +1,8 @@ // -*- tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- // vi: set et ts=8 sw=4 sts=4: +#include <dune/solvers/common/canignore.hh> + template <class MatrixType, class VectorType> void CGStep<MatrixType, VectorType>::check() const { @@ -17,6 +19,11 @@ void CGStep<MatrixType, VectorType>::preprocess() r_[i] = 0; if (preconditioner_) { + using CanIgnore_t = CanIgnore<DefaultBitVector_t<VectorType>>; + CanIgnore_t *asCanIgnore = dynamic_cast<CanIgnore_t*>(preconditioner_); + if (asCanIgnore != nullptr and this->hasIgnore()) + asCanIgnore->setIgnore(this->ignore()); + preconditioner_->setMatrix(*matrix_); preconditioner_->apply(p_, r_); } else diff --git a/dune/solvers/test/cgsteptest.cc b/dune/solvers/test/cgsteptest.cc index 2acc984d..87cc7f62 100644 --- a/dune/solvers/test/cgsteptest.cc +++ b/dune/solvers/test/cgsteptest.cc @@ -93,7 +93,6 @@ struct CGTestSuite typename Problem::Vector>:: create(Dune::Solvers::BlockGS::LocalSolvers::gs(), Dune::Solvers::BlockGS::Direction::SYMMETRIC); - blockgs.setIgnore(p.ignore); Dune::Solvers::CGStep<typename Problem::Matrix, typename Problem::Vector> cgStep(p.A, u_copy, rhs_copy, -- GitLab