Skip to content
Snippets Groups Projects
Forked from agnumpde / dune-tectonic
165 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
newmark.hh 1.44 KiB
#ifndef SRC_TIMESTEPPING_NEWMARK_HH
#define SRC_TIMESTEPPING_NEWMARK_HH

template <class Vector, class Matrix, class Function, size_t dim>
class Newmark : public TimeSteppingScheme<Vector, Matrix, Function, dim> {
public:
  Newmark(Matrix const &_A, Matrix const &_M, Matrix const &_C,
          Vector const &_u_initial, Vector const &_ur_initial,
          Vector const &_v_initial, Vector const &_vr_initial,
          Vector const &_a_initial,
          Dune::BitSetVector<dim> const &_dirichletNodes,
          Function const &_dirichletFunction);

  void nextTimeStep() override;
  void setup(Vector const &, double, double, Vector &, Vector &,
             Matrix &) override;
  void postProcess(Vector const &) override;
  void postProcessRelativeQuantities() override;
  void extractDisplacement(Vector &) const override;
  void extractRelativeDisplacement(Vector &) const override;
  void extractVelocity(Vector &) const override;
  void extractRelativeVelocity(Vector &) const override;
  void extractOldVelocity(Vector &) const override;

private:
  Matrix const &A;
  Matrix const &M;
  Matrix const &C;
  Vector u;
  Vector ur;
  Vector v;
  Vector vr;
  Vector a;
  Dune::BitSetVector<dim> const &dirichletNodes;
  Function const &dirichletFunction;
  double dirichletValue;

  Vector u_o;
  Vector ur_o;
  Vector v_o;
  Vector vr_o;
  Vector a_o;

  double tau;

  bool postProcessCalled = false;
  bool postProcessRelativeQuantitiesCalled = false;
};
#endif