Skip to content

Commit 9ce45f0

Browse files
Merge pull request #16 from SciML/convergence
add a bunch of automated convergence testing
2 parents c478ae7 + 48a0731 commit 9ce45f0

File tree

4 files changed

+195
-110
lines changed

4 files changed

+195
-110
lines changed

Project.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ UnPack = "0.1, 1.0"
3333
julia = "1.4"
3434

3535
[extras]
36+
DiffEqDevTools = "f3b72e0c-5b89-59e1-b016-84e28bfd966d"
3637
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
3738
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
3839

3940
[targets]
40-
test = ["Test", "SafeTestsets"]
41+
test = ["DiffEqDevTools", "Test", "SafeTestsets"]
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
using StochasticDelayDiffEq, DiffEqDevTools
2+
using Test
3+
4+
#Hayes Equation
5+
begin
6+
function hayes_modelf(du,u,h,p,t)
7+
τ,a,b,c,α,β,γ = p
8+
du .= a.*u .+ b .* h(p,t-τ) .+ c
9+
end
10+
function hayes_modelg(du,u,h,p,t)
11+
τ,a,b,c,α,β,γ = p
12+
du .= α.*u .+ β.*h(p,t-τ) .+ γ
13+
end
14+
h(p,t) = (ones(1) .+ t);
15+
tspan = (0.,10.)
16+
end
17+
18+
19+
pmul = [1.0,-4.,-2.,10.,-1.3,-1.2, 1.1]
20+
padd = [1.0,-4.,-2.,10.,-0.0,-0.0, 0.1]
21+
22+
prob = @test_nowarn SDDEProblem(hayes_modelf, hayes_modelg, [1.], h, tspan, pmul; constant_lags = (pmul[1],));
23+
@test_nowarn SDDEProblem(hayes_modelf, hayes_modelg, h, tspan, padd; constant_lags = (padd[1],));
24+
25+
dts = (1/2).^(8:-1:4)
26+
test_dt = 1/2^9
27+
sim2 = analyticless_test_convergence(dts,prob,EM(),test_dt,trajectories=300, use_noise_grid=false)
28+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
29+
sim2 = analyticless_test_convergence(dts,prob,LambaEM(),test_dt,trajectories=300, use_noise_grid=false)
30+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
31+
sim2 = analyticless_test_convergence(dts,prob,EulerHeun(),test_dt,trajectories=300, use_noise_grid=false)
32+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
33+
sim2 = analyticless_test_convergence(dts,prob,LambaEulerHeun(),test_dt,trajectories=300, use_noise_grid=false)
34+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
35+
sim2 = analyticless_test_convergence(dts,prob,RKMil(),test_dt,trajectories=300, use_noise_grid=false)
36+
@test abs(sim2.𝒪est[:final]-1.0) < 0.3
37+
38+
#=
39+
sim2 = analyticless_test_convergence(dts,prob,RKMil(interpretation=:Stratonovich),test_dt,trajectories=300, use_noise_grid=false)
40+
@test abs(sim2.𝒪est[:final]-1.0) < 0.3
41+
=#
42+
43+
# Test SROCK methods
44+
println("SROCK methods")
45+
prob.p .= pmul;
46+
#=
47+
sim2 = analyticless_test_convergence(dts,prob,SROCK1(),test_dt,trajectories=100, use_noise_grid=false)
48+
@test abs(sim2.𝒪est[:final]-1.0) < 0.3
49+
sim2 = analyticless_test_convergence(dts,prob,SROCK1(interpretation=:Stratonovich),test_dt,trajectories=300, use_noise_grid=false)
50+
@test abs(sim2.𝒪est[:final]-1.0) < 0.3
51+
=#
52+
sim2 = analyticless_test_convergence(dts,prob,SROCKEM(),test_dt,trajectories=300, use_noise_grid=false)
53+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
54+
sim2 = analyticless_test_convergence(dts,prob,SROCKEM(strong_order_1=false),test_dt,trajectories=300, use_noise_grid=false)
55+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
56+
sim2 = analyticless_test_convergence(dts,prob,SKSROCK(),test_dt,trajectories=300, use_noise_grid=false)
57+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
58+
sim2 = analyticless_test_convergence(dts,prob,SKSROCK(;post_processing=true),test_dt,trajectories=300, use_noise_grid=false)
59+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
60+
61+
# Test Implicit methods
62+
println("implicit methods")
63+
sim2 = analyticless_test_convergence(dts,prob,ImplicitEM(),test_dt,trajectories=300, use_noise_grid=false)
64+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
65+
sim2 = analyticless_test_convergence(dts,prob,ImplicitEM(symplectic=true, theta = 1/2),test_dt,trajectories=300, use_noise_grid=false)
66+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
67+
sim2 = analyticless_test_convergence(dts,prob,ImplicitEulerHeun(),test_dt,trajectories=300, use_noise_grid=false)
68+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
69+
sim2 = analyticless_test_convergence(dts,prob,ImplicitEulerHeun(symplectic=true, theta = 1/2),test_dt,trajectories=300, use_noise_grid=false)
70+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
71+
sim2 = analyticless_test_convergence(dts,prob,ISSEM(),test_dt,trajectories=300, use_noise_grid=false)
72+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
73+
sim2 = analyticless_test_convergence(dts,prob,ISSEM(symplectic=true, theta = 1/2),test_dt,trajectories=300, use_noise_grid=false)
74+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
75+
76+
#=
77+
sim2 = analyticless_test_convergence(dts,prob,ImplicitRKMil(),test_dt,trajectories=300, use_noise_grid=false)
78+
@test abs(sim2.𝒪est[:final]-1.0) < 0.3
79+
sim2 = analyticless_test_convergence(dts,prob,ImplicitRKMil(symplectic=true, theta = 1/2),test_dt,trajectories=300, use_noise_grid=false)
80+
@test abs(sim2.𝒪est[:final]-1.0) < 0.3
81+
sim2 = analyticless_test_convergence(dts,prob,ImplicitRKMil(interpretation=:Stratonovich, symplectic = true, theta = 1/2),test_dt,trajectories=300, use_noise_grid=false)
82+
@test abs(sim2.𝒪est[:final]-1.0) < 0.3
83+
sim2 = analyticless_test_convergence(dts,prob,ISSEulerHeun(),test_dt,trajectories=300, use_noise_grid=false)
84+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
85+
sim2 = analyticless_test_convergence(dts,prob,ISSEulerHeun(symplectic=true, theta = 1/2),test_dt,trajectories=300, use_noise_grid=false)
86+
@test abs(sim2.𝒪est[:final]-0.5) < 0.3
87+
=#

