From 2651bae751a52c321cecbb2f392866f79cc6abec Mon Sep 17 00:00:00 2001
From: Jonathan Youett <youett@math.fu-berlin.de>
Date: Thu, 26 Oct 2017 16:29:40 +0200
Subject: [PATCH] Transferoperators are now stored in shared pointer

---
 dune/solvers/iterationsteps/mmgstep.cc | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/dune/solvers/iterationsteps/mmgstep.cc b/dune/solvers/iterationsteps/mmgstep.cc
index a9395e9f..4ed55d96 100644
--- a/dune/solvers/iterationsteps/mmgstep.cc
+++ b/dune/solvers/iterationsteps/mmgstep.cc
@@ -16,8 +16,8 @@ preprocess()
 {
     // Unset the recompute bitfields, so we compute the full stiffness matrix hierarchy at the beginning
     for (size_t i=0; i<this->mgTransfer_.size(); i++) {
-        dynamic_cast<TruncatedMGTransfer<VectorType>*>(this->mgTransfer_[i])->setRecomputeBitField(nullptr);
-        dynamic_cast<TruncatedMGTransfer<VectorType>*>(this->mgTransfer_[i])->setCriticalBitField(nullptr);
+        std::dynamic_pointer_cast<TruncatedMGTransfer<VectorType> >(this->mgTransfer_[i])->setRecomputeBitField(nullptr);
+        std::dynamic_pointer_cast<TruncatedMGTransfer<VectorType> >(this->mgTransfer_[i])->setCriticalBitField(nullptr);
     }
 
     // Call preprocess of the base class
@@ -40,7 +40,7 @@ preprocess()
     {
         recompute_[i].resize(hasObstacleHierarchy_[i]->size());
         recompute_[i].unsetAll();
-        dynamic_cast<TruncatedMGTransfer<VectorType>*>(this->mgTransfer_[i])->setRecomputeBitField(&recompute_[i]);
+        std::dynamic_pointer_cast<TruncatedMGTransfer<VectorType> >(this->mgTransfer_[i])->setRecomputeBitField(&recompute_[i]);
     }
 
     oldCritical_.resize(this->numLevels());
@@ -212,12 +212,12 @@ void MonotoneMGStep<MatrixType, VectorType>::iterate()
             for (int j=0; j<dim; j++)
               changed[i][j] = (changed[i][j] || recompute_[level][i][j]);
 
-        dynamic_cast<TruncatedMGTransfer<VectorType>*>(this->mgTransfer_[level-1])->restrict(changed, recompute_[level-1]);
+        std::dynamic_pointer_cast<TruncatedMGTransfer<VectorType> >(this->mgTransfer_[level-1])->restrict(changed, recompute_[level-1]);
 
         oldCritical_[level] = critical;
 
         // Set bitfield of nodes that will be truncated
-        dynamic_cast<TruncatedMGTransfer<VectorType>*>(this->mgTransfer_[level-1])->setCriticalBitField(&critical);
+        std::dynamic_pointer_cast<TruncatedMGTransfer<VectorType> >(this->mgTransfer_[level-1])->setCriticalBitField(&critical);
 
         // Restrict stiffness matrix
         this->mgTransfer_[level-1]->galerkinRestrict(*(mat[level]), *(const_cast<MatrixType*>(mat[level-1].get())));
@@ -259,7 +259,7 @@ void MonotoneMGStep<MatrixType, VectorType>::iterate()
 
         // Remove pointer to the temporary critical bitfield
         // this avoids a memory problem when the same mmg step is reused
-        dynamic_cast<TruncatedMGTransfer<VectorType>*>(this->mgTransfer_[level-1])->setCriticalBitField(nullptr);
+        std::dynamic_pointer_cast<TruncatedMGTransfer<VectorType> >(this->mgTransfer_[level-1])->setCriticalBitField(nullptr);
 
         // restore the true (non-defect) obstacles
         *obstacles[level] = obstacleBackup;
-- 
GitLab