A bug introduced with the recent max_dt facility prevented the rosenbrock
controller to increase step size in most cases (if max_dt=0). This is fixed
now, and a regression test case has been added.
Becoming suspicious by the difference of the exponents used for computing the
new step size in the BS and BS denseout stepper (see
0f943fbf8b) I checked again the Hairer book and
I'm now convinced there was a mistake in our implementation and both
steppers should use 1/(2*k+1) as exponent. The background is the this exponent
represents the order of the error of the k-th iteration, and this order is
always 2k+1, independent of the interval_sequence. This error is computed from
the difference of the k-th and k-1 - th iteration, which have the orders 2k+2
2k respectively, which means the computed error has order 2k+1.
all integrate function now use the adaption to provide checking functionality
the implementations in detail::integrate_* are not aware of the checkers at
all.
integrate_times now uses checked_stepper and checked_observer to implement
the checking facility. Not that this means the integrate implementations in
detail::integrate_times have no knowledge on the checkers at all.
instead of adding the functionality within the integrate functions we
will use adapters, i.e. checked_stepper and checked_observer to implement
the checking functionality
this commit contains the first implementation of this for integrate_times
generate function now support additional max_dt parameter for setting the set
size limit.
Added a test case to check limiter behavior for controlled and dense out
integration.
the logic for step size adjustment is moved to the error_checker.
this removes code duplication and will make it easier to add step size
limiting functionality.
the additional state requried in the find_condition function was potentially
not allocated. Now odeint's resizing mechanism is used to ensure the correct
memory allocation.
simple example for an event detection implementation based on dopri5
stepper and simple bisection.
Simple, straight forward implementation, but shouldnt be difficult to adapt
to other problems.