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

Reply via email to