From 9859588d66bbeca64b11ae2c6e52346da4fdc8d6 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Tue, 4 Nov 2014 16:20:51 +0100 Subject: [PATCH] [Cleanup] multigridStep: Use a shared pointer for the solver --- src/fixedpointiterator.cc | 4 ++-- src/sand-wedge.cc | 2 +- src/solverfactory.cc | 8 ++++---- src/solverfactory.hh | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/fixedpointiterator.cc b/src/fixedpointiterator.cc index 4bc8dee7..e08ef871 100644 --- a/src/fixedpointiterator.cc +++ b/src/fixedpointiterator.cc @@ -42,8 +42,8 @@ FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run( EnergyNorm<Matrix, Vector> energyNorm(velocityMatrix); LoopSolver<Vector> velocityProblemSolver( - multigridStep, velocityMaxIterations_, velocityTolerance_, &energyNorm, - verbosity_, false); // absolute error + multigridStep.get(), velocityMaxIterations_, velocityTolerance_, + &energyNorm, verbosity_, false); // absolute error size_t fixedPointIteration; size_t multigridIterations = 0; diff --git a/src/sand-wedge.cc b/src/sand-wedge.cc index 1cf9d0ba..99616319 100644 --- a/src/sand-wedge.cc +++ b/src/sand-wedge.cc @@ -238,7 +238,7 @@ int main(int argc, char *argv[]) { auto multigridStep = factory.getSolver(); multigridStep->setProblem(_x, problem); LoopSolver<Vector> solver( - multigridStep, _localParset.get<size_t>("maximumIterations"), + multigridStep.get(), _localParset.get<size_t>("maximumIterations"), _localParset.get<double>("tolerance"), &_norm, _localParset.get<Solver::VerbosityMode>("verbosity"), false); // absolute error diff --git a/src/solverfactory.cc b/src/solverfactory.cc index 81f06b4b..2d58ea17 100644 --- a/src/solverfactory.cc +++ b/src/solverfactory.cc @@ -21,7 +21,8 @@ SolverFactory<dim, BlockProblem, Grid>::SolverFactory( parset.get<double>("linear.tolerance"), &baseEnergyNorm, Solver::QUIET), transferOperators(refinements), - multigridStep(new Solver(linearIterationStep, nonlinearSmoother)) { + multigridStep( + std::make_shared<Solver>(linearIterationStep, nonlinearSmoother)) { // linear iteration step linearIterationStep.setMGType(parset.get<int>("linear.cycle"), parset.get<int>("linear.pre"), @@ -47,12 +48,11 @@ template <size_t dim, class BlockProblem, class Grid> SolverFactory<dim, BlockProblem, Grid>::~SolverFactory() { for (auto &&x : transferOperators) delete x; - - delete multigridStep; } template <size_t dim, class BlockProblem, class Grid> -auto SolverFactory<dim, BlockProblem, Grid>::getSolver() -> Solver * { +auto SolverFactory<dim, BlockProblem, Grid>::getSolver() + -> std::shared_ptr<Solver> { return multigridStep; } diff --git a/src/solverfactory.hh b/src/solverfactory.hh index 93188af4..550a4f17 100644 --- a/src/solverfactory.hh +++ b/src/solverfactory.hh @@ -35,7 +35,7 @@ class SolverFactory { ~SolverFactory(); - Solver *getSolver(); + std::shared_ptr<Solver> getSolver(); private: TruncatedBlockGSStep<Matrix, Vector> linearBaseSolverStep; @@ -46,6 +46,6 @@ class SolverFactory { MultigridStep<Matrix, Vector> linearIterationStep; std::vector<CompressedMultigridTransfer<Vector> *> transferOperators; NonlinearSmoother nonlinearSmoother; - Solver *multigridStep; + std::shared_ptr<Solver> multigridStep; }; #endif -- GitLab