#ifndef SRC_TIME_STEPPING_STATE_AGEINGLAWSTATEUPDATER_HH
#define SRC_TIME_STEPPING_STATE_AGEINGLAWSTATEUPDATER_HH

#include "stateupdater.hh"

template <class ScalarVector, class Vector>
class AgeingLawStateUpdater : public StateUpdater<ScalarVector, Vector> {
public:
  AgeingLawStateUpdater(const std::vector<ScalarVector>& _alpha_initial,
                        const std::vector<Dune::BitSetVector<1>>& _nodes, const std::vector<double>& _L,
                        const std::vector<double>& _V0);

  void nextTimeStep() override;
  void setup(double _tau) override;
  void solve(const std::vector<Vector>& velocity_field) override;
  void extractAlpha(std::vector<ScalarVector> &) override;

  std::shared_ptr<StateUpdater<ScalarVector, Vector>> clone() const override;

private:
  std::vector<ScalarVector> alpha_o;
  std::vector<ScalarVector> alpha;
  const std::vector<Dune::BitSetVector<1>>& nodes;
  const std::vector<double>& L;
  const std::vector<double>& V0;
  double tau;
};
#endif