Skip to content
Snippets Groups Projects
coupledtimestepper.cc 1.99 KiB
Newer Older
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "coupledtimestepper.hh"

template <class Factory, class StateUpdater, class VelocityUpdater,
          class ErrorNorm>
CoupledTimeStepper<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::
    CoupledTimeStepper(double finalTime, Factory &factory,
                       Dune::ParameterTree const &parset,
                       std::shared_ptr<Nonlinearity> globalFriction,
                       std::shared_ptr<StateUpdater> stateUpdater,
                       std::shared_ptr<VelocityUpdater> velocityUpdater,
                       ErrorNorm const &errorNorm,
                       std::function<void(double, Vector &)> externalForces)
    : finalTime_(finalTime),
      factory_(factory),
      parset_(parset),
      globalFriction_(globalFriction),
      stateUpdater_(stateUpdater),
      velocityUpdater_(velocityUpdater),
      externalForces_(externalForces),
      errorNorm_(errorNorm) {}
template <class Factory, class StateUpdater, class VelocityUpdater,
          class ErrorNorm>
FixedPointIterationCounter
CoupledTimeStepper<Factory, StateUpdater, VelocityUpdater, ErrorNorm>::step(
    double relativeTime, double relativeTau) {
  stateUpdater_->nextTimeStep();
  velocityUpdater_->nextTimeStep();

  auto const newRelativeTime = relativeTime + relativeTau;
  Vector ell;
  externalForces_(newRelativeTime, ell);

  Matrix velocityMatrix;
  Vector velocityRHS;
  Vector velocityIterate;

  auto const tau = relativeTau * finalTime_;
  stateUpdater_->setup(tau);
  velocityUpdater_->setup(ell, tau, newRelativeTime, velocityRHS,
                          velocityIterate, velocityMatrix);
  FixedPointIterator<Factory, StateUpdater, VelocityUpdater, ErrorNorm>
  fixedPointIterator(factory_, parset_, globalFriction_, errorNorm_);
  auto const iterations =
      fixedPointIterator.run(stateUpdater_, velocityUpdater_, velocityMatrix,
                             velocityRHS, velocityIterate);
  return iterations;
}

#include "coupledtimestepper_tmpl.cc"