
Hello, First of all, I think that odeint is a nice and useful library and should be accepted into Boost. It well belongs to Boost's Math and Numerics section.
- What is your evaluation of the design?
Odeint provides intuitive and logical interface, and is easily extended to use custom state types and operations. Many usual state types (such as scalar values, std::vector<> or boost::array<>) and operations on them are supported out of the box. The adaptation to user-defined data types is straightforward.
- What is your evaluation of the implementation?
I only had a quick glance at the implementation, but the code looks decent, clean and well formatted. Implementation of some algebras and operations could probably benefit from usage of C++11 variadic templates, but this would have to wait for wider adoption of the new standard.
- What is your evaluation of the documentation?
Documentation is good. Examples in tutorial cover most use cases and common state types and operations. There is an overview of avalable steppers, but more detailed description of each stepper (typical use cases, stability requirements, advantages and disadvantages w.r.t. other methods) would probably be beneficial.
- What is your evaluation of the potential usefulness of the library?
The library has admittedly limited scope, but it should be very useful for the domain it aims for. I believe its design is general enough to be included into Boost.
- Did you try to use the library? With what compiler? Did you have any problems?
I used odeint with gcc v4.6 and v4.7. I did not have any problems with those compiler versions.
- How much effort did you put into your evaluation? A glance? A quick reading? In-depth study?
I used odeint as a basis for comparison of several CUDA and OpenCL libraries (Thrust [1], ViennaCL [2], VexCL [3]). This was done in collaboration with Karsten Ahnert, coauthor of odeint. We solved several large systems of ODEs to look at both performance and ease of use of the GPGPU libraries (the work is not yet published). This task is easily performed with odeint due to its general design. I spent a couple of weeks working with odeint. Most of the time was devoted to writing system functions that would work with CUDA and OpenCL libraries and to performance tuning of custom odeint operations for the libraries.
- Are you knowledgeable about the problem domain?
I mostly deal with partial differential equations in my line of work, but I am familiar with solution of ordinary differential equations as well. [1] https://github.com/thrust/thrust [2] http://viennacl.sourceforge.net [3] https://github.com/ddemidov/vexcl -- Dr Denis Demidov Supercomputer Center of Russian Academy of Sciences Lobachevsky st. 2/31, Kazan 420008, Russia