> For simplicity, I would like to call the following segment an iteration. > > while (t < t1) > { > int status = gsl_odeiv2_evolve_apply (e, c, s, &sys, &t, t1, &h, y); > > if (status != GSL_SUCCESS) > break; > } > > ... > > Honestly, I started to worry whether modifying things in params outside > iterations is a misuse of GSL.
This may be a use case for which 4771 introduces a bug. Hear me out... When using a plain-vanilla RK4 scheme, the system of equations and all of its parameters must remain fixed from substep-to-substep for full-order accuracy to be achieved. However, between RK4 steps one is permitted to change the parameters however one likes. Along that line of reasoning, I would expect gsl_odeiv2_evolve_apply (e, c, s, &sys, &t, t+1, &h, y); // modify system parameters in some fashion gsl_odeiv2_evolve_apply (e, c, s, &sys, &t, t+1, &h, y); to behave identically pre- and post-4771 as line 1 completes some number of full steps of the chosen scheme. That is, the modification in line 2 is not done in between substeps. Alan, am I interpreting your use case correctly? Tuomo, is this use case supported and, if so, does 4771 break it in some fashion? - Rhys