test/runtests.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using SafeTestsets
22

3-
@safetestset "SDDEProblem, solve" begin
4-
include("test_prob_sol.jl")
5-
end
3+
@safetestset "SDDEProblem, solve" begin include("test_prob_sol.jl") end
4+
@safetestset "Analyticless Convergence Tests" begin include("analyticless_convergence_tests.jl") end

test/test_prob_sol.jl

Lines changed: 104 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -19,114 +19,112 @@ end
1919
pmul = [1.0,-4.,-2.,10.,-1.3,-1.2, 1.1]
2020
padd = [1.0,-4.,-2.,10.,-0.0,-0.0, 0.1]
2121

22-
@testset "Test: SDDEProblem and solve" begin
23-
prob = @test_nowarn SDDEProblem(hayes_modelf, hayes_modelg, [1.], h, tspan, pmul; constant_lags = (pmul[1],));
24-
@test_nowarn SDDEProblem(hayes_modelf, hayes_modelg, h, tspan, padd; constant_lags = (padd[1],));
22+
prob = @test_nowarn SDDEProblem(hayes_modelf, hayes_modelg, [1.], h, tspan, pmul; constant_lags = (pmul[1],));
23+
@test_nowarn SDDEProblem(hayes_modelf, hayes_modelg, h, tspan, padd; constant_lags = (padd[1],));
2524

