diff --git a/dune/solvers/iterationsteps/multigridstep.hh b/dune/solvers/iterationsteps/multigridstep.hh index a1dce7d69107da85a98459cd02dcfe5d486cbfb9..e2ae953c0788c2b0f3d48d88abb576008413a1ee 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 43eb20949acdc857c6cf5d5c0f92a49d76b9fc87..46a31182aa02e92832ab300f44535e2150bc0391 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);