#ifndef SRC_TIMESTEPPING_BACKWARD_EULER_HH #define SRC_TIMESTEPPING_BACKWARD_EULER_HH template <class Vector, class Matrix, class Function, size_t dim> class BackwardEuler : public TimeSteppingScheme<Vector, Matrix, Function, dim> { public: BackwardEuler(Matrix const &_A, Matrix const &_M, Matrix const &_C, Vector const &_u_initial, Vector const &_v_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 extractDisplacement(Vector &) const override; void extractVelocity(Vector &) const override; void extractOldVelocity(Vector &) const override; std::shared_ptr<TimeSteppingScheme<Vector, Matrix, Function, dim>> clone() const; private: Matrix const &A; Matrix const &M; Matrix const &C; Vector u; Vector v; Dune::BitSetVector<dim> const &dirichletNodes; Function const &dirichletFunction; double dirichletValue; Vector u_o; Vector v_o; double tau; bool postProcessCalled = true; }; #endif