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

[Output] Write out multigrid iterations

parent 4a97dcf2
No related branches found
No related tags found
No related merge requests found
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
#endif #endif
#include "coupledtimestepper.hh" #include "coupledtimestepper.hh"
#include "fixedpointiterator.hh"
template <class Factory, class StateUpdater, class VelocityUpdater, template <class Factory, class StateUpdater, class VelocityUpdater,
class ErrorNorm> class ErrorNorm>
...@@ -26,7 +25,8 @@ CoupledTimeStepper<Factory, StateUpdater, VelocityUpdater, ErrorNorm>:: ...@@ -26,7 +25,8 @@ CoupledTimeStepper<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::
template <class Factory, class StateUpdater, class VelocityUpdater, template <class Factory, class StateUpdater, class VelocityUpdater,
class ErrorNorm> class ErrorNorm>
int CoupledTimeStepper<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::step( FixedPointIterationCounter
CoupledTimeStepper<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::step(
double relativeTime, double relativeTau) { double relativeTime, double relativeTau) {
stateUpdater_->nextTimeStep(); stateUpdater_->nextTimeStep();
velocityUpdater_->nextTimeStep(); velocityUpdater_->nextTimeStep();
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <memory> #include <memory>
#include <dune/common/parametertree.hh> #include <dune/common/parametertree.hh>
#include "fixedpointiterator.hh"
template <class Factory, class StateUpdater, class VelocityUpdater, template <class Factory, class StateUpdater, class VelocityUpdater,
class ErrorNorm> class ErrorNorm>
...@@ -23,7 +24,7 @@ class CoupledTimeStepper { ...@@ -23,7 +24,7 @@ class CoupledTimeStepper {
ErrorNorm const &errorNorm, ErrorNorm const &errorNorm,
std::function<void(double, Vector &)> externalForces); std::function<void(double, Vector &)> externalForces);
int step(double relativeTime, double relativeTau); FixedPointIterationCounter step(double relativeTime, double relativeTau);
private: private:
double finalTime_; double finalTime_;
......
...@@ -32,7 +32,8 @@ FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>:: ...@@ -32,7 +32,8 @@ FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::
template <class Factory, class StateUpdater, class VelocityUpdater, template <class Factory, class StateUpdater, class VelocityUpdater,
class ErrorNorm> class ErrorNorm>
int FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run( FixedPointIterationCounter
FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run(
std::shared_ptr<StateUpdater> stateUpdater, std::shared_ptr<StateUpdater> stateUpdater,
std::shared_ptr<VelocityUpdater> velocityUpdater, std::shared_ptr<VelocityUpdater> velocityUpdater,
Matrix const &velocityMatrix, Vector const &velocityRHS, Matrix const &velocityMatrix, Vector const &velocityRHS,
...@@ -45,6 +46,7 @@ int FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run( ...@@ -45,6 +46,7 @@ int FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run(
verbosity_, false); // absolute error verbosity_, false); // absolute error
size_t fixedPointIteration; size_t fixedPointIteration;
size_t multigridIterations = 0;
ScalarVector alpha; ScalarVector alpha;
stateUpdater->extractAlpha(alpha); stateUpdater->extractAlpha(alpha);
for (fixedPointIteration = 0; fixedPointIteration < fixedPointMaxIterations_; for (fixedPointIteration = 0; fixedPointIteration < fixedPointMaxIterations_;
...@@ -58,6 +60,8 @@ int FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run( ...@@ -58,6 +60,8 @@ int FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run(
velocityProblemSolver.preprocess(); velocityProblemSolver.preprocess();
velocityProblemSolver.solve(); velocityProblemSolver.solve();
multigridIterations += velocityProblemSolver.getResult().iterations;
Vector v_m; Vector v_m;
velocityUpdater->extractOldVelocity(v_m); velocityUpdater->extractOldVelocity(v_m);
v_m *= 1.0 - lambda_; v_m *= 1.0 - lambda_;
...@@ -79,7 +83,13 @@ int FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run( ...@@ -79,7 +83,13 @@ int FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::run(
velocityUpdater->postProcess(velocityIterate); velocityUpdater->postProcess(velocityIterate);
return fixedPointIteration; return { fixedPointIteration, multigridIterations };
}
std::ostream &operator<<(std::ostream &stream,
FixedPointIterationCounter const &fpic) {
return stream << "(" << fpic.iterations << "," << fpic.multigridIterations
<< ")";
} }
#include "fixedpointiterator_tmpl.cc" #include "fixedpointiterator_tmpl.cc"
...@@ -8,6 +8,14 @@ ...@@ -8,6 +8,14 @@
#include <dune/solvers/norms/norm.hh> #include <dune/solvers/norms/norm.hh>
#include <dune/solvers/solvers/solver.hh> #include <dune/solvers/solvers/solver.hh>
struct FixedPointIterationCounter {
size_t iterations;
size_t multigridIterations;
};
std::ostream &operator<<(std::ostream &stream,
FixedPointIterationCounter const &fpic);
template <class Factory, class StateUpdater, class VelocityUpdater, template <class Factory, class StateUpdater, class VelocityUpdater,
class ErrorNorm> class ErrorNorm>
class FixedPointIterator { class FixedPointIterator {
...@@ -23,10 +31,11 @@ class FixedPointIterator { ...@@ -23,10 +31,11 @@ class FixedPointIterator {
std::shared_ptr<Nonlinearity> globalFriction, std::shared_ptr<Nonlinearity> globalFriction,
ErrorNorm const &errorNorm_); ErrorNorm const &errorNorm_);
int run(std::shared_ptr<StateUpdater> stateUpdater, FixedPointIterationCounter run(
std::shared_ptr<VelocityUpdater> velocityUpdater, std::shared_ptr<StateUpdater> stateUpdater,
Matrix const &velocityMatrix, Vector const &velocityRHS, std::shared_ptr<VelocityUpdater> velocityUpdater,
Vector &velocityIterate); Matrix const &velocityMatrix, Vector const &velocityRHS,
Vector &velocityIterate);
private: private:
Factory &factory_; Factory &factory_;
......
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