Skip to content

Commit 4420610

Browse files
split out convergence tests
1 parent ff208ab commit 4420610

File tree

8 files changed

+362
-337
lines changed

8 files changed

+362
-337
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# This definitely needs cleaning
2+
using OrdinaryDiffEq, ODEProblemLibrary, DiffEqDevTools
3+
using Test, Random
4+
Random.seed!(100)
5+
6+
## Convergence Testing
7+
dts1 = 1 .// 2 .^ (9:-1:5)
8+
dts = 1 .// 2 .^ (8:-1:4)
9+
testTol = 0.2
10+
11+
@testset "Explicit Solver Convergence Tests ($(["out-of-place", "in-place"][i]))" for i in 1:2
12+
prob = (ODEProblemLibrary.prob_ode_linear,
13+
ODEProblemLibrary.prob_ode_2Dlinear)[i]
14+
15+
sim5 = test_convergence(dts, prob, AB3())
16+
@test sim5.𝒪est[:l2]3 atol=testTol
17+
sim6 = test_convergence(dts, prob, ABM32())
18+
@test sim6.𝒪est[:l2]3 atol=testTol
19+
sim7 = test_convergence(dts, prob, AB4())
20+
@test sim7.𝒪est[:l2]4 atol=testTol
21+
sim8 = test_convergence(dts1, prob, ABM43()) #using dts1 due to floating point error in convergence test
22+
@test sim8.𝒪est[:l2]4 atol=testTol
23+
sim9 = test_convergence(dts, prob, AB5())
24+
@test sim9.𝒪est[:l2]5 atol=testTol
25+
sim10 = test_convergence(dts, prob, ABM54())
26+
@test sim10.𝒪est[:l2]5 atol=testTol
27+
sim101 = test_convergence(dts, prob, VCAB3())
28+
@test sim101.𝒪est[:l2]3 atol=testTol
29+
sim102 = test_convergence(dts, prob, VCAB4())
30+
@test sim102.𝒪est[:l2]4 atol=testTol
31+
sim103 = test_convergence(dts, prob, VCAB5())
32+
@test sim103.𝒪est[:l2]5 atol=testTol
33+
sim104 = test_convergence(dts, prob, VCABM3())
34+
@test sim104.𝒪est[:l2]3 atol=testTol
35+
sim105 = test_convergence(dts, prob, VCABM4())
36+
@test sim105.𝒪est[:l2]4 atol=testTol
37+
sim106 = test_convergence(dts, prob, VCABM5())
38+
@test sim106.𝒪est[:l2]5 atol=testTol
39+
end
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
using SafeTestsets
22

