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

[Cleanup] multigridStep: Only retrieve multigrid step once

parent 461c9f40
No related branches found
No related tags found
No related merge requests found
...@@ -19,7 +19,7 @@ FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>:: ...@@ -19,7 +19,7 @@ FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::
FixedPointIterator(Factory &factory, Dune::ParameterTree const &parset, FixedPointIterator(Factory &factory, Dune::ParameterTree const &parset,
std::shared_ptr<Nonlinearity> globalFriction, std::shared_ptr<Nonlinearity> globalFriction,
ErrorNorm const &errorNorm) ErrorNorm const &errorNorm)
: factory_(factory), : step_(factory.getStep()),
parset_(parset), parset_(parset),
globalFriction_(globalFriction), globalFriction_(globalFriction),
fixedPointMaxIterations_(parset.get<size_t>("v.fpi.maximumIterations")), fixedPointMaxIterations_(parset.get<size_t>("v.fpi.maximumIterations")),
...@@ -38,12 +38,10 @@ FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run( ...@@ -38,12 +38,10 @@ FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run(
std::shared_ptr<VelocityUpdater> velocityUpdater, std::shared_ptr<VelocityUpdater> velocityUpdater,
Matrix const &velocityMatrix, Vector const &velocityRHS, Matrix const &velocityMatrix, Vector const &velocityRHS,
Vector &velocityIterate) { Vector &velocityIterate) {
auto multigridStep = factory_.getStep();
EnergyNorm<Matrix, Vector> energyNorm(velocityMatrix); EnergyNorm<Matrix, Vector> energyNorm(velocityMatrix);
LoopSolver<Vector> velocityProblemSolver( LoopSolver<Vector> velocityProblemSolver(step_.get(), velocityMaxIterations_,
multigridStep.get(), velocityMaxIterations_, velocityTolerance_, velocityTolerance_, &energyNorm,
&energyNorm, verbosity_, false); // absolute error verbosity_, false); // absolute error
size_t fixedPointIteration; size_t fixedPointIteration;
size_t multigridIterations = 0; size_t multigridIterations = 0;
...@@ -56,7 +54,7 @@ FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run( ...@@ -56,7 +54,7 @@ FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run(
ConvexProblem convexProblem(1.0, velocityMatrix, *globalFriction_, ConvexProblem convexProblem(1.0, velocityMatrix, *globalFriction_,
velocityRHS, velocityIterate); velocityRHS, velocityIterate);
BlockProblem velocityProblem(parset_, convexProblem); BlockProblem velocityProblem(parset_, convexProblem);
multigridStep->setProblem(velocityIterate, velocityProblem); step_->setProblem(velocityIterate, velocityProblem);
velocityProblemSolver.preprocess(); velocityProblemSolver.preprocess();
velocityProblemSolver.solve(); velocityProblemSolver.solve();
......
...@@ -38,7 +38,7 @@ class FixedPointIterator { ...@@ -38,7 +38,7 @@ class FixedPointIterator {
Vector &velocityIterate); Vector &velocityIterate);
private: private:
Factory &factory_; std::shared_ptr<typename Factory::Step> step_;
Dune::ParameterTree const &parset_; Dune::ParameterTree const &parset_;
std::shared_ptr<Nonlinearity> globalFriction_; std::shared_ptr<Nonlinearity> globalFriction_;
......
...@@ -26,10 +26,11 @@ class SolverFactory { ...@@ -26,10 +26,11 @@ class SolverFactory {
private: private:
using NonlinearSmoother = GenericNonlinearGS<BlockProblem>; using NonlinearSmoother = GenericNonlinearGS<BlockProblem>;
public:
using Step = using Step =
TruncatedNonsmoothNewtonMultigrid<BlockProblem, NonlinearSmoother>; TruncatedNonsmoothNewtonMultigrid<BlockProblem, NonlinearSmoother>;
public:
SolverFactory(Dune::ParameterTree const &parset, size_t refinements, SolverFactory(Dune::ParameterTree const &parset, size_t refinements,
Grid const &grid, Dune::BitSetVector<dim> const &ignoreNodes); Grid const &grid, Dune::BitSetVector<dim> const &ignoreNodes);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment