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

[Extend ] Write out fixed point iterations

parent 38d8aa7a
No related branches found
No related tags found
No related merge requests found
...@@ -119,10 +119,10 @@ class FixedPointIterator { ...@@ -119,10 +119,10 @@ class FixedPointIterator {
velocityTolerance_(parset.get<double>("v.solver.tolerance")), velocityTolerance_(parset.get<double>("v.solver.tolerance")),
verbosity_(parset.get<Solver::VerbosityMode>("v.solver.verbosity")) {} verbosity_(parset.get<Solver::VerbosityMode>("v.solver.verbosity")) {}
void run(std::shared_ptr<StateUpdater> stateUpdater, int run(std::shared_ptr<StateUpdater> stateUpdater,
std::shared_ptr<VelocityUpdater> velocityUpdater, std::shared_ptr<VelocityUpdater> velocityUpdater,
Matrix const &velocityMatrix, Norm<Vector> const &velocityMatrixNorm, Matrix const &velocityMatrix, Norm<Vector> const &velocityMatrixNorm,
Vector const &velocityRHS, Vector &velocityIterate) { Vector const &velocityRHS, Vector &velocityIterate) {
auto multigridStep = factory_.getSolver(); auto multigridStep = factory_.getSolver();
LoopSolver<Vector> velocityProblemSolver( LoopSolver<Vector> velocityProblemSolver(
...@@ -165,6 +165,8 @@ class FixedPointIterator { ...@@ -165,6 +165,8 @@ class FixedPointIterator {
velocityUpdater->postProcess(velocityIterate); velocityUpdater->postProcess(velocityIterate);
velocityUpdater->postProcessRelativeQuantities(); velocityUpdater->postProcessRelativeQuantities();
return fixedPointIteration;
} }
private: private:
...@@ -202,7 +204,7 @@ class CoupledTimeStepper { ...@@ -202,7 +204,7 @@ class CoupledTimeStepper {
velocityUpdater_(velocityUpdater), velocityUpdater_(velocityUpdater),
externalForces_(externalForces) {} externalForces_(externalForces) {}
void step(double relativeTime, double relativeTau) { int step(double relativeTime, double relativeTau) {
stateUpdater_->nextTimeStep(); stateUpdater_->nextTimeStep();
velocityUpdater_->nextTimeStep(); velocityUpdater_->nextTimeStep();
...@@ -222,8 +224,10 @@ class CoupledTimeStepper { ...@@ -222,8 +224,10 @@ class CoupledTimeStepper {
FixedPointIterator<Factory, StateUpdater, VelocityUpdater> FixedPointIterator<Factory, StateUpdater, VelocityUpdater>
fixedPointIterator(factory_, parset_, globalFriction_); fixedPointIterator(factory_, parset_, globalFriction_);
fixedPointIterator.run(stateUpdater_, velocityUpdater_, velocityMatrix, auto const iterations = fixedPointIterator.run(
velocityMatrixNorm, velocityRHS, velocityIterate); stateUpdater_, velocityUpdater_, velocityMatrix, velocityMatrixNorm,
velocityRHS, velocityIterate);
return iterations;
} }
private: private:
...@@ -508,6 +512,8 @@ int main(int argc, char *argv[]) { ...@@ -508,6 +512,8 @@ int main(int argc, char *argv[]) {
size_t timeStep = 1; size_t timeStep = 1;
std::fstream iterationWriter("iterations", std::fstream::out);
auto stateUpdaterR1 = stateUpdater->clone(); auto stateUpdaterR1 = stateUpdater->clone();
auto velocityUpdaterR1 = velocityUpdater->clone(); auto velocityUpdaterR1 = velocityUpdater->clone();
{ {
...@@ -515,7 +521,10 @@ int main(int argc, char *argv[]) { ...@@ -515,7 +521,10 @@ int main(int argc, char *argv[]) {
coupledTimeStepper(finalTime, factory, parset, myGlobalFriction, coupledTimeStepper(finalTime, factory, parset, myGlobalFriction,
stateUpdaterR1, velocityUpdaterR1, stateUpdaterR1, velocityUpdaterR1,
computeExternalForces); computeExternalForces);
coupledTimeStepper.step(relativeTime, relativeTau); iterationWriter << "R1 ";
auto const iterations =
coupledTimeStepper.step(relativeTime, relativeTau);
iterationWriter << iterations << std::endl;
} }
std::shared_ptr<MyStateUpdater> stateUpdaterR2 = nullptr; std::shared_ptr<MyStateUpdater> stateUpdaterR2 = nullptr;
...@@ -534,7 +543,10 @@ int main(int argc, char *argv[]) { ...@@ -534,7 +543,10 @@ int main(int argc, char *argv[]) {
coupledTimeStepper(finalTime, factory, parset, myGlobalFriction, coupledTimeStepper(finalTime, factory, parset, myGlobalFriction,
stateUpdaterR2, velocityUpdaterR2, stateUpdaterR2, velocityUpdaterR2,
computeExternalForces); computeExternalForces);
coupledTimeStepper.step(relativeTime + relativeTau, relativeTau); iterationWriter << "R2 ";
auto const iterations =
coupledTimeStepper.step(relativeTime + relativeTau, relativeTau);
iterationWriter << iterations << " " << std::flush;
} }
stateUpdaterR2->extractAlpha(alphaR2); stateUpdaterR2->extractAlpha(alphaR2);
...@@ -547,7 +559,10 @@ int main(int argc, char *argv[]) { ...@@ -547,7 +559,10 @@ int main(int argc, char *argv[]) {
coupledTimeStepper(finalTime, factory, parset, myGlobalFriction, coupledTimeStepper(finalTime, factory, parset, myGlobalFriction,
stateUpdaterC, velocityUpdaterC, stateUpdaterC, velocityUpdaterC,
computeExternalForces); 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); stateUpdaterC->extractAlpha(alphaC);
...@@ -581,13 +596,18 @@ int main(int argc, char *argv[]) { ...@@ -581,13 +596,18 @@ int main(int argc, char *argv[]) {
coupledTimeStepper(finalTime, factory, parset, myGlobalFriction, coupledTimeStepper(finalTime, factory, parset, myGlobalFriction,
stateUpdaterF2, velocityUpdaterF2, stateUpdaterF2, velocityUpdaterF2,
computeExternalForces); 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(); stateUpdaterF1 = stateUpdaterF2->clone();
velocityUpdaterF1 = velocityUpdaterF2->clone(); velocityUpdaterF1 = velocityUpdaterF2->clone();
coupledTimeStepper.step(relativeTime + relativeTau / 2.0, iterationWriter << "F2 ";
relativeTau / 2.0); auto const iterationsF2 = coupledTimeStepper.step(
relativeTime + relativeTau / 2.0, relativeTau / 2.0);
iterationWriter << iterationsF2 << " " << std::flush;
} }
stateUpdaterF2->extractAlpha(alphaF2); stateUpdaterF2->extractAlpha(alphaF2);
stateUpdaterR1->extractAlpha(alphaR1); stateUpdaterR1->extractAlpha(alphaR1);
...@@ -604,6 +624,7 @@ int main(int argc, char *argv[]) { ...@@ -604,6 +624,7 @@ int main(int argc, char *argv[]) {
} }
} }
} }
iterationWriter << std::endl;
reportTimeStep(relativeTime, relativeTau); reportTimeStep(relativeTime, relativeTau);
...@@ -639,6 +660,7 @@ int main(int argc, char *argv[]) { ...@@ -639,6 +660,7 @@ int main(int argc, char *argv[]) {
timeStep++; timeStep++;
} }
timeStepWriter.close(); timeStepWriter.close();
iterationWriter.close();
Python::stop(); Python::stop();
} }
catch (Dune::Exception &e) { catch (Dune::Exception &e) {
......
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