size_t integrate_adaptive( Stepper stepper , System system , State &start_state , Time start_time , Time end_time , Time dt , Observer observer , stepper_tag ) { size_t steps = static_cast< size_t >( (end_time-start_time)/dt ); Time end = detail::integrate_n_steps( stepper , system , start_state , start_time , dt , steps , observer , stepper_tag() ); if( less_with_sign( end , end_time , dt ) ) { //make a last step to end exactly at end_time stepper.do_step( system , start_state , end , end_time - end ); steps++; typename omplext_odeint::unwrap_reference< Observer >::type &obs = observer; obs( start_state , end_time ); } return steps; }
size_t integrate_adaptive( Stepper stepper , System system , State &start_state , Time start_time , Time end_time , Time dt , Observer observer , stepper_tag ) { size_t steps = boost::numeric::odeint::detail::integrate_const( stepper , system , start_state , start_time , end_time , dt , observer , stepper_tag() ); if( steps*dt < end_time ) { //make a last step to end exactly at end_time stepper.do_step( system , start_state , steps*dt , end_time-steps*dt ); steps++; typename boost::unwrap_reference< Observer >::type &obs = observer; obs( start_state , end_time ); } return steps; }
size_t integrate_adaptive( Stepper stepper , System system , State &start_state , Time start_time , Time end_time , Time dt , Observer observer , stepper_tag ) { size_t steps = detail::integrate_const( stepper , system , start_state , start_time , end_time , dt , observer , stepper_tag() ); typename odeint::unwrap_reference< Observer >::type &obs = observer; typename odeint::unwrap_reference< Stepper >::type &st = stepper; Time end = start_time + dt*steps; if( less_with_sign( end , end_time , dt ) ) { //make a last step to end exactly at end_time st.do_step( system , start_state , end , end_time - end ); steps++; obs( start_state , end_time ); } return steps; }