
Hi Freg, thank you for your review- On 10/02/2012 08:15 PM, Steven Watanabe wrote:
-------- Original Message -------- Subject: ODEInt review Date: Wed, 26 Sep 2012 11:48:18 -0400 From: Reese, Greg Dr. <greg.reese@miamioh.edu> To: watanabesj@gmail.com <watanabesj@gmail.com> CC: Reese, Greg Dr. <greg.reese@miamioh.edu>
Please always state in your review, whether you think the library should be accepted as a Boost library!
Absolutely!
- What is your evaluation of the design?
Good. Good use of policies
Is it necessary to set an initial step size on the adaptive integrators? Shouldn't they be able to
figure this out on their own? If the size is needed, maybe it could have a default value so the
user doesn't have to pass the argument.
In principle you are right. But I think an initial guess for the step size is not such a bad idea. (There are methods for choosing an initial guess of the step size). If the step size is to large it will simply we decreased.
- What is your evaluation of the documentation?
Excellent! Probably the best documentation of any Boost library.
Thank you.
Suggestions:
1) Add general explanation of "observers", e.g., what they do, sample uses.
Ok, good point. We had initially a concept section for observer, but it is not a real concept. We can introduce
2) In documentation of example programs, add plots of outputs. These help users decide
if the program ran correctly and if they're interpreting the outputs correctly
Ok, also good point. I will put this on our todo list.
[snip]
Suggestion for future (not current!) version - add capability for user routines to stop the
Integration process. This is useful for breaking out of periodic solutions, for stopping
the computations if the solution attains meaningless values, and for limiting the amount
of running time. See, for example, "Event Location" at http://www.mathworks.com/help/matlab/math/ordinary-differential-equations.ht...
Right, there was a question some minutes ago on the boost users list about the same topic. I think we will think about a feature like this. In the mean time you can use the iterators or range of odeint in combination with a find_if boost::find_if( make_const_step_range( stepper , sys , state , t_start , t_end , dt ) , []( const state_type &x ) { // your break condition } );