diff --git a/dune/solvers/iterationsteps/cgstep.cc b/dune/solvers/iterationsteps/cgstep.cc index 3085b2b776afdb0dcd96f4b1fed936b2db3ccb30..94f86e9d6cb254095e8237283c5097e9958ef9a6 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 2acc984df817f927cfe6d57f43c8be591de50e3a..87cc7f62acef5294695170f4e15506f42967d1f7 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,