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