14 using time_type =
typename S::value_type;
15 using value_type =
typename S::value_type;
16 using system_function = std::function<void(time_type,
const state_type&, state_type&)>;
19 : sys_(std::move(sys)), current_time_(time_type{0}) {}
24 virtual void step(state_type& state, time_type dt) = 0;
27 virtual void integrate(state_type& state, time_type dt, time_type end_time) {
28 while (current_time_ < end_time) {
29 time_type step_size = std::min(dt, end_time - current_time_);
30 step(state, step_size);
35 time_type current_time()
const {
return current_time_; }
38 void set_time(time_type t) { current_time_ = t; }
39 void set_system(system_function sys) { sys_ = std::move(sys); }
43 time_type current_time_;
46 void advance_time(time_type dt) { current_time_ += dt; }