#ifndef SRC_TIME_STEPPING_STATE_AGEINGLAWSTATEUPDATER_HH
#define SRC_TIME_STEPPING_STATE_AGEINGLAWSTATEUPDATER_HH

#include <dune/common/bitsetvector.hh>

#include "stateupdater.hh"

template <class ScalarVector, class Vector>
class AgeingLawStateUpdater : public LocalStateUpdater<ScalarVector, Vector> {
private:
    using BitVector = Dune::BitSetVector<1>;

public:
    AgeingLawStateUpdater(
            const ScalarVector& alpha_initial,
            const BitVector& nodes,
            const double L,
            const double V0);

  void nextTimeStep() override;
  void setup(double tau) override;
  void solve(const Vector& velocity_field) override;
  void extractAlpha(ScalarVector&) override;

  auto clone() const -> std::shared_ptr<LocalStateUpdater<ScalarVector, Vector>> override;

private:
  std::vector<int> localToGlobal_;

  ScalarVector alpha_o_;
  ScalarVector alpha_;
  const BitVector& nodes_;
  const double L_;
  const double V0_;
  double tau_;
};
#endif