Skip to content

Commit a306b52

Browse files
fix up silly change and add more tests
1 parent f5c1cd2 commit a306b52

9 files changed

+56
-14
lines changed

src/caches/basic_method_caches.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ du_cache(c::EMCache) = (c.rtmp1,c.rtmp2)
1414
alg_cache(alg::EM,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltypeNoUnits,uBottomEltype,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = EMConstantCache()
1515

1616
function alg_cache(alg::EM,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltypeNoUnits,uBottomEltype,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
17-
tmp = zeros(ΔW); rtmp1 = zeros(rate_prototype);
17+
tmp = zeros(u); rtmp1 = zeros(rate_prototype);
1818
rtmp2 = zeros(noise_rate_prototype)
1919
if is_diagonal_noise(prob)
2020
rtmp3 = rtmp2
@@ -40,7 +40,7 @@ du_cache(c::SplitEMCache) = (c.rtmp1,c.rtmp2)
4040
alg_cache(alg::SplitEM,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltypeNoUnits,uBottomEltype,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = SplitEMConstantCache()
4141

4242
function alg_cache(alg::SplitEM,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltypeNoUnits,uBottomEltype,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
43-
tmp = zeros(ΔW); rtmp1 = zeros(rate_prototype);
43+
tmp = zeros(u); rtmp1 = zeros(rate_prototype);
4444
rtmp2 = zeros(noise_rate_prototype)
4545
if is_diagonal_noise(prob)
4646
rtmp3 = rtmp2
@@ -68,7 +68,7 @@ du_cache(c::EulerHeunCache) = (c.rtmp1,c.rtmp2,c.rtmp3,c.rtmp4)
6868
alg_cache(alg::EulerHeun,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltypeNoUnits,uBottomEltype,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = EulerHeunConstantCache()
6969

7070
function alg_cache(alg::EulerHeun,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltypeNoUnits,uBottomEltype,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
71-
tmp = zeros(ΔW); ftmp1 = zeros(rate_prototype); ftmp2 = zeros(rate_prototype)
71+
tmp = zeros(u); ftmp1 = zeros(rate_prototype); ftmp2 = zeros(rate_prototype)
7272
nrtmp = zeros(rate_prototype)
7373
gtmp1 = zeros(noise_rate_prototype); gtmp2 = zeros(noise_rate_prototype)
7474
EulerHeunCache(u,uprev,tmp,ftmp1,ftmp2,nrtmp,gtmp1,gtmp2)
@@ -88,7 +88,7 @@ du_cache(c::RandomEMCache) = (c.rtmp1,c.rtmp2)
8888
alg_cache(alg::RandomEM,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltypeNoUnits,uBottomEltype,tTypeNoUnits,uprev,f,t,::Type{Val{false}}) = RandomEMConstantCache()
8989

9090
function alg_cache(alg::RandomEM,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltypeNoUnits,uBottomEltype,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
91-
tmp = zeros(ΔW); rtmp = zeros(rate_prototype)
91+
tmp = zeros(u); rtmp = zeros(rate_prototype)
9292
RandomEMCache(u,uprev,tmp,rtmp)
9393
end
9494

@@ -110,7 +110,7 @@ alg_cache(alg::RKMil,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltyp
110110

111111
function alg_cache(alg::RKMil,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltypeNoUnits,uBottomEltype,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
112112
du1 = zeros(rate_prototype); du2 = zeros(rate_prototype)
113-
K = zeros(rate_prototype); tmp = zeros(ΔW); L = zeros(rate_prototype)
113+
K = zeros(rate_prototype); tmp = zeros(u); L = zeros(rate_prototype)
114114
RKMilCache(u,uprev,du1,du2,K,tmp,L)
115115
end
116116

src/caches/implicit_split_step_caches.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ function alg_cache(alg::ISSEM,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototy
3232
J = zeros(uEltypeNoUnits,length(u),length(u)) # uEltype?
3333
W = zeros(J)
3434
z = zeros(u)
35-
dz = zeros(u); tmp = zeros(ΔW); gtmp = zeros(noise_rate_prototype)
35+
dz = zeros(u); tmp = zeros(u); gtmp = zeros(noise_rate_prototype)
3636
fsalfirst = zeros(rate_prototype)
3737
k = zeros(rate_prototype)
3838

@@ -128,7 +128,7 @@ function alg_cache(alg::ISSEulerHeun,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_
128128
J = zeros(uEltypeNoUnits,length(u),length(u)) # uEltype?
129129
W = zeros(J)
130130
z = zeros(u)
131-
dz = zeros(u); tmp = zeros(ΔW); gtmp = zeros(noise_rate_prototype)
131+
dz = zeros(u); tmp = zeros(u); gtmp = zeros(noise_rate_prototype)
132132
fsalfirst = zeros(rate_prototype)
133133
k = zeros(rate_prototype)
134134

src/caches/kencarp_caches.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ function alg_cache(alg::SKenCarp,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prot
7878
dz = similar(u,indices(u))
7979
fsalfirst = zeros(rate_prototype)
8080
k = zeros(rate_prototype)
81-
tmp = zeros(ΔW); b = similar(u,indices(u));
81+
tmp = zeros(u); b = similar(u,indices(u));
8282
atmp = zeros(u,uEltypeNoUnits,indices(u))
8383

8484
if typeof(f) <: SplitFunction

src/caches/lamba_caches.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ alg_cache(alg::LambaEM,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uElt
1818

1919
function alg_cache(alg::LambaEM,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltypeNoUnits,uBottomEltype,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
2020
du1 = zeros(rate_prototype); du2 = zeros(rate_prototype)
21-
K = zeros(rate_prototype); tmp = zeros(ΔW);
21+
K = zeros(rate_prototype); tmp = zeros(u);
2222
L = zeros(noise_rate_prototype)
2323
gtmp = zeros(noise_rate_prototype)
2424
if is_diagonal_noise(prob)
@@ -49,7 +49,7 @@ alg_cache(alg::LambaEulerHeun,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototy
4949

5050
function alg_cache(alg::LambaEulerHeun,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltypeNoUnits,uBottomEltype,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
5151
du1 = zeros(rate_prototype); du2 = zeros(rate_prototype)
52-
K = zeros(rate_prototype); tmp = zeros(ΔW);
52+
K = zeros(rate_prototype); tmp = zeros(u);
5353
L = zeros(noise_rate_prototype)
5454
gtmp = zeros(noise_rate_prototype)
5555
if is_diagonal_noise(prob)

src/caches/predcorr_caches.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ struct PCEulerCache{uType,rateType,rateNoiseType,rateNoiseCollectionType} <: Sto
1111
end
1212

1313
function alg_cache(alg::PCEuler,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_prototype,uEltypeNoUnits,uBottomEltype,tTypeNoUnits,uprev,f,t,::Type{Val{true}})
14-
utmp = zeros(ΔW); ftmp = zeros(rate_prototype);
14+
utmp = zeros(u); ftmp = zeros(rate_prototype);
1515
gtmp = zeros(noise_rate_prototype)
1616
bbprimetmp = zeros(ftmp)
1717
if is_diagonal_noise(prob)

src/caches/sdirk_caches.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ function alg_cache(alg::ImplicitEM,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate_pr
3030
J = zeros(uEltypeNoUnits,length(u),length(u)) # uEltype?
3131
W = zeros(J)
3232
z = zeros(u)
33-
dz = zeros(u); tmp = zeros(ΔW); gtmp = zeros(noise_rate_prototype)
33+
dz = zeros(u); tmp = zeros(u); gtmp = zeros(noise_rate_prototype)
3434
fsalfirst = zeros(rate_prototype)
3535
k = zeros(rate_prototype)
3636

@@ -124,7 +124,7 @@ function alg_cache(alg::ImplicitEulerHeun,prob,u,ΔW,ΔZ,p,rate_prototype,noise_
124124
J = zeros(uEltypeNoUnits,length(u),length(u)) # uEltype?
125125
W = zeros(J)
126126
z = zeros(u)
127-
dz = zeros(u); tmp = zeros(ΔW); gtmp = zeros(noise_rate_prototype)
127+
dz = zeros(u); tmp = zeros(u); gtmp = zeros(noise_rate_prototype)
128128
fsalfirst = zeros(rate_prototype)
129129
k = zeros(rate_prototype)
130130

@@ -219,7 +219,7 @@ function alg_cache(alg::ImplicitRKMil,prob,u,ΔW,ΔZ,p,rate_prototype,noise_rate
219219
J = zeros(uEltypeNoUnits,length(u),length(u)) # uEltype?
220220
W = zeros(J)
221221
z = zeros(u)
222-
dz = zeros(u); tmp = zeros(ΔW); gtmp = zeros(noise_rate_prototype)
222+
dz = zeros(u); tmp = zeros(u); gtmp = zeros(noise_rate_prototype)
223223
fsalfirst = zeros(rate_prototype)
224224
k = zeros(rate_prototype)
225225

test/nondiagonal_tests.jl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,24 @@ simPCEuler = test_convergence(dts,probiip,PCEuler(ggprime),numMonte=numMonte)
9393
# ylabel("l2 error")
9494
# xlabel("dt")
9595
# legend()
96+
97+
f_morenoise = (du,u,p,t) -> du.=1.01u
98+
g_morenoise = function (du,u,p,t)
99+
du[1,1] = 0.3u[1]
100+
du[1,2] = 0.6u[1]
101+
du[1,3] = 0.9u[1]
102+
du[1,4] = 0.12u[2]
103+
du[2,1] = 1.2u[1]
104+
du[2,2] = 0.2u[2]
105+
du[2,3] = 0.3u[2]
106+
du[2,4] = 1.8u[2]
107+
end
108+
prob = SDEProblem(f_morenoise,g_morenoise,ones(2),(0.0,1.0),
109+
noise_rate_prototype=zeros(2,4))
110+
111+
sol =solve(prob,dt=1/2^(3),EM())
112+
sol =solve(prob,dt=1/2^(3),ISSEM())
113+
sol =solve(prob,dt=1/2^(3),ImplicitEM())
114+
sol =solve(prob,dt=1/2^(3),EulerHeun())
115+
sol =solve(prob,dt=1/2^(3),ImplicitEulerHeun())
116+
sol =solve(prob,dt=1/2^(3),ISSEulerHeun())

test/runtests.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ LONGER_TESTS && @time @testset "Weak Convergence Tests" begin include("weak_conv
3131
@time @testset "Events Tests" begin include("events_test.jl") end
3232
@time @testset "Cache Tests" begin include("cache_test.jl") end
3333
@time @testset "Element-wise Tolerances Tests" begin include("tolerances_tests.jl") end
34+
@time @testset "Zero'd Noise Tests" begin include("zerod_noise_test.jl") end
3435
#@time @testset "Scalar Tests" begin include("scalar_noise.jl") end # Fails because of bounds checks
3536

3637
#Adaptive SDE

test/zerod_noise_test.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using StochasticDiffEq, Base.Test
2+
3+
function f(du, u, p, t)
4+
du[1] = u[1]
5+
end
6+
function g(du, u, p, t)
7+
0.0
8+
end
9+
10+
u0 = [1.0]
11+
prob = SDEProblem{true}(f, g, u0, (0.0, 0.1))
12+
13+
sol_ito = solve(prob, RKMil{:Ito}())
14+
@test length(sol_ito) < 100
15+
16+
sol_strato = solve(prob, RKMil{:Stratonovich}(); dt=1e-2)
17+
@test length(sol_strato) < 100
18+
19+
sol_leh = solve(prob, LambaEulerHeun())
20+
@test length(sol_leh) < 100

0 commit comments

Comments
 (0)