@@ -91,6 +91,12 @@ function convergence_order(dts, errs, confidence)
9191 return order, order_uncertainty
9292end
9393
94+ function make_saving_callback (cb, u, t, integrator)
95+ DECB = CTS. DiffEqCallbacks
96+ savevalType = typeof (cb (u, t, integrator))
97+ return DECB. SavingCallback (cb, DECB. SavedValues (typeof (t), savevalType))
98+ end
99+
94100function verify_convergence (
95101 title,
96102 algorithm_names,
@@ -127,8 +133,8 @@ function verify_convergence(
127133 solve (deepcopy (prob), ref_alg; dt = ref_dt, save_everystep = ! only_endpoints)
128134 end
129135
130- cur_avg_err (u, t) = average_function (abs .(u .- ref_sol (t)))
131- cur_avg_sol_and_err (u, t) = (average_function (u), average_function (abs .(u .- ref_sol (t))))
136+ cur_avg_err (u, t, integrator ) = average_function (abs .(u .- ref_sol (t)))
137+ cur_avg_sol_and_err (u, t, integrator ) = (average_function (u), average_function (abs .(u .- ref_sol (t))))
132138
133139 float_str (x) = @sprintf " %.4f" x
134140 pow_str (x) = " 10^{$(@sprintf " %.1f" log10 (x)) }"
@@ -182,6 +188,9 @@ function verify_convergence(
182188 plot_kwargs... ,
183189 )
184190
191+ scb_cur_avg_err = make_saving_callback (cur_avg_err, prob. u0, t_end, nothing )
192+ scb_cur_avg_sol_and_err = make_saving_callback (cur_avg_sol_and_err, prob. u0, t_end, nothing )
193+
185194 for algorithm_name in algorithm_names
186195 alg = algorithm (algorithm_name)
187196 alg_str = string (nameof (typeof (algorithm_name)))
@@ -196,8 +205,7 @@ function verify_convergence(
196205 alg;
197206 dt = plot1_dt,
198207 save_everystep = ! only_endpoints,
199- save_func = cur_avg_err,
200- kwargshandle = DiffEqBase. KeywordArgSilent,
208+ callback = scb_cur_avg_err,
201209 ). u
202210 verbose && @info " RMS_error(dt = $plot1_dt ) = $(average_function (cur_avg_errs)) "
203211 return average_function (cur_avg_errs)
@@ -226,8 +234,7 @@ function verify_convergence(
226234 alg;
227235 dt = default_dt,
228236 save_everystep = ! only_endpoints,
229- save_func = cur_avg_sol_and_err,
230- kwargshandle = DiffEqBase. KeywordArgSilent,
237+ callback = scb_cur_avg_sol_and_err,
231238 )
232239 plot2_ts = plot2_values. t
233240 plot2_cur_avg_sols = first .(plot2_values. u)
@@ -267,8 +274,7 @@ function verify_convergence(
267274 history_alg;
268275 dt = default_dt,
269276 save_everystep = ! only_endpoints,
270- save_func = (u, t) -> u .- ref_sol (t),
271- kwargshandle = DiffEqBase. KeywordArgSilent,
277+ callback = make_saving_callback ((u, t, integrator) -> u .- ref_sol (t), prob. u0, t_end, nothing ),
272278 )
273279 history_array = hcat (history_solve_results. u... )
274280 history_plot_title = " Errors for $history_alg_name with \$ dt = $(pow_str (default_dt)) \$ "
0 commit comments