3+
@time @safetestset "ABM Convergence Tests" include("abm_convergence_tests.jl")
34
@time @safetestset "Adams Variable Coefficients Tests" include("adams_tests.jl")
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# This definitely needs cleaning
2+
using OrdinaryDiffEq, ODEProblemLibrary, DiffEqDevTools
3+
using Test, Random
4+
Random.seed!(100)
5+
6+
testTol = 0.2
7+
8+
@testset "Implicit Solver Convergence Tests ($(["out-of-place", "in-place"][i]))" for i in 1:2
9+
prob = (ODEProblemLibrary.prob_ode_linear,
10+
ODEProblemLibrary.prob_ode_2Dlinear)[i]
11+
12+
sim = test_convergence(dts, prob, ABDF2())
13+
@test sim.𝒪est[:final]2 atol=testTol
14+
@test sim.𝒪est[:l2]2 atol=testTol
15+
@test sim.𝒪est[:l∞]2 atol=testTol
16+
17+
sim = test_convergence(dts, prob, ABDF2(nlsolve = NLFunctional()))
18+
@test sim.𝒪est[:final]2 atol=testTol
19+
@test sim.𝒪est[:l2]2 atol=testTol
20+
@test sim.𝒪est[:l∞]2 atol=testTol
21+
22+
# QBDF
23+
sim = test_convergence(dts, prob, QBDF1())
24+
@test sim.𝒪est[:final]1 atol=testTol
25+
@test sim.𝒪est[:l2]1 atol=testTol
26+
@test sim.𝒪est[:l∞]1 atol=testTol
27+
28+
sim = test_convergence(dts, prob, QBDF2())
29+
@test sim.𝒪est[:final]2 atol=testTol
30+
@test sim.𝒪est[:l2]2 atol=testTol
31+
@test sim.𝒪est[:l∞]2 atol=testTol
32+
33+
# QNDF
34+
sim = test_convergence(dts, prob, QNDF1())
35+
@test sim.𝒪est[:final]1 atol=testTol
36+
@test sim.𝒪est[:l2]1 atol=testTol
37+
@test sim.𝒪est[:l∞]1 atol=testTol
38+
39+
sim = test_convergence(dts3, prob, QNDF2())
40+
@test sim.𝒪est[:final]2 atol=testTol
41+
@test sim.𝒪est[:l2]2 atol=testTol
42+
@test sim.𝒪est[:l∞]2 atol=testTol
43+
44+
sim = test_convergence(dts, prob, QNDF2(nlsolve = NLFunctional()))
45+
@test sim.𝒪est[:final]2 atol=testTol
46+
@test sim.𝒪est[:l2]2 atol=testTol
47+
@test sim.𝒪est[:l∞]2 atol=testTol
48+
@test_nowarn solve(prob, QNDF())
49+
50+
# MEBDF2
51+
sim21 = test_convergence(dts, prob, MEBDF2(extrapolant = :linear))
52+
@test sim21.𝒪est[:final]2 atol=testTol
53+
54+
sim22 = test_convergence(dts, prob, MEBDF2(nlsolve = NLFunctional()), reltol = 1e-2)
55+
@test sim22.𝒪est[:final]2 atol=testTol
56+
57+
sim23 = test_convergence(dts, prob, MEBDF2(nlsolve = NLAnderson()), reltol = 1e-2)
58+
@test sim23.𝒪est[:final]2 atol=testTol
59+
60+
sim24 = test_convergence(
61+
dts, prob, MEBDF2(nlsolve = NonlinearSolveAlg()), reltol = 1e-2)
62+
@test sim24.𝒪est[:final]2 atol=testTol
63+
64+
#FBDF
65+
@test_nowarn solve(prob, FBDF())
66+
end
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# This definitely needs cleaning
2+
using OrdinaryDiffEq, ODEProblemLibrary, DiffEqDevTools
3+
using Test, Random
4+
Random.seed!(100)
5+
6+
## Convergence Testing
7+
dts1 = 1 .// 2 .^ (9:-1:5)
8+
dts2 = 1 .// 2 .^ (7:-1:3)
9+
dts3 = 1 .// 2 .^ (12:-1:7)
10+
dts4 = 1 .// 2 .^ (5:-1:3)
11+
dts5 = 1 .// 2 .^ (3:-1:1)
12+
dts6 = 1 .// 10 .^ (5:-1:1)
13+
testTol = 0.2
14+
15+
f = (u, p, t) -> sin(u)
16+
prob_ode_nonlinear = ODEProblem(
17+
ODEFunction(f;
18+
analytic = (u0, p, t) -> 2 * acot(exp(-t) *
19+
cot(0.5))), 1.0,
20+
(0.0, 0.5))
21+
22+
@testset "Explicit Solver Convergence Tests ($(["out-of-place", "in-place"][i]))" for i in 1:2
23+
prob = (ODEProblemLibrary.prob_ode_linear,
24+
ODEProblemLibrary.prob_ode_2Dlinear)[i]
25+
dts = 1 .// 2 .^ (8:-1:4)
26+
@info "Very low order"
27+
sim = test_convergence(dts, prob, Euler())
28+
@test sim.𝒪est[:final]1 atol=testTol
29+
sim2 = test_convergence(dts, prob, Heun())
30+
@test sim2.𝒪est[:l∞]2 atol=testTol
31+
sim2 = test_convergence(dts, prob, Ralston())
32+
@test sim2.𝒪est[:l∞]2 atol=testTol
33+
sim2 = test_convergence(dts, prob, Midpoint())
34+
@test sim2.𝒪est[:l∞]2 atol=testTol
35+
sim3 = test_convergence(dts, prob, RK4())
36+
@test sim3.𝒪est[:l∞]4 atol=testTol
37+
38+
sim3 = test_convergence(dts2, prob, KuttaPRK2p5(threading = true))
39+
@test sim3.𝒪est[:l∞]5 atol=testTol
40+
41+
sim3 = test_convergence(dts2, prob, KuttaPRK2p5(threading = false))
42+
@test sim3.𝒪est[:l∞]5 atol=testTol
43+
44+
sim3 = test_convergence(dts2, prob, RKO65())
45+
@test sim3.𝒪est[:l∞]5 atol=testTol
46+
47+
sim3 = test_convergence(dts4, prob, FRK65())
48+
@test sim3.𝒪est[:l∞]6 atol=0.6
49+
50+
sim3 = test_convergence(dts5, prob, PFRK87())
51+
@test sim3.𝒪est[:l∞]8.4 atol=0.2
52+
53+
sim3 = test_convergence(dts, prob, RKM())
54+
@test sim3.𝒪est[:l∞]4 atol=0.2
55+
56+
sim_ps6 = test_convergence(dts2, prob_ode_nonlinear, PSRK4p7q6())
57+
@test sim_ps6.𝒪est[:l∞]4 atol=testTol
58+
59+
sim_ps5 = test_convergence(dts2, prob_ode_nonlinear, PSRK3p6q5())
60+
@test sim_ps5.𝒪est[:l∞]3 atol=testTol
61+
62+
sim_ps4 = test_convergence(dts2, prob_ode_nonlinear, PSRK3p5q4())
63+
@test sim_ps4.𝒪est[:l∞]3 atol=testTol
64+
65+
sim_ms5 = test_convergence(dts2, prob, MSRK5())
66+
@test sim_ms5.𝒪est[:l∞]5 atol=testTol
67+
68+
sim_ms6 = test_convergence(dts4, prob, MSRK6())
69+
@test sim_ms6.𝒪est[:l∞]6 atol=testTol
70+
71+
sim_ms54 = test_convergence(dts2, prob, Stepanov5())
72+
@test sim_ms54.𝒪est[:l∞]5 atol=0.5
73+
74+
sim4 = test_convergence(dts, prob, BS3())
75+
@test sim4.𝒪est[:l2]3 atol=testTol
76+
77+
sim4 = test_convergence(dts2, prob, SIR54())
78+
@test sim4.𝒪est[:l2]4.4 atol=testTol
79+
80+
sim2 = test_convergence(dts, prob, Alshina2())
81+
@test sim2.𝒪est[:l∞]2 atol=testTol
82+
83+
sim3 = test_convergence(dts, prob, Alshina3())
84+
@test sim3.𝒪est[:l∞]3 atol=testTol
85+
86+
sim6 = test_convergence(dts4, prob, Alshina6())
87+
@test sim6.𝒪est[:l∞]6 atol=testTol
88+
89+
sim160 = test_convergence(dts, prob, Anas5(w = 2))
90+
@test sim160.𝒪est[:l2]4 atol=2 * testTol
91+
end
92+
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
using SafeTestsets
22

