From d0e634908dfc870e0fca679e0bf9119d3c4f1adc Mon Sep 17 00:00:00 2001 From: Lasse Hinrichsen <lh1887@mi.fu-berlin.de> Date: Wed, 18 Jan 2017 11:34:30 +0100 Subject: [PATCH] Let MultigridStep work with derived base solvers When the preprocess method was updated in 3c1a1b4e, one could no longer supply e.g. an UMFPackSolver as a base solver since it only derives from LinearSolver but may have a different typeid. --- dune/solvers/iterationsteps/multigridstep.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dune/solvers/iterationsteps/multigridstep.cc b/dune/solvers/iterationsteps/multigridstep.cc index f8025637..a0339410 100644 --- a/dune/solvers/iterationsteps/multigridstep.cc +++ b/dune/solvers/iterationsteps/multigridstep.cc @@ -146,7 +146,7 @@ void MultigridStep<MatrixType, VectorType, BitVectorType>::preprocess() typedef ::LoopSolver<VectorType> DuneSolversLoopSolver; - if (typeid(*this->basesolver_) == typeid(DuneSolversLoopSolver)) { + if (dynamic_cast<DuneSolversLoopSolver*>(this->basesolver_)) { DuneSolversLoopSolver* loopBaseSolver = dynamic_cast<DuneSolversLoopSolver*> (this->basesolver_); @@ -157,7 +157,7 @@ void MultigridStep<MatrixType, VectorType, BitVectorType>::preprocess() dynamic_cast<SmootherType*>(loopBaseSolver->iterationStep_)->ignoreNodes_ = ignoreNodesHierarchy_[0]; } - else if (typeid(*this->basesolver_) == typeid(LinearSolver<MatrixType,VectorType>)) { + else if (dynamic_cast<LinearSolver<MatrixType, VectorType>*>(this->basesolver_)) { LinearSolver<MatrixType,VectorType>* linearBaseSolver = dynamic_cast<LinearSolver<MatrixType,VectorType>*> (this->basesolver_); -- GitLab