26-
sol = @test_nowarn solve(prob,EM(),dt=0.01)
27-
@test sol.u[end] != zeros(1)
28-
sol = @test_nowarn solve(prob,LambaEM(),dt=0.01)
29-
@test sol.u[end] != zeros(1)
30-
sol = @test_nowarn solve(prob,EulerHeun(),dt=0.01)
31-
@test sol.u[end] != zeros(1)
32-
sol = @test_nowarn solve(prob,LambaEulerHeun(),dt=0.01)
33-
@test sol.u[end] != zeros(1)
34-
sol = @test_nowarn solve(prob,RKMil(),dt=0.01)
35-
@test sol.u[end] != zeros(1)
36-
sol = @test_nowarn solve(prob,RKMil(interpretation=:Stratonovich),dt=0.01)
37-
@test sol.u[end] != zeros(1)
38-
sol = @test_nowarn solve(prob,RKMilCommute(),dt=0.01)
39-
@test sol.u[end] != zeros(1)
40-
sol = @test_nowarn solve(prob,RKMilCommute(interpretation=:Stratonovich),dt=0.01)
41-
@test sol.u[end] != zeros(1)
42-
sol = @test_nowarn solve(prob,WangLi3SMil_A(),dt=0.01)
43-
@test sol.u[end] != zeros(1)
44-
sol = @test_nowarn solve(prob,WangLi3SMil_B(),dt=0.01)
45-
@test sol.u[end] != zeros(1)
46-
sol = @test_nowarn solve(prob,WangLi3SMil_C(),dt=0.01)
47-
@test sol.u[end] != zeros(1)
48-
sol = @test_nowarn solve(prob,WangLi3SMil_D(),dt=0.01)
49-
@test sol.u[end] != zeros(1)
50-
sol = @test_nowarn solve(prob,WangLi3SMil_E(),dt=0.01)
51-
@test sol.u[end] != zeros(1)
52-
sol = @test_nowarn solve(prob,WangLi3SMil_F(),dt=0.01)
53-
@test sol.u[end] != zeros(1)
54-
sol = @test_nowarn solve(prob,SRI(),dt=0.01)
55-
@test sol.u[end] != zeros(1)
56-
sol = @test_nowarn solve(prob,SRIW1(),dt=0.01)
57-
@test sol.u[end] != zeros(1)
58-
sol = @test_nowarn solve(prob,SRIW2(),dt=0.01)
59-
@test sol.u[end] != zeros(1)
60-
sol = @test_nowarn solve(prob,SOSRI(),dt=0.01)
61-
@test sol.u[end] != zeros(1)
62-
sol = @test_nowarn solve(prob,SOSRI2(),dt=0.01)
63-
@test sol.u[end] != zeros(1)
25+
sol = @test_nowarn solve(prob,EM(),dt=0.01)
26+
@test sol.u[end] != zeros(1)
27+
sol = @test_nowarn solve(prob,LambaEM(),dt=0.01)
28+
@test sol.u[end] != zeros(1)
29+
sol = @test_nowarn solve(prob,EulerHeun(),dt=0.01)
30+
@test sol.u[end] != zeros(1)
31+
sol = @test_nowarn solve(prob,LambaEulerHeun(),dt=0.01)
32+
@test sol.u[end] != zeros(1)
33+
sol = @test_nowarn solve(prob,RKMil(),dt=0.01)
34+
@test sol.u[end] != zeros(1)
35+
sol = @test_nowarn solve(prob,RKMil(interpretation=:Stratonovich),dt=0.01)
36+
@test sol.u[end] != zeros(1)
37+
sol = @test_nowarn solve(prob,RKMilCommute(),dt=0.01)
38+
@test sol.u[end] != zeros(1)
39+
sol = @test_nowarn solve(prob,RKMilCommute(interpretation=:Stratonovich),dt=0.01)
40+
@test sol.u[end] != zeros(1)
41+
sol = @test_nowarn solve(prob,WangLi3SMil_A(),dt=0.01)
42+
@test sol.u[end] != zeros(1)
43+
sol = @test_nowarn solve(prob,WangLi3SMil_B(),dt=0.01)
44+
@test sol.u[end] != zeros(1)
45+
sol = @test_nowarn solve(prob,WangLi3SMil_C(),dt=0.01)
46+
@test sol.u[end] != zeros(1)
47+
sol = @test_nowarn solve(prob,WangLi3SMil_D(),dt=0.01)
48+
@test sol.u[end] != zeros(1)
49+
sol = @test_nowarn solve(prob,WangLi3SMil_E(),dt=0.01)
50+
@test sol.u[end] != zeros(1)
51+
sol = @test_nowarn solve(prob,WangLi3SMil_F(),dt=0.01)
52+
@test sol.u[end] != zeros(1)
53+
sol = @test_nowarn solve(prob,SRI(),dt=0.01)
54+
@test sol.u[end] != zeros(1)
55+
sol = @test_nowarn solve(prob,SRIW1(),dt=0.01)
56+
@test sol.u[end] != zeros(1)
57+
sol = @test_nowarn solve(prob,SRIW2(),dt=0.01)
58+
@test sol.u[end] != zeros(1)
59+
sol = @test_nowarn solve(prob,SOSRI(),dt=0.01)
60+
@test sol.u[end] != zeros(1)
61+
sol = @test_nowarn solve(prob,SOSRI2(),dt=0.01)
62+
@test sol.u[end] != zeros(1)
6463

