size_t integrate_const( Stepper stepper , System system , State &start_state , Time start_time , Time end_time , Time dt , Observer observer , controlled_stepper_tag ) { typename odeint::unwrap_reference< Observer >::type &obs = observer; Time time = start_time; const Time time_step = dt; int real_steps = 0; int step = 0; while( less_eq_with_sign( static_cast<Time>(time+time_step) , end_time , dt ) ) { obs( start_state , time ); real_steps += detail::integrate_adaptive( stepper , system , start_state , time , time+time_step , dt , null_observer() , controlled_stepper_tag() ); // direct computation of the time avoids error propagation happening when using time += dt // we need clumsy type analysis to get boost units working here step++; time = start_time + static_cast< typename unit_value_type<Time>::type >(step) * time_step; } obs( start_state , time ); return real_steps; }
Time integrate_n_steps( Stepper stepper , System system , const State &start_state , Time start_time , Time dt , size_t num_of_steps ) { return integrate_n_steps(stepper, system, start_state, start_time, dt, num_of_steps, null_observer()); }
Time integrate_n_steps( Stepper stepper , System system , State &start_state , Time start_time , Time dt , size_t num_of_steps , Observer observer , controlled_stepper_tag ) { typename odeint::unwrap_reference< Observer >::type &obs = observer; Time time = start_time; Time time_step = dt; for( size_t step = 0; step < num_of_steps ; ++step ) { obs( start_state , time ); detail::integrate_adaptive( stepper , system , start_state , time , time+time_step , dt , null_observer() , controlled_stepper_tag() ); // direct computation of the time avoids error propagation happening when using time += dt // we need clumsy type analysis to get boost units working here time = start_time + static_cast< typename unit_value_type<Time>::type >(step+1) * time_step; } obs( start_state , time ); return time; }
size_t integrate_const( Stepper stepper , System system , State &start_state , Time start_time , Time end_time , Time dt ) { return integrate_const( stepper , system , start_state , start_time , end_time , dt , null_observer() ); }
size_t integrate( System system , State &start_state , Time start_time , Time end_time , Time dt ) { return integrate( system , start_state , start_time , end_time , dt , null_observer() ); }