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

enable param file switching of time stepper

parent 555785df
No related branches found
No related tags found
No related merge requests found
......@@ -77,6 +77,7 @@
#include <dune/tectonic/time-stepping/rate.hh>
#include <dune/tectonic/time-stepping/state.hh>
#include <dune/tectonic/time-stepping/stepbase.hh>
#include <dune/tectonic/time-stepping/timestepper.hh>
#include <dune/tectonic/time-stepping/updaters.hh>
#include <dune/tectonic/utils/debugutils.hh>
......@@ -330,8 +331,8 @@ int main(int argc, char *argv[]) {
energyNorm += stateEnergyNorms[i]->diff(fineAlpha[i], coarseAlpha[i]);
}
std::cout << "energy norm: " << energyNorm << " tol: " << refinementTolerance << std::endl;
std::cout << "must refine: " << (energyNorm > refinementTolerance) << std::endl;
//std::cout << "energy norm: " << energyNorm << " tol: " << refinementTolerance << std::endl;
//std::cout << "must refine: " << (energyNorm > refinementTolerance) << std::endl;
return energyNorm > refinementTolerance;
};
......@@ -368,26 +369,35 @@ int main(int argc, char *argv[]) {
stepBase(parset, contactNetwork, totalDirichletNodes, globalFriction, frictionNodes,
externalForces, stateEnergyNorms);
/*UniformTimeStepper<NonlinearFactory, std::decay_t<decltype(contactNetwork)>, Updaters, std::decay_t<decltype(stateEnergyNorms)>>
timeStepper(stepBase, contactNetwork, current,
programState.relativeTime, programState.relativeTau);*/
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);
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