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

[Cleanup] Centralise reporting

parent 431a56cf
No related branches found
No related tags found
No related merge requests found
...@@ -68,7 +68,7 @@ template <class Vector, class ScalarVector> class ProgramState { ...@@ -68,7 +68,7 @@ template <class Vector, class ScalarVector> class ProgramState {
solver.solve(); solver.solve();
}; };
timeStep = 1; timeStep = 0;
relativeTime = 0.0; relativeTime = 0.0;
relativeTau = 1e-6; relativeTau = 1e-6;
......
...@@ -178,12 +178,6 @@ int main(int argc, char *argv[]) { ...@@ -178,12 +178,6 @@ int main(int argc, char *argv[]) {
functions.get("velocityDirichletCondition"), functions.get("velocityDirichletCondition"),
&neumannFunction = functions.get("neumannCondition"); &neumannFunction = functions.get("neumannCondition");
std::fstream timeStepWriter("timeSteps", std::fstream::out);
timeStepWriter << std::fixed << std::setprecision(10);
auto const reportTimeStep = [&](double _relativeTime, double _relativeTau) {
timeStepWriter << _relativeTime << " " << _relativeTau << std::endl;
};
MyAssembler const myAssembler(leafView); MyAssembler const myAssembler(leafView);
MyBody<dims> const body(parset); MyBody<dims> const body(parset);
...@@ -237,6 +231,7 @@ int main(int argc, char *argv[]) { ...@@ -237,6 +231,7 @@ int main(int argc, char *argv[]) {
} }
} }
// Set up writers
FrictionWriter<ScalarVector, Vector> frictionWriter( FrictionWriter<ScalarVector, Vector> frictionWriter(
vertexCoordinates, frictionalNodes, "friction", vertexCoordinates, frictionalNodes, "friction",
MyGeometry::horizontalProjection); MyGeometry::horizontalProjection);
...@@ -251,37 +246,43 @@ int main(int argc, char *argv[]) { ...@@ -251,37 +246,43 @@ int main(int argc, char *argv[]) {
SpecialWriter<GridView, dims> specialDisplacementWriter( SpecialWriter<GridView, dims> specialDisplacementWriter(
"specialDisplacements", leafView); "specialDisplacements", leafView);
auto const report = [&](Vector const &_u, Vector const &_v, std::fstream timeStepWriter("timeSteps", std::fstream::out);
ScalarVector const &_alpha) { timeStepWriter << std::fixed << std::setprecision(10);
horizontalSurfaceWriter.writeKinetics(_u, _v);
verticalSurfaceWriter.writeKinetics(_u, _v); MyVTKWriter<typename MyAssembler::VertexBasis,
typename MyAssembler::CellBasis> const
vtkWriter(myAssembler.cellBasis, myAssembler.vertexBasis, "obs");
auto const report = [&]() {
if (programState.timeStep != 0)
timeStepWriter << programState.relativeTime << " "
<< programState.relativeTau << std::endl;
horizontalSurfaceWriter.writeKinetics(programState.u, programState.v);
verticalSurfaceWriter.writeKinetics(programState.u, programState.v);
ScalarVector c; ScalarVector c;
myGlobalFriction->coefficientOfFriction(_v, c); myGlobalFriction->coefficientOfFriction(programState.v, c);
frictionWriter.writeKinetics(_u, _v); frictionWriter.writeKinetics(programState.u, programState.v);
frictionWriter.writeOther(c, _alpha); frictionWriter.writeOther(c, programState.alpha);
BasisGridFunction<typename MyAssembler::VertexBasis, Vector> velocity( BasisGridFunction<typename MyAssembler::VertexBasis, Vector> velocity(
myAssembler.vertexBasis, _v); myAssembler.vertexBasis, programState.v);
BasisGridFunction<typename MyAssembler::VertexBasis, Vector> displacement( BasisGridFunction<typename MyAssembler::VertexBasis, Vector> displacement(
myAssembler.vertexBasis, _u); myAssembler.vertexBasis, programState.u);
specialVelocityWriter.write(velocity); specialVelocityWriter.write(velocity);
specialDisplacementWriter.write(displacement); specialDisplacementWriter.write(displacement);
};
report(programState.u, programState.v, programState.alpha);
MyVTKWriter<typename MyAssembler::VertexBasis,
typename MyAssembler::CellBasis> const
vtkWriter(myAssembler.cellBasis, myAssembler.vertexBasis, "obs");
if (parset.get<bool>("io.writeVTK")) { if (parset.get<bool>("io.writeVTK")) {
ScalarVector stress; ScalarVector stress;
myAssembler.assembleVonMisesStress(body.getYoungModulus(), myAssembler.assembleVonMisesStress(body.getYoungModulus(),
body.getPoissonRatio(), programState.u, body.getPoissonRatio(),
stress); programState.u, stress);
vtkWriter.write(0, programState.u, programState.v, programState.alpha, vtkWriter.write(programState.timeStep, programState.u, programState.v,
stress); programState.alpha, stress);
} }
};
report();
// Set up TNNMG solver // Set up TNNMG solver
using NonlinearFactory = SolverFactory< using NonlinearFactory = SolverFactory<
...@@ -322,25 +323,17 @@ int main(int argc, char *argv[]) { ...@@ -322,25 +323,17 @@ int main(int argc, char *argv[]) {
programState.relativeTime, programState.relativeTau, programState.relativeTime, programState.relativeTau,
computeExternalForces, stateEnergyNorm, mustRefine); computeExternalForces, stateEnergyNorm, mustRefine);
while (!adaptiveTimeStepper.reachedEnd()) { while (!adaptiveTimeStepper.reachedEnd()) {
programState.timeStep++;
adaptiveTimeStepper.advance(); adaptiveTimeStepper.advance();
programState.relativeTime = adaptiveTimeStepper.getRelativeTime(); programState.relativeTime = adaptiveTimeStepper.getRelativeTime();
programState.relativeTau = adaptiveTimeStepper.getRelativeTau(); programState.relativeTau = adaptiveTimeStepper.getRelativeTau();
reportTimeStep(programState.relativeTime, programState.relativeTau);
current.second->extractDisplacement(programState.u); current.second->extractDisplacement(programState.u);
current.second->extractVelocity(programState.v); current.second->extractVelocity(programState.v);
current.first->extractAlpha(programState.alpha); current.first->extractAlpha(programState.alpha);
report(programState.u, programState.v, programState.alpha); report();
if (parset.get<bool>("io.writeVTK")) {
ScalarVector stress;
myAssembler.assembleVonMisesStress(body.getYoungModulus(),
body.getPoissonRatio(),
programState.u, stress);
vtkWriter.write(programState.timeStep, programState.u, programState.v,
programState.alpha, stress);
}
programState.timeStep++;
} }
timeStepWriter.close(); timeStepWriter.close();
Python::stop(); Python::stop();
......
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