Skip to content
Snippets Groups Projects
Forked from agnumpde / dune-tectonic
62 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
coupledtimestepper.hh 1.70 KiB
#ifndef SRC_TIME_STEPPING_COUPLEDTIMESTEPPER_HH
#define SRC_TIME_STEPPING_COUPLEDTIMESTEPPER_HH

#include <functional>
#include <memory>

#include <dune/common/parametertree.hh>

#include "../spatial-solving/fixedpointiterator.hh"

template <class Factory, class ContactNetwork, class Updaters, class ErrorNorms>
class CoupledTimeStepper {
  using Vector = typename Factory::Vector;
  using Matrix = typename Factory::Matrix;
  using IgnoreVector = typename Factory::BitVector;
  using FixedPointIterator = FixedPointIterator<Factory, ContactNetwork, Updaters, ErrorNorms>;

public:
  using GlobalFriction = typename FixedPointIterator::GlobalFriction;
  using BitVector = typename FixedPointIterator::BitVector;
  using ExternalForces = std::vector<std::unique_ptr<const std::function<void(double, Vector &)>>>;

public:
  CoupledTimeStepper(double finalTime,
                     Dune::ParameterTree const &parset,
                     const ContactNetwork& contactNetwork,
                     const IgnoreVector& ignoreNodes,
                     GlobalFriction& globalFriction,
                     const std::vector<const BitVector*>& bodywiseNonmortarBoundaries,
                     Updaters updaters,
                     const ErrorNorms& errorNorms,
                     ExternalForces& externalForces);

  FixedPointIterationCounter step(double relativeTime, double relativeTau);

private:
  double finalTime_;
  Dune::ParameterTree const &parset_;
  const ContactNetwork& contactNetwork_;
  const IgnoreVector& ignoreNodes_;

  GlobalFriction& globalFriction_;
  const std::vector<const BitVector*>& bodywiseNonmortarBoundaries_;

  Updaters updaters_;
  ExternalForces& externalForces_;
  const ErrorNorms& errorNorms_;
};
#endif