From eba49954c36b51fdb628aad2ae93f0009011fadd Mon Sep 17 00:00:00 2001 From: Oliver Sander <oliver.sander@tu-dresden.de> Date: Fri, 4 Sep 2020 08:14:27 +0200 Subject: [PATCH] Fix bug in MultigridStep constructor One constructor contained an assignment from a C pointer to std::shared_ptr. Apparently nobody ever uses this constructor (otherwise the bug would have been noticed a long time ago), but the clang CI runs for the dune-gfe modules complain. This patch adds a fix and a small test. --- dune/solvers/iterationsteps/multigridstep.hh | 2 +- dune/solvers/test/multigridtest.cc | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/dune/solvers/iterationsteps/multigridstep.hh b/dune/solvers/iterationsteps/multigridstep.hh index a1dce7d6..e2ae953c 100644 --- a/dune/solvers/iterationsteps/multigridstep.hh +++ b/dune/solvers/iterationsteps/multigridstep.hh @@ -54,7 +54,7 @@ namespace Dune { setSmoother(preSmoother,postSmoother); - basesolver_ = baseSolver; + basesolver_ = std::shared_ptr<Solver>(baseSolver, [](auto*){} ); this->ignoreNodes_ = ignoreNodes; } diff --git a/dune/solvers/test/multigridtest.cc b/dune/solvers/test/multigridtest.cc index 43eb2094..46a31182 100644 --- a/dune/solvers/test/multigridtest.cc +++ b/dune/solvers/test/multigridtest.cc @@ -85,6 +85,13 @@ struct MultigridTestSuite mgStep.setIgnore(p.ignore); mgStep.setBaseSolver(basesolver); + // create an unused second multigrid step just to check that the constructor works + MGStep alternativeStep(p.A, p.u, p.rhs, + 1, 3, 3, + &smoother, &smoother, + &basesolver, + &p.ignore); + // create loop solver Solver solver(mgStep, maxIterations, tol, p.energyNorm, Solver::FULL); -- GitLab