3-
@time @safetestset "OwrenZen Tests" include("owrenzen_tests.jl")
3+
@time @safetestset "Low Order ERK Convergence Tests" include("low_order_erk_convergence_tests.jl")
4+
@time @safetestset "OwrenZen Tests" include("owrenzen_tests.jl")
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
# This definitely needs cleaning
2+
using OrdinaryDiffEq, ODEProblemLibrary, DiffEqDevTools
3+
using Test, Random
4+
Random.seed!(100)
5+
6+
## Convergence Testing
7+
testTol = 0.2
8+
9+
@testset "Implicit Solver Convergence Tests ($(["out-of-place", "in-place"][i]))" for i in 1:2
10+
prob = (ODEProblemLibrary.prob_ode_linear,
11+
ODEProblemLibrary.prob_ode_2Dlinear)[i]
12+
13+
dts = 1 .// 2 .^ (9:-1:5)
14+
15+
@show "Very low order"
16+
17+
sim11 = test_convergence(dts, prob, ImplicitEuler(extrapolant = :linear))
18+
@test sim11.𝒪est[:final]1 atol=testTol
19+
20+
sim112 = test_convergence(dts, prob, ImplicitEuler(nlsolve = NLFunctional()),
21+
reltol = 1e-2)
22+
@test sim112.𝒪est[:final]1 atol=testTol
23+
24+
sim113 = test_convergence(dts, prob, ImplicitEuler(nlsolve = NLAnderson()),
25+
reltol = 1e-2)
26+
@test sim113.𝒪est[:final]1 atol=testTol
27+
28+
sim114 = test_convergence(dts, prob, ImplicitEuler(nlsolve = NonlinearSolveAlg()),
29+
reltol = 1e-2)
30+
@test sim114.𝒪est[:final]1 atol=testTol
31+
32+
sim13 = test_convergence(dts, prob, ImplicitMidpoint())
33+
@test sim13.𝒪est[:final]2 atol=testTol
34+
35+
sim132 = test_convergence(dts, prob, ImplicitMidpoint(nlsolve = NLFunctional()))
36+
@test sim132.𝒪est[:final]2 atol=testTol
37+
38+
sim134 = test_convergence(dts, prob, ImplicitMidpoint(nlsolve = NLAnderson()))
39+
@test sim134.𝒪est[:final]2 atol=testTol
40+
41+
sim136 = test_convergence(dts, prob, ImplicitMidpoint(nlsolve = NonlinearSolveAlg()))
42+
@test sim136.𝒪est[:final]2 atol=testTol
43+
44+
sim13 = test_convergence(dts, prob, Trapezoid())
45+
@test sim13.𝒪est[:final]2 atol=testTol
46+
47+
sim133 = test_convergence(dts, prob, Trapezoid(nlsolve = NLFunctional()))
48+
@test sim133.𝒪est[:final]2 atol=testTol
49+
50+
sim135 = test_convergence(dts, prob, Trapezoid(nlsolve = NLAnderson()))
51+
@test sim135.𝒪est[:final]2 atol=testTol
52+
53+
sim137 = test_convergence(dts, prob, Trapezoid(nlsolve = NonlinearSolveAlg()))
54+
@test sim137.𝒪est[:final]2 atol=testTol
55+
56+
sim14 = test_convergence(dts, prob, TRBDF2())
57+
@test sim14.𝒪est[:final]2 atol=testTol
58+
59+
sim152 = test_convergence(dts, prob, TRBDF2(autodiff = false))
60+
@test sim152.𝒪est[:final]2 atol=testTol + 0.1
61+
62+
sim15 = test_convergence(dts, prob, SDIRK2())
63+
@test sim15.𝒪est[:final]2 atol=testTol
64+
65+
sim15 = test_convergence(dts, prob, SDIRK22())
66+
@test sim15.𝒪est[:final]2 atol=testTol
67+
sim152 = test_convergence(dts, prob, SSPSDIRK2())
68+
@test sim152.𝒪est[:final]2 atol=testTol
69+
70+
@show "Mid SDIRKs"
71+
72+
sim16 = test_convergence(dts, prob, Kvaerno3())
73+
@test sim16.𝒪est[:final]3 atol=testTol
74+
75+
sim162 = test_convergence(dts, prob, Kvaerno3(nlsolve = NLFunctional()))
76+
@test sim162.𝒪est[:final]3 atol=testTol
77+
78+
sim17 = test_convergence(dts, prob, KenCarp3())
79+
@test sim17.𝒪est[:final]3 atol=testTol
80+
81+
sim019 = test_convergence(dts, prob, CFNLIRK3())
82+
@test sim019.𝒪est[:final]3 atol=testTol
83+
84+
sim18 = test_convergence(dts, prob, PDIRK44())
85+
@test sim18.𝒪est[:final]4 atol=testTol
86+
87+
sim182 = test_convergence(dts, prob, PDIRK44(; threading = false))
88+
@test sim182.𝒪est[:final]4 atol=testTol
89+
90+
dts = (1 / 2) .^ (5:-1:1)
91+
sim13 = test_convergence(dts, prob, SFSDIRK8())
92+
@test sim13.𝒪est[:final]4 atol=testTol
93+
94+
dts = (1 / 2) .^ (5:-1:1)
95+
sim14 = test_convergence(dts, prob, SFSDIRK7())
96+
@test sim14.𝒪est[:final]4 atol=testTol
97+
98+
dts = (1 / 2) .^ (8:-1:1)
99+
sim15 = test_convergence(dts, prob, SFSDIRK6())
100+
@test sim15.𝒪est[:final]4 atol=testTol
101+
102+
dts = (1 / 2) .^ (6:-1:1)
103+
sim16 = test_convergence(dts, prob, SFSDIRK5())
104+
@test sim16.𝒪est[:final]4 atol=testTol
105+
106+
dts = 1 .// 2 .^ (7:-1:4)
107+
sim17 = test_convergence(dts, prob, SFSDIRK4())
108+
@test sim17.𝒪est[:final]4 atol=testTol
109+
110+
sim18 = test_convergence(dts, prob, Cash4())
111+
@test sim18.𝒪est[:final]4 atol=testTol
112+
113+
sim19 = test_convergence(dts, prob, Hairer4())
114+
@test sim19.𝒪est[:final]4 atol=testTol
115+
116+
sim20 = test_convergence(dts, prob, RK46NL())
117+
@test sim20.𝒪est[:final]4 atol=testTol
118+
@test sim20.𝒪est[:l2]4 atol=testTol
119+
@test sim20.𝒪est[:l∞]4 atol=testTol
120+
121+
sim110 = test_convergence(dts, prob, Hairer42())
122+
@test sim110.𝒪est[:final]4 atol=testTol
123+
124+
sim111 = test_convergence(dts, prob, Kvaerno4())
125+
@test sim111.𝒪est[:final]4 atol=testTol
126+
127+
sim112 = test_convergence(dts, prob, KenCarp4())
128+
@test sim112.𝒪est[:final]4 atol=testTol
129+
130+
sim113 = test_convergence(dts, prob, Kvaerno5())
131+
@test sim113.𝒪est[:final]5 atol=testTol
132+
133+
sim114 = test_convergence(dts, prob, KenCarp5())
134+
@test sim114.𝒪est[:final]5 atol=testTol
135+
136+
sim115 = test_convergence(dts, prob, KenCarp5(nlsolve = NLFunctional()))
137+
@test_broken sim115.𝒪est[:final]5 atol=testTol
138+
139+
sim116 = test_convergence(dts, prob, ESDIRK54I8L2SA())
140+
@test sim116.𝒪est[:final]5 atol=testTol
141+
142+
sim117 = test_convergence(dts, prob, KenCarp47())
143+
@test sim117.𝒪est[:final]4 atol=testTol
144+
145+
sim118 = test_convergence(dts, prob, KenCarp58())
146+
@test sim118.𝒪est[:final]5 atol=testTol
147+
148+
sim119 = test_convergence(dts, prob, ESDIRK436L2SA2())
149+
@test sim119.𝒪est[:final]4 atol=testTol
150+
151+
sim120 = test_convergence(dts, prob, ESDIRK437L2SA())
152+
@test sim120.𝒪est[:final]4 atol=testTol
153+
154+
sim121 = test_convergence(dts, prob, ESDIRK547L2SA2())
155+
@test 5 - testTol <= sim121.𝒪est[:final] <= 6
156+
157+
dts = (1 / 2) .^ (5:-1:1)
158+
sim122 = test_convergence(dts, prob, ESDIRK659L2SA())
159+
@test sim122.𝒪est[:final]6 atol=testTol
160+
end

0 commit comments

Comments
 (0)