Hi, On 12/22/2011 09:55 PM, Farkas, Illes wrote:
One more question. According to test.out.txt the r.h.s. function is accessed 3 or 2 times at each time point. Can this be reduced to accessing only once (in order to speed up rk2imp) ?
I finally managed to look into this. I think the culprit is evolve_apply routine, which does not reuse derivative data from previous accepted step. The attached patch should remedy the situation, and yield some gain in efficiency. Thanks for the bug report!
Brian, could you please apply the patch, thanks! -- [email protected] http://iki.fi/tuomo.keskitalo
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [email protected] # target_branch: http://bzr.savannah.gnu.org/r/gsl/trunk/ # testament_sha1: 67e590a7828d424c9d6072833ce5f2805ae17186 # timestamp: 2012-01-14 17:09:23 +0200 # base_revision_id: [email protected]\ # nxlkxqc5due7nrk9 # # Begin patch === modified file 'ode-initval2/ChangeLog' --- ode-initval2/ChangeLog 2011-06-28 16:45:45 +0000 +++ ode-initval2/ChangeLog 2012-01-14 15:05:08 +0000 @@ -1,3 +1,10 @@ +2012-01-14 Tuomo Keskitalo <[email protected]> + + * evolve.c: Modified initial derivative evaluation in evolve_apply + to reuse previously calculated values. This saves calls to the + user function. Thanks for Illes Farkas for pointing out redundant + function calls! + 2011-06-28 Brian Gough <[email protected]> * rk4imp.c (rk4imp_apply): use M_SQRT3 instead of sqrt(3) in array === modified file 'ode-initval2/evolve.c' --- ode-initval2/evolve.c 2011-04-29 18:47:48 +0000 +++ ode-initval2/evolve.c 2012-01-14 15:05:08 +0000 @@ -138,16 +138,24 @@ DBL_MEMCPY (e->y0, y, e->dimension); - /* Calculate initial dydt once if the method can benefit. */ - + /* Calculate initial dydt once or reuse previous value if the method + can benefit. */ + if (step->type->can_use_dydt_in) { - int status = GSL_ODEIV_FN_EVAL (dydt, t0, y, e->dydt_in); + if (e->count == 0) + { + int status = GSL_ODEIV_FN_EVAL (dydt, t0, y, e->dydt_in); - if (status) - { - return status; - } + if (status) + { + return status; + } + } + else + { + DBL_MEMCPY (e->dydt_in, e->dydt_out, e->dimension); + } } try_step: # Begin bundle IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWTRKzMwAAnlfgHAwcHf//3+v zSC////6UAVtreHTrLcetOoNexjhKJGmpqm8plPaFPyeppNpPIJpPUaG01NMho9T0R+pqCUUyptT 9Go9NR6U9CNA0DQAAGgAaAGQQTUzU9VP0k8mU2SeiPRqPUNAAaAAANKEZAZGg0DQ00xA0aZNGgNB poDBJIE00mCaZExNTaKejET1BpoyA0D1A9I0RoiR4/UxrDxt+o53LPdnjgSSKLhT+ikvK/wdAVSp lW9nsQeXbDbCCyV+Z2tmIKoDrClEzLRB1dfryLW7aOvKgFVFye3ml7WzqRYLYpJZKMnscMVs81yW Z+41kM1o35FrHuzXaqd87r4KID7SvuhzSRWTUGs30lAIxezI5yPdg4NyZHHNEyyih925SPxHM/GE CiGFCWLJMWVRYqGsd0fwvYcYGK4+S5gSL+SGA1an+W5BfTdsqm7GlET0VojpEf401z0Us21V0OPC oRg25sWcKn1sCTuQ5eVbhZEawODxP2tARoLvFciC6io6yo9M5WUA1C8xV4qAwYk+1hUoP2l3GSIp gHwreggmhgadb0KXuGVhQBaYKp9PnGUAPJoSNAryX8ljSBUR2GfR8wpXYDtas1pDwPY4ByislloV 2EH5Q+UTbPY+iKiykqzi5oQTxZWgRmll2gVLTh0DYa9URwBRYcS5DcgGKKygiJZmkD2aBmoq04xy cmMa4iY0igOVibaqGsnLPBzMg/3WBk8diWaDCvmtihGgjJjPftXYxSoiX3VCT3TAxzWvUjQWSZKN 4JDj8raXRpogRI028IjMUz2QHkCFwG27yf2IS4QfRPM9AyGFWUn6MgJw6ZSujfq42mN+6qhSPLTE W/eamuHFBrggqAN+y7B1CpxSnV2sktCl1ASLlUMyIyTM/R2GdMRtXRPKpQxjE1CtqftLEIKk9/WI LbdJAVV/PlxllX0dE31GjlT96bbjYotfGDj5tRsXpbbN+CRMpSoxBasbA+LBOor7GEIhp7dm3e0k cyTchvTQckf7IFPaCQpfGHIJgZla1Qiv7ERtBnNEUyqr2XxOeFoKJHg8EHHzhYYYJsDeGWUekkB3 o3dGnm7nO/NRfZUG753YJQv8KLgpuxhvzLo1vqGMBhQComArEJQvnHOWFY+8hqmkv1I9Nue+T9LX xJcjFXVGhGZpFUW+zZv50sKITrNQ55MrI5ZRiE1hgoI6c3RogcdNefBOuvwMxWUj8PuuK+phOf12 TAj0YOHXby4PvUDtdM6uXmbRFqtzZdjAd3NmeXolWswzGQysrpNldiRprEFLSsukszA0nBmGHqRn kXoVQU8w6wMPiB4icHYL7HHy4mDTA9gEH3LJLaB1CIGbxxFGF/uQ0SPhodyNgjNSE+REmakWwgWl jtv1b9k5m0Zg9S0ZF9oLI7GWZMmd24UfWb++bmCHMRzEbkUBbo2KwTjeMqkxEHqSJPCw8LJExTiq ofys/weRYFQkMzlvFZqcu8TC8VcpCupNaaJEGEC6sqRRQgMQj4ByEwftuIHlUjySf3Ad6rfCT0zJ mC5ymuWRgdKYRxeI6sfnPibPhIwYxHJbEWIJBAp5aCoZUhr+7Ue0kuF9KOx1zaSigUxjdBOOzGWn afSALqzUKYA9TEbvDSRPBTgb9zHfc5vAxQN0mm5jjnlfODoBBglJ59jokBYrPoywjADKdiVFshCi QBoeCTYU4JcDdVJyVFWkYMHOkCAFcEXtZUFzF1scaz0XFvCTMV/S1yIhKpwT9p6UxHxLbFJOqv1s ybsvGXWoW4/QbBGLDxixZPT0/IuVorle+Ilzun7RVLipIrL7GWCIi9Xguj1gYYKzlMKp/xdyRThQ kDRKzMw=
_______________________________________________ Bug-gsl mailing list [email protected] https://lists.gnu.org/mailman/listinfo/bug-gsl
