Skip to content
Snippets Groups Projects
Commit 9859588d authored by Elias Pipping's avatar Elias Pipping
Browse files

[Cleanup] multigridStep: Use a shared pointer for the solver

parent 4bea0810
No related branches found
No related tags found
No related merge requests found
......@@ -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;
......
......@@ -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
......
......@@ -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;
}
......
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment