diff --git a/dune/solvers/iterationsteps/mmgstep.cc b/dune/solvers/iterationsteps/mmgstep.cc index 4ed55d968e29865768f7152762f34d3f46c3e56e..a9d5f8ca363ee9d82df503f7bff55412275cc077 100644 --- a/dune/solvers/iterationsteps/mmgstep.cc +++ b/dune/solvers/iterationsteps/mmgstep.cc @@ -66,8 +66,8 @@ preprocess() typedef ProjectedBlockGSStep<MatrixType, VectorType> SmootherType; - dynamic_cast<SmootherType*>(&loopBaseSolver->getIterationStep())->hasObstacle_ = hasObstacleHierarchy_[0].get(); - dynamic_cast<SmootherType*>(&loopBaseSolver->getIterationStep())->obstacles_ = obstacleHierarchy_[0].get(); + std::dynamic_pointer_cast<SmootherType>(loopBaseSolver->getIterationStep())->hasObstacle_ = hasObstacleHierarchy_[0].get(); + std::dynamic_pointer_cast<SmootherType>(loopBaseSolver->getIterationStep())->obstacles_ = obstacleHierarchy_[0].get(); #if HAVE_IPOPT } else if (typeid(*this->basesolver_) == typeid(QuadraticIPOptSolver<MatrixType,VectorType>)) { diff --git a/dune/solvers/iterationsteps/multigridstep.cc b/dune/solvers/iterationsteps/multigridstep.cc index 0361d6d34b1adadc0e1c7959a77e985cebb0f4c1..186dfdd3e24005eef59bc01debcb535380cc4c32 100644 --- a/dune/solvers/iterationsteps/multigridstep.cc +++ b/dune/solvers/iterationsteps/multigridstep.cc @@ -162,7 +162,7 @@ void MultigridStep<MatrixType, VectorType, BitVectorType>::preprocess() typedef ::LoopSolver<VectorType> DuneSolversLoopSolver; if (auto loopBaseSolver = std::dynamic_pointer_cast<DuneSolversLoopSolver>(this->basesolver_)) { - auto iterationStep = dynamic_cast<SmootherType*>(&loopBaseSolver->getIterationStep()); + auto iterationStep = std::dynamic_pointer_cast<SmootherType>(loopBaseSolver->getIterationStep()); assert(iterationStep); iterationStep->setProblem(*(this->matrixHierarchy_[0]), *this->xHierarchy_[0], this->rhsHierarchy_[0]); iterationStep->setIgnore(*ignoreNodesHierarchy_[0]);