* Change eigen algebra to support Eigen>=3.3
An internal change in Eigen made odeint incompatible with Eigen
versions >=3.3. This commit changes odeint in such a way that it
does not rely on the changed behvior, so it is now compatible with
old and new Eigen.
Fixes#194
* Remove obsolete Eigen fail compile test
* Remove compile-fail test for C++98 unwrap_reference
* Enable the adaption of the maximal step size of dense output steppers.
For efficient simulation of "hybrid" systems the integrator must approach
the sample points where the discrete variables change their value.
(hybrid systems = systems of ODEs which include discrete variables, beeing
internal variables of the system which only change their value at discrete
sample points)
Approaching sample points can be done by adapting the maximal integrator
step size to min(max_step_size, next_sample_point_time - current_time)
before each do_step.
To achive this in odeint for all dense output steppers the following
changes must be done (which does not change the existing API):
- make private members in bulirsch_stoer_dense_out,
default_step_adjuster, rosenbrock4_controller protected.
- allow std::ref/boost::ref for step_adjuster in controlled_runge_kutta
and controlled_runge_kutta and for stepper in rosenbrock4_dense_output
by unwrapping these before use.
This allows to pass the step adjusters by reference to the dense output
steppers which than allows to change the maximal step size (in the step
adjuster) before each call to do_step.
* Added test for a reference controller in the Rosenbrock4 dense output stepper.
* Make in bulirsch_stoer_dense_out only the required m_max_dt member
protected not all.
Extend the test in rosenbrock4.cpp to test that the controller is a
reference and the maximal step size is applied.
* Fixed build with gcc-4.8
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.
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.
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.
Following the discussion in #173, the integrate_const function now
provide a mechanisms to check for TOO_MUCH_WORK situations where too
many steps are performed without any progress (i.e. observer calls).
Naturally, this only makes sense for controlled steppers or dense
output steppers.
Also, integrate_adaptive functions do not require such functionality as
there observer calls happen at every time step.
Hence, only integrate_n_steps and integrate_times will be adapted shortly
fixed bug in less_eq_with_sign. equality was not correctly checked for, which
resulted in wrong behavior when the numeric type had
std::numeric_limits<T>::epsilon() == 0.
The Adams-Bashforth-Moulton stepper has now also the initializing stepper
as a template parameter.
This allows to get rid of the specific test case for multi-step methods in
order_quadrature_formula. Furthermore, some cosmetic adjustments were made in
this test: global variables, camel case naming, while loop -> for loop.