From 980ce9debc9a148dc96ca9ecbef0d6608c63ef4e Mon Sep 17 00:00:00 2001 From: Max Kahnt <max.kahnt@fu-berlin.de> Date: Mon, 9 Oct 2017 16:32:16 +0200 Subject: [PATCH] Hold transfer operators with shared pointers instead of raw pointers. --- dune/solvers/iterationsteps/obstacletnnmgstep.hh | 2 +- dune/solvers/test/multigridtest.cc | 11 +++++++---- dune/solvers/test/obstacletnnmgtest.cc | 7 +++---- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/dune/solvers/iterationsteps/obstacletnnmgstep.hh b/dune/solvers/iterationsteps/obstacletnnmgstep.hh index 09e2db71..009ffcf3 100644 --- a/dune/solvers/iterationsteps/obstacletnnmgstep.hh +++ b/dune/solvers/iterationsteps/obstacletnnmgstep.hh @@ -67,7 +67,7 @@ class ObstacleTNNMGStep typedef typename Dune::BitSetVector<VectorType::block_type::dimension> BitVector; typedef MultigridTransfer<Vector, BitVector, Matrix> Transfer; - typedef typename std::vector<Transfer*> TransferPointerVector; + typedef typename std::vector<std::shared_ptr<Transfer>> TransferPointerVector; protected: diff --git a/dune/solvers/test/multigridtest.cc b/dune/solvers/test/multigridtest.cc index d387649e..ea5fa69b 100644 --- a/dune/solvers/test/multigridtest.cc +++ b/dune/solvers/test/multigridtest.cc @@ -55,10 +55,13 @@ struct MultigridTestSuite typedef MultigridTransfer<Vector, BitVector, Matrix> Transfer; typedef CompressedMultigridTransfer<Vector, BitVector, Matrix> TransferImplementation; - // create transfer operators from level i to i+1 (note that this will only work for either uniformly refined grids or adaptive grids with RefinementType=COPY) - std::vector<Transfer> transfer(grid.maxLevel()); - for (size_t i = 0; i < transfer.size(); ++i) { - transfer[i].setup(grid, i, i+1); + std::vector<std::shared_ptr<Transfer>> transfer(grid.maxLevel()); + for (size_t i = 0; i < transfer.size(); ++i) + { + // create transfer operators from level i to i+1 (note that this will only work for either uniformly refined grids or adaptive grids with RefinementType=COPY) + auto t = std::make_shared<TransferImplementation>(); + t->setup(grid, i, i+1); + transfer[i] = t; } // set up smoothers and basesolver diff --git a/dune/solvers/test/obstacletnnmgtest.cc b/dune/solvers/test/obstacletnnmgtest.cc index d7a55e48..23858a85 100644 --- a/dune/solvers/test/obstacletnnmgtest.cc +++ b/dune/solvers/test/obstacletnnmgtest.cc @@ -53,12 +53,11 @@ void solveObstacleProblemByTNNMG(const GridType& grid, const MatrixType& mat, Ve const int blockSize = VectorType::block_type::dimension; - // we need a vector of pointers to the transfer operator base class - std::vector<Transfer*> transfer(grid.maxLevel()); + std::vector<std::shared_ptr<Transfer>> transfer(grid.maxLevel()); for (size_t i = 0; i < transfer.size(); ++i) { - // create transfer operator from level i to i+1 - TransferImplementation* t = new TransferImplementation; + // create transfer operators from level i to i+1 + auto t = std::make_shared<TransferImplementation>(); t->setup(grid, i, i+1); transfer[i] = t; } -- GitLab