
I would love to see this in Boost. Of course, odeint needs to play well with Boost.Units. Here is how I would expect the code to look (stripped down version of numeric/odeint/examples/lorenz_integrator.cpp) :
It works with Boost.Units, have a look at https://svn.boost.org/svn/boost/sandbox/odeint/branches/karsten/libs/numeric... It also works well with fusion containers, where every entry can have a different dimension.
In particular, the steppers should be able to take a function pointer or other function object and derive the container types directly from it rather than requiring that these be provided as template parameters. Then the user need only provide the function to integrate (optionally providing a Jacobian for stiff solvers).
Matthias
This seems to be difficult. The container type is used to store intermediate values within the steppers, such that objects like container_type m_dxdt; exist. I don't see a way to avoid this (without loss of performance). But, it might be possible to use a default type for the internal containers (like vector< double >) and then use a templatized functors, like struct lorenz { template< class State , class Value > void operator()( const State &x , State &dxdt, Value t ) { ... } }; Karsten