Skip to content
Snippets Groups Projects
Commit c6704cbb authored by podlesny's avatar podlesny
Browse files

enable param file switching of time stepper

parent 13c804d5
No related branches found
No related tags found
No related merge requests found
......@@ -75,7 +75,9 @@
#include <dune/tectonic/spatial-solving/solverfactory.hh>
#include <dune/tectonic/spatial-solving/makelinearsolver.hh>
#include <dune/tectonic/time-stepping/adaptivetimestepper.hh>
#include <dune/tectonic/time-stepping/uniformtimestepper.hh>
#include <dune/tectonic/time-stepping/timestepper.hh>
#include <dune/tectonic/time-stepping/rate.hh>
#include <dune/tectonic/time-stepping/state.hh>
#include <dune/tectonic/time-stepping/updaters.hh>
......@@ -527,24 +529,33 @@ int main(int argc, char *argv[]) {
externalForces, stateEnergyNorms);
const auto minTau = parset.get<double>("initialTime.minRelativeTau");
/*AdaptiveTimeStepper<NonlinearFactory, std::decay_t<decltype(contactNetwork)>, Updaters, std::decay_t<decltype(stateEnergyNorms)>>
timeStepper(stepBase, contactNetwork, current,
programState.relativeTime, programState.relativeTau, minTau,
mustRefine);*/
UniformTimeStepper<NonlinearFactory, std::decay_t<decltype(contactNetwork)>, Updaters, std::decay_t<decltype(stateEnergyNorms)>>
timeStepper(stepBase, contactNetwork, current,
std::shared_ptr<TimeStepper<Updaters>> timeStepper;
switch (parset.get<Config::TimeSteppingMode>("timeSteps.mode")) {
case Config::Uniform:
using UniformTimeStepper = UniformTimeStepper<NonlinearFactory, std::decay_t<decltype(contactNetwork)>, Updaters, std::decay_t<decltype(stateEnergyNorms)>>;
timeStepper = std::make_shared<UniformTimeStepper>(stepBase, contactNetwork, current,
programState.relativeTime, programState.relativeTau);
break;
case Config::Adaptive:
using AdaptiveTimeStepper = AdaptiveTimeStepper<NonlinearFactory, std::decay_t<decltype(contactNetwork)>, Updaters, std::decay_t<decltype(stateEnergyNorms)>>;
timeStepper = std::make_shared<AdaptiveTimeStepper>(stepBase, contactNetwork, current,
programState.relativeTime, programState.relativeTau, minTau,
mustRefine);
break;
default:
DUNE_THROW(Dune::Exception, "No suitable time stepping mode selected. Options are 'adaptive' and 'uniform'.");
}
size_t timeSteps = std::round(parset.get<double>("timeSteps.timeSteps"));
while (!timeStepper.reachedEnd()) {
while (!timeStepper->reachedEnd()) {
programState.timeStep++;
//preconditioner.build();
iterationCount = timeStepper.advance();
iterationCount = timeStepper->advance();
programState.relativeTime = timeStepper.relativeTime_;
programState.relativeTau = timeStepper.relativeTau_;
programState.relativeTime = timeStepper->relativeTime_;
programState.relativeTau = timeStepper->relativeTau_;
current.rate_->extractDisplacement(programState.u);
current.rate_->extractVelocity(programState.v);
current.rate_->extractAcceleration(programState.a);
......
# -*- mode:conf -*-
[general]
outPath = newmark-1e6 # output written to ./output/outPath
outPath = newmark-adaptive-5 # output written to ./output/outPath
gravity = 9.81 # [m/s^2]
[body0]
......@@ -69,11 +69,12 @@ bodyCount = 2
[initialTime]
timeStep = 0
relativeTime = 0.0
relativeTau = 1e-6 # 1e-6
relativeTau = 1e-4 # 1e-6
minRelativeTau = 1e-6
[timeSteps]
scheme = newmark # newmark, backwardEuler
mode = adaptive # adaptive, uniform
timeSteps = 1e6
[u0.solver]
......
......@@ -18,7 +18,7 @@ tolerance = 1e-8
tolerance = 1e-8
[v.fpi]
tolerance = 1e-9 # 1e-5
tolerance = 1e-6 # 1e-5
[solver.tnnmg.preconditioner.basesolver]
tolerance = 1e-10
......
......@@ -74,6 +74,7 @@
#include <dune/tectonic/time-stepping/adaptivetimestepper.hh>
#include <dune/tectonic/time-stepping/uniformtimestepper.hh>
#include <dune/tectonic/time-stepping/timestepper.hh>
#include <dune/tectonic/time-stepping/rate.hh>
#include <dune/tectonic/time-stepping/state.hh>
#include <dune/tectonic/time-stepping/updaters.hh>
......@@ -361,26 +362,34 @@ int main(int argc, char *argv[]) {
stepBase(parset, contactNetwork, totalDirichletNodes, globalFriction, frictionNodes,
externalForces, stateEnergyNorms);
/*const auto minTau = parset.get<double>("initialTime.minRelativeTau");
AdaptiveTimeStepper<NonlinearFactory, std::decay_t<decltype(contactNetwork)>, Updaters, std::decay_t<decltype(stateEnergyNorms)>>
timeStepper(stepBase, contactNetwork, current,
programState.relativeTime, programState.relativeTau, minTau,
mustRefine);*/
const auto minTau = parset.get<double>("initialTime.minRelativeTau");
UniformTimeStepper<NonlinearFactory, std::decay_t<decltype(contactNetwork)>, Updaters, std::decay_t<decltype(stateEnergyNorms)>>
timeStepper(stepBase, contactNetwork, current,
std::shared_ptr<TimeStepper<Updaters>> timeStepper;
switch (parset.get<Config::TimeSteppingMode>("timeSteps.mode")) {
case Config::Uniform:
using UniformTimeStepper = UniformTimeStepper<NonlinearFactory, std::decay_t<decltype(contactNetwork)>, Updaters, std::decay_t<decltype(stateEnergyNorms)>>;
timeStepper = std::make_shared<UniformTimeStepper>(stepBase, contactNetwork, current,
programState.relativeTime, programState.relativeTau);
break;
case Config::Adaptive:
using AdaptiveTimeStepper = AdaptiveTimeStepper<NonlinearFactory, std::decay_t<decltype(contactNetwork)>, Updaters, std::decay_t<decltype(stateEnergyNorms)>>;
timeStepper = std::make_shared<AdaptiveTimeStepper>(stepBase, contactNetwork, current,
programState.relativeTime, programState.relativeTau, minTau,
mustRefine);
break;
default:
DUNE_THROW(Dune::Exception, "No suitable time stepping mode selected. Options are 'adaptive' and 'uniform'.");
}
size_t timeSteps = std::round(parset.get<double>("timeSteps.timeSteps"));
while (!timeStepper.reachedEnd()) {
while (!timeStepper->reachedEnd()) {
programState.timeStep++;
//preconditioner.build();
iterationCount = timeStepper.advance();
iterationCount = timeStepper->advance();
programState.relativeTime = timeStepper.relativeTime_;
programState.relativeTau = timeStepper.relativeTau_;
programState.relativeTime = timeStepper->relativeTime_;
programState.relativeTau = timeStepper->relativeTau_;
current.rate_->extractDisplacement(programState.u);
current.rate_->extractVelocity(programState.v);
current.rate_->extractAcceleration(programState.a);
......
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