@@ -16,25 +16,49 @@ prob = ODEProblem{true, SciMLBase.FullSpecialize}(
1616 lotka, [1.0 , 1.0 ], (0.0 , 10.0 ), [1.5 , 1.0 , 3.0 , 1.0 ])
1717sol = solve (prob, Vern7 (), abstol = 1 / 10 ^ 14 , reltol = 1 / 10 ^ 14 )
1818
19+ function f (du, u, p, t)
20+ A = 20
21+ σ = 0.02
22+ t0 = 5.0
23+ q = 1 + A * exp (- ((t - t0)^ 2 ) / (2 * σ^ 2 ))
24+ du[1 ] = - q * u[1 ]
25+ du[2 ] = - q * u[2 ]
26+ end
27+
28+ prob2 = ODEProblem {true, SciMLBase.FullSpecialize} (f, [100.0 , 100.0 ], (0.0 , 10.0 ), nothing )
29+ sol2 = solve (prob2, Vern7 (), abstol = 1 / 10 ^ 14 , reltol = 1 / 10 ^ 14 );
30+
31+ @btime sol = solve (prob2, ExplicitTaylorAdaptiveOrder (min_order = Val (6 ), max_order = Val (12 )), abstol = 1e-12 , reltol = 1e-12 );
32+ cache = init (prob2, ExplicitTaylorAdaptiveOrder (min_order = Val (6 ), max_order = Val (12 )), abstol = 1e-12 , reltol = 1e-12 );
33+ sol = solve! (cache)
34+
35+ @btime sol = solve (prob2, ExplicitTaylor (order = Val (12 )), abstol = 1e-12 , reltol = 1e-12 );
36+ @btime sol = solve (prob2, ExplicitTaylor (order = Val (11 )), abstol = 1e-12 , reltol = 1e-12 );
37+
38+ solve! (cache)
1939# Profile
20- cache1 = init (prob, ExplicitTaylorAdaptiveOrder (min_order = Val (6 ), max_order = Val (12 )))
21- OrdinaryDiffEqTaylorSeries. perform_step! (cache1, cache1. cache, false )
22- @profview for _ in 1 : 10000000
40+ function profile1 ()
41+ cache1 = init (prob, ExplicitTaylor (order = Val (8 )))
2342 OrdinaryDiffEqTaylorSeries. perform_step! (cache1, cache1. cache, false )
43+ @profview for _ in 1 : 10000000
44+ OrdinaryDiffEqTaylorSeries. perform_step! (cache1, cache1. cache, false )
45+ end
46+ @btime OrdinaryDiffEqTaylorSeries. perform_step! ($ cache1, $ cache1. cache, false )
2447end
25- @btime OrdinaryDiffEqTaylorSeries. perform_step! (cache1, cache1. cache, false )
26-
27- # Make work-precision plot
28- setups = [Dict (:alg => DP5 ())
29- Dict (:alg => Tsit5 ())
30- Dict (:alg => Vern6 ())
31- Dict (:alg => Vern8 ())
32- Dict (:alg => ExplicitTaylorAdaptiveOrder (min_order = Val (8 ), max_order = Val (12 )))];
33- names = [" DP5" , " Tsit5" , " Vern6" , " Vern8" , " Taylor" ]
48+
49+ profile1 ()
50+
51+ # Make work-precision plot"DP5", "Tsit5", "Vern6", "Vern8",
52+ # setups = [Dict(:alg => DP5())
53+ # Dict(:alg => Tsit5())
54+ # Dict(:alg => Vern6())
55+ # Dict(:alg => Vern8())
56+ setups = Any[Dict (:alg => ExplicitTaylorAdaptiveOrder (min_order = Val (6 ), max_order = Val (12 )))];
57+ names = [" Taylor" ]
3458for order in 6 : 2 : 12
3559 push! (names, " Taylor $(order) " )
3660 push! (setups, Dict (:alg => ExplicitTaylor (order = Val (order + 1 ))))
3761end
38- wp = WorkPrecisionSet ([prob ], abstols, reltols, setups; names = names, appxsol = [sol ],
62+ wp = WorkPrecisionSet ([prob2 ], abstols, reltols, setups; names = names, appxsol = [sol2 ],
3963 save_everystep = false , numruns = 100 , maxiters = 10000 )
4064plot (wp)
0 commit comments