Skip to content

Commit 2fb92a3

Browse files
committed
Add test
1 parent 1c597f1 commit 2fb92a3

File tree

3 files changed

+42
-16
lines changed

3 files changed

+42
-16
lines changed

bench/adaptive_order.jl

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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])
1717
sol = 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)
2447
end
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"]
3458
for order in 6:2:12
3559
push!(names, "Taylor $(order)")
3660
push!(setups, Dict(:alg => ExplicitTaylor(order = Val(order + 1))))
3761
end
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)
4064
plot(wp)

lib/OrdinaryDiffEqTaylorSeries/src/TaylorSeries_caches.jl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ end
9696
min_order::Val{P}
9797
max_order::Val{Q}
9898
current_order::Base.RefValue{Int}
99+
order_history::Vector{Int}
99100
jets::Vector{FunctionWrapper{Nothing, Tuple{taylorType, uType, tType}}}
100101
u::uType
101102
uprev::uType
@@ -124,8 +125,9 @@ function alg_cache(
124125
atmp = similar(u, uEltypeNoUnits)
125126
recursivefill!(atmp, false)
126127
tmp = zero(u)
127-
current_order = Ref(min_order_value)
128-
ExplicitTaylorAdaptiveOrderCache(alg.min_order, alg.max_order, current_order,
128+
current_order = Ref(max_order_value - 1)
129+
order_history = Vector{Int}()
130+
ExplicitTaylorAdaptiveOrderCache(alg.min_order, alg.max_order, current_order, order_history,
129131
jets, u, uprev, utaylor, utilde, tmp, atmp,
130132
alg.stage_limiter!, alg.step_limiter!, alg.thread)
131133
end

lib/OrdinaryDiffEqTaylorSeries/src/TaylorSeries_perform_step.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ end
110110

111111
min_order_value = get_value(min_order)
112112
max_order_value = get_value(max_order)
113-
# println("current order: ", current_order[])
113+
push!(cache.order_history, current_order[])
114114
jet_index = current_order[] - min_order_value + 1
115115
# compute one additional order for adaptive order
116116
jet = jets[jet_index + 1]

0 commit comments

Comments
 (0)