From e91e4e3c9c77aa92d262b4c8ed1dd58fc1568962 Mon Sep 17 00:00:00 2001 From: Elias Pipping <elias.pipping@fu-berlin.de> Date: Fri, 11 Jul 2014 15:55:50 +0200 Subject: [PATCH] [Extend ] Write out fixed point iterations --- src/sand-wedge.cc | 48 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/src/sand-wedge.cc b/src/sand-wedge.cc index 392f046a..04ed6790 100644 --- a/src/sand-wedge.cc +++ b/src/sand-wedge.cc @@ -119,10 +119,10 @@ class FixedPointIterator { velocityTolerance_(parset.get<double>("v.solver.tolerance")), verbosity_(parset.get<Solver::VerbosityMode>("v.solver.verbosity")) {} - void run(std::shared_ptr<StateUpdater> stateUpdater, - std::shared_ptr<VelocityUpdater> velocityUpdater, - Matrix const &velocityMatrix, Norm<Vector> const &velocityMatrixNorm, - Vector const &velocityRHS, Vector &velocityIterate) { + int run(std::shared_ptr<StateUpdater> stateUpdater, + std::shared_ptr<VelocityUpdater> velocityUpdater, + Matrix const &velocityMatrix, Norm<Vector> const &velocityMatrixNorm, + Vector const &velocityRHS, Vector &velocityIterate) { auto multigridStep = factory_.getSolver(); LoopSolver<Vector> velocityProblemSolver( @@ -165,6 +165,8 @@ class FixedPointIterator { velocityUpdater->postProcess(velocityIterate); velocityUpdater->postProcessRelativeQuantities(); + + return fixedPointIteration; } private: @@ -202,7 +204,7 @@ class CoupledTimeStepper { velocityUpdater_(velocityUpdater), externalForces_(externalForces) {} - void step(double relativeTime, double relativeTau) { + int step(double relativeTime, double relativeTau) { stateUpdater_->nextTimeStep(); velocityUpdater_->nextTimeStep(); @@ -222,8 +224,10 @@ class CoupledTimeStepper { FixedPointIterator<Factory, StateUpdater, VelocityUpdater> fixedPointIterator(factory_, parset_, globalFriction_); - fixedPointIterator.run(stateUpdater_, velocityUpdater_, velocityMatrix, - velocityMatrixNorm, velocityRHS, velocityIterate); + auto const iterations = fixedPointIterator.run( + stateUpdater_, velocityUpdater_, velocityMatrix, velocityMatrixNorm, + velocityRHS, velocityIterate); + return iterations; } private: @@ -508,6 +512,8 @@ int main(int argc, char *argv[]) { size_t timeStep = 1; + std::fstream iterationWriter("iterations", std::fstream::out); + auto stateUpdaterR1 = stateUpdater->clone(); auto velocityUpdaterR1 = velocityUpdater->clone(); { @@ -515,7 +521,10 @@ int main(int argc, char *argv[]) { coupledTimeStepper(finalTime, factory, parset, myGlobalFriction, stateUpdaterR1, velocityUpdaterR1, computeExternalForces); - coupledTimeStepper.step(relativeTime, relativeTau); + iterationWriter << "R1 "; + auto const iterations = + coupledTimeStepper.step(relativeTime, relativeTau); + iterationWriter << iterations << std::endl; } std::shared_ptr<MyStateUpdater> stateUpdaterR2 = nullptr; @@ -534,7 +543,10 @@ int main(int argc, char *argv[]) { coupledTimeStepper(finalTime, factory, parset, myGlobalFriction, stateUpdaterR2, velocityUpdaterR2, computeExternalForces); - coupledTimeStepper.step(relativeTime + relativeTau, relativeTau); + iterationWriter << "R2 "; + auto const iterations = + coupledTimeStepper.step(relativeTime + relativeTau, relativeTau); + iterationWriter << iterations << " " << std::flush; } stateUpdaterR2->extractAlpha(alphaR2); @@ -547,7 +559,10 @@ int main(int argc, char *argv[]) { coupledTimeStepper(finalTime, factory, parset, myGlobalFriction, stateUpdaterC, velocityUpdaterC, computeExternalForces); - coupledTimeStepper.step(relativeTime, 2.0 * relativeTau); + iterationWriter << "C "; + auto const iterations = + coupledTimeStepper.step(relativeTime, 2.0 * relativeTau); + iterationWriter << iterations << " " << std::flush; } stateUpdaterC->extractAlpha(alphaC); @@ -581,13 +596,18 @@ int main(int argc, char *argv[]) { coupledTimeStepper(finalTime, factory, parset, myGlobalFriction, stateUpdaterF2, velocityUpdaterF2, computeExternalForces); - coupledTimeStepper.step(relativeTime, relativeTau / 2.0); + iterationWriter << "F1 "; + auto const iterationsF1 = + coupledTimeStepper.step(relativeTime, relativeTau / 2.0); + iterationWriter << iterationsF1 << " " << std::flush; stateUpdaterF1 = stateUpdaterF2->clone(); velocityUpdaterF1 = velocityUpdaterF2->clone(); - coupledTimeStepper.step(relativeTime + relativeTau / 2.0, - relativeTau / 2.0); + iterationWriter << "F2 "; + auto const iterationsF2 = coupledTimeStepper.step( + relativeTime + relativeTau / 2.0, relativeTau / 2.0); + iterationWriter << iterationsF2 << " " << std::flush; } stateUpdaterF2->extractAlpha(alphaF2); stateUpdaterR1->extractAlpha(alphaR1); @@ -604,6 +624,7 @@ int main(int argc, char *argv[]) { } } } + iterationWriter << std::endl; reportTimeStep(relativeTime, relativeTau); @@ -639,6 +660,7 @@ int main(int argc, char *argv[]) { timeStep++; } timeStepWriter.close(); + iterationWriter.close(); Python::stop(); } catch (Dune::Exception &e) { -- GitLab