65-
# Additive problems
66-
println("additive problems")
67-
prob.p .= padd;
68-
sol = @test_nowarn solve(prob,SRA(),dt=0.01)
69-
@test sol.u[end] != zeros(1)
70-
sol = @test_nowarn solve(prob,SRA1(),dt=0.01)
71-
@test sol.u[end] != zeros(1)
72-
sol = @test_nowarn solve(prob,SRA2(),dt=0.01)
73-
@test sol.u[end] != zeros(1)
74-
sol = @test_nowarn solve(prob,SRA3(),dt=0.01)
75-
@test sol.u[end] != zeros(1)
76-
sol = @test_nowarn solve(prob,SOSRA(),dt=0.01)
77-
@test sol.u[end] != zeros(1)
78-
sol = @test_nowarn solve(prob,SOSRA2(),dt=0.01)
79-
@test sol.u[end] != zeros(1)
80-
# @test_nowarn solve(prob,SKenCarp(),dt=0.01) # Not working
81-
82-
# Test SROCK methods
83-
println("SROCK methods")
84-
prob.p .= pmul;
85-
sol = @test_nowarn solve(prob,SROCK1(),dt=0.01)
86-
@test sol.u[end] != zeros(1)
87-
sol = @test_nowarn solve(prob,SROCK1(interpretation=:Stratonovich),dt=0.01)
88-
@test sol.u[end] != zeros(1)
89-
sol = @test_nowarn solve(prob,SROCKEM(),dt=0.01)
90-
@test sol.u[end] != zeros(1)
91-
sol = @test_nowarn solve(prob,SROCKEM(strong_order_1=false),dt=0.01)
92-
@test sol.u[end] != zeros(1)
93-
sol = @test_nowarn solve(prob,SROCK2(),dt=0.01)
94-
@test sol.u[end] != zeros(1)
95-
sol = @test_nowarn solve(prob,SKSROCK(),dt=0.01)
96-
@test sol.u[end] != zeros(1)
97-
sol = @test_nowarn solve(prob,SKSROCK(;post_processing=true),dt=0.01)
98-
@test sol.u[end] != zeros(1)
99-
sol = @test_nowarn solve(prob,TangXiaoSROCK2(),dt=0.01)
100-
@test sol.u[end] != zeros(1)
101-
for i in 1:5
102-
sol = @test_nowarn solve(prob,TangXiaoSROCK2(version_num=i),dt=0.01)
103-
@test sol.u[end] != zeros(1)
104-
end
64+
# Additive problems
65+
println("additive problems")
66+
prob.p .= padd;
67+
sol = @test_nowarn solve(prob,SRA(),dt=0.01)
68+
@test sol.u[end] != zeros(1)
69+
sol = @test_nowarn solve(prob,SRA1(),dt=0.01)
70+
@test sol.u[end] != zeros(1)
71+
sol = @test_nowarn solve(prob,SRA2(),dt=0.01)
72+
@test sol.u[end] != zeros(1)
73+
sol = @test_nowarn solve(prob,SRA3(),dt=0.01)
74+
@test sol.u[end] != zeros(1)
75+
sol = @test_nowarn solve(prob,SOSRA(),dt=0.01)
76+
@test sol.u[end] != zeros(1)
77+
sol = @test_nowarn solve(prob,SOSRA2(),dt=0.01)
78+
@test sol.u[end] != zeros(1)
79+
# @test_nowarn solve(prob,SKenCarp(),dt=0.01) # Not working
10580

106-
# Test Implicit methods
107-
println("implicit methods")
108-
sol = @test_nowarn solve(prob,ImplicitEM(),dt=0.01)
109-
@test sol.u[end] != zeros(1)
110-
sol = @test_nowarn solve(prob,ImplicitEM(symplectic=true, theta = 1/2),dt=0.01)
111-
@test sol.u[end] != zeros(1)
112-
sol = @test_nowarn solve(prob,ImplicitEulerHeun(),dt=0.01)
113-
@test sol.u[end] != zeros(1)
114-
sol = @test_nowarn solve(prob,ImplicitEulerHeun(symplectic=true, theta = 1/2),dt=0.01)
115-
@test sol.u[end] != zeros(1)
116-
sol = @test_nowarn solve(prob,ImplicitRKMil(),dt=0.01)
117-
@test sol.u[end] != zeros(1)
118-
sol = @test_nowarn solve(prob,ImplicitRKMil(symplectic=true, theta = 1/2),dt=0.01)
119-
@test sol.u[end] != zeros(1)
120-
sol = @test_nowarn solve(prob,ImplicitRKMil(interpretation=:Stratonovich, symplectic = true, theta = 1/2),dt=0.01)
121-
@test sol.u[end] != zeros(1)
122-
sol = @test_nowarn solve(prob,ISSEM(),dt=0.01)
123-
@test sol.u[end] != zeros(1)
124-
sol = @test_nowarn solve(prob,ISSEM(symplectic=true, theta = 1/2),dt=0.01)
125-
@test sol.u[end] != zeros(1)
126-
sol = @test_nowarn solve(prob,ISSEulerHeun(),dt=0.01)
127-
@test sol.u[end] != zeros(1)
128-
sol = @test_nowarn solve(prob,ISSEulerHeun(symplectic=true, theta = 1/2),dt=0.01)
129-
@test sol.u[end] != zeros(1)
130-
sol = @test_nowarn solve(prob,SKenCarp(),dt=0.01)
81+
# Test SROCK methods
82+
println("SROCK methods")
83+
prob.p .= pmul;
84+
sol = @test_nowarn solve(prob,SROCK1(),dt=0.01)
85+
@test sol.u[end] != zeros(1)
86+
sol = @test_nowarn solve(prob,SROCK1(interpretation=:Stratonovich),dt=0.01)
87+
@test sol.u[end] != zeros(1)
88+
sol = @test_nowarn solve(prob,SROCKEM(),dt=0.01)
89+
@test sol.u[end] != zeros(1)
90+
sol = @test_nowarn solve(prob,SROCKEM(strong_order_1=false),dt=0.01)
91+
@test sol.u[end] != zeros(1)
92+
sol = @test_nowarn solve(prob,SROCK2(),dt=0.01)
93+
@test sol.u[end] != zeros(1)
94+
sol = @test_nowarn solve(prob,SKSROCK(),dt=0.01)
95+
@test sol.u[end] != zeros(1)
96+
sol = @test_nowarn solve(prob,SKSROCK(;post_processing=true),dt=0.01)
97+
@test sol.u[end] != zeros(1)
98+
sol = @test_nowarn solve(prob,TangXiaoSROCK2(),dt=0.01)
99+
@test sol.u[end] != zeros(1)
100+
for i in 1:5
101+
sol = @test_nowarn solve(prob,TangXiaoSROCK2(version_num=i),dt=0.01)
131102
@test sol.u[end] != zeros(1)
132103
end
104+
105+
# Test Implicit methods
106+
println("implicit methods")
107+
sol = @test_nowarn solve(prob,ImplicitEM(),dt=0.01)
108+
@test sol.u[end] != zeros(1)
109+
sol = @test_nowarn solve(prob,ImplicitEM(symplectic=true, theta = 1/2),dt=0.01)
110+
@test sol.u[end] != zeros(1)
111+
sol = @test_nowarn solve(prob,ImplicitEulerHeun(),dt=0.01)
112+
@test sol.u[end] != zeros(1)
113+
sol = @test_nowarn solve(prob,ImplicitEulerHeun(symplectic=true, theta = 1/2),dt=0.01)
114+
@test sol.u[end] != zeros(1)
115+
sol = @test_nowarn solve(prob,ImplicitRKMil(),dt=0.01)
116+
@test sol.u[end] != zeros(1)
117+
sol = @test_nowarn solve(prob,ImplicitRKMil(symplectic=true, theta = 1/2),dt=0.01)
118+
@test sol.u[end] != zeros(1)
119+
sol = @test_nowarn solve(prob,ImplicitRKMil(interpretation=:Stratonovich, symplectic = true, theta = 1/2),dt=0.01)
120+
@test sol.u[end] != zeros(1)
121+
sol = @test_nowarn solve(prob,ISSEM(),dt=0.01)
122+
@test sol.u[end] != zeros(1)
123+
sol = @test_nowarn solve(prob,ISSEM(symplectic=true, theta = 1/2),dt=0.01)
124+
@test sol.u[end] != zeros(1)
125+
sol = @test_nowarn solve(prob,ISSEulerHeun(),dt=0.01)
126+
@test sol.u[end] != zeros(1)
127+
sol = @test_nowarn solve(prob,ISSEulerHeun(symplectic=true, theta = 1/2),dt=0.01)
128+
@test sol.u[end] != zeros(1)
129+
sol = @test_nowarn solve(prob,SKenCarp(),dt=0.01)
130+
@test sol.u[end] != zeros(1)

0 commit comments

Comments
 (0)