#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"