@@ -217,69 +217,75 @@ function WorkPrecision(prob, alg, abstols, reltols, dts = nothing;
217
217
218
218
stats[i] = sol. stats
219
219
220
- if haskey (kwargs, :prob_choice )
221
- cur_appxsol = appxsol[kwargs[:prob_choice ]]
222
- elseif prob isa AbstractArray
223
- cur_appxsol = appxsol[1 ]
224
- else
225
- cur_appxsol = appxsol
226
- end
227
-
228
- if cur_appxsol != = nothing
229
- errsol = appxtrue (sol, cur_appxsol)
230
- errors[i] = Dict {Symbol, Float64} ()
231
- for err in keys (errsol. errors)
232
- errors[i][err] = mean (errsol. errors[err])
233
- end
234
- else
235
- errors[i] = Dict {Symbol, Float64} ()
236
- for err in keys (sol. errors)
237
- errors[i][err] = mean (sol. errors[err])
220
+ if SciMLBase. successful_retcode (sol)
221
+ if haskey (kwargs, :prob_choice )
222
+ cur_appxsol = appxsol[kwargs[:prob_choice ]]
223
+ elseif prob isa AbstractArray
224
+ cur_appxsol = appxsol[1 ]
225
+ else
226
+ cur_appxsol = appxsol
238
227
end
239
- end
240
-
241
- benchmark_f = let dts = dts, _prob = _prob, alg = alg, sol = sol,
242
- abstols = abstols, reltols = reltols, kwargs = kwargs
243
228
244
- if dts === nothing
245
- if _prob isa DAEProblem
246
- () -> @elapsed solve (_prob, alg, sol. u, sol. t;
247
- abstol = abstols[i],
248
- reltol = reltols[i],
249
- timeseries_errors = false ,
250
- dense_errors = false , kwargs... )
251
- else
252
- () -> @elapsed solve (_prob, alg, sol. u, sol. t, sol. k;
253
- abstol = abstols[i],
254
- reltol = reltols[i],
255
- timeseries_errors = false ,
256
- dense_errors = false , kwargs... )
229
+ if cur_appxsol != = nothing
230
+ errsol = appxtrue (sol, cur_appxsol)
231
+ errors[i] = Dict {Symbol, Float64} ()
232
+ for err in keys (errsol. errors)
233
+ errors[i][err] = mean (errsol. errors[err])
257
234
end
258
235
else
259
- if _prob isa DAEProblem
260
- () -> @elapsed solve (_prob, alg, sol. u, sol. t;
261
- abstol = abstols[i],
262
- reltol = reltols[i],
263
- dt = dts[i],
264
- timeseries_errors = false ,
265
- dense_errors = false , kwargs... )
236
+ errors[i] = Dict {Symbol, Float64} ()
237
+ for err in keys (sol. errors)
238
+ errors[i][err] = mean (sol. errors[err])
239
+ end
240
+ end
241
+
242
+ benchmark_f = let dts = dts, _prob = _prob, alg = alg, sol = sol,
243
+ abstols = abstols, reltols = reltols, kwargs = kwargs
244
+
245
+ if dts === nothing
246
+ if _prob isa DAEProblem
247
+ () -> @elapsed solve (_prob, alg, sol. u, sol. t;
248
+ abstol = abstols[i],
249
+ reltol = reltols[i],
250
+ timeseries_errors = false ,
251
+ dense_errors = false , kwargs... )
252
+ else
253
+ () -> @elapsed solve (_prob, alg, sol. u, sol. t, sol. k;
254
+ abstol = abstols[i],
255
+ reltol = reltols[i],
256
+ timeseries_errors = false ,
257
+ dense_errors = false , kwargs... )
258
+ end
266
259
else
267
- () -> @elapsed solve (_prob, alg, sol. u, sol. t, sol. k;
268
- abstol = abstols[i],
269
- reltol = reltols[i],
270
- dt = dts[i],
271
- timeseries_errors = false ,
272
- dense_errors = false , kwargs... )
260
+ if _prob isa DAEProblem
261
+ () -> @elapsed solve (_prob, alg, sol. u, sol. t;
262
+ abstol = abstols[i],
263
+ reltol = reltols[i],
264
+ dt = dts[i],
265
+ timeseries_errors = false ,
266
+ dense_errors = false , kwargs... )
267
+ else
268
+ () -> @elapsed solve (_prob, alg, sol. u, sol. t, sol. k;
269
+ abstol = abstols[i],
270
+ reltol = reltols[i],
271
+ dt = dts[i],
272
+ timeseries_errors = false ,
273
+ dense_errors = false , kwargs... )
274
+ end
273
275
end
274
276
end
275
- end
276
- benchmark_f () # pre-compile
277
+ benchmark_f () # pre-compile
277
278
278
- b_t = benchmark_f ()
279
- if b_t > seconds
280
- times[i] = b_t
279
+ b_t = benchmark_f ()
280
+ if b_t > seconds
281
+ times[i] = b_t
282
+ else
283
+ times[i] = mapreduce (i -> benchmark_f (), min, 2 : numruns; init = b_t)
284
+ end
281
285
else
282
- times[i] = mapreduce (i -> benchmark_f (), min, 2 : numruns; init = b_t)
286
+ # Unsuccessful retcode, give NaN time
287
+ errors[i] = Dict (:l∞ => NaN , :L2 => NaN , :final => NaN , :l2 => NaN , :L∞ => NaN )
288
+ times[i] = NaN
283
289
end
284
290
end
285
291
end
0 commit comments