Skip to content

Commit 8915570

Browse files
committed
add extensive scalar noise test set for different solvers
1 parent 6df5ec2 commit 8915570

File tree

7 files changed

+185
-48
lines changed

7 files changed

+185
-48
lines changed

Project.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,12 @@ DiffEqDevTools = "f3b72e0c-5b89-59e1-b016-84e28bfd966d"
6060
DiffEqOperators = "9fdde737-9c7f-55bf-ade8-46b3f136cc48"
6161
DiffEqProblemLibrary = "a077e3f3-b75c-5d7f-a0c6-6bc4c8ec64a9"
6262
LinearSolve = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae"
63+
ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
6364
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
6465
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
6566
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
6667
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
6768
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
6869

6970
[targets]
70-
test = ["DiffEqCallbacks", "DiffEqDevTools", "DiffEqOperators", "DiffEqProblemLibrary", "LinearSolve", "Pkg", "SafeTestsets", "SparseArrays", "Statistics", "Test"]
71+
test = ["DiffEqCallbacks", "DiffEqDevTools", "DiffEqOperators", "DiffEqProblemLibrary", "LinearSolve", "ModelingToolkit", "Pkg", "SafeTestsets", "SparseArrays", "Statistics", "Test"]

src/perform_step/SROCK_perform_step.jl

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
alg = unwrap_alg(integrator, true)
55
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
6-
cache.mdeg = Int(floor(sqrt(2*dt*integrator.opts.internalnorm(integrator.eigen_est,t))+1)) # this is the spectral radius estimate to choose optimal stage
6+
cache.mdeg = Int(floor(sqrt(2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t))+1)) # this is the spectral radius estimate to choose optimal stage
77
choose_deg!(integrator,cache)
88

99
mdeg = cache.mdeg
@@ -61,14 +61,14 @@
6161
elseif (i == mdeg) && alg_interpretation(integrator.alg) == :Ito
6262
if typeof(W.dW) <: Number
6363
gₘ₋₂ = integrator.g(uᵢ₋₁,p,tᵢ₋₁)
64-
uᵢ₋₂ = uᵢ₋₁ + sqrt(dt)*gₘ₋₂
64+
uᵢ₋₂ = uᵢ₋₁ + sqrt(abs(dt))*gₘ₋₂
6565
gₘ₋₁ = integrator.g(uᵢ₋₂,p,tᵢ₋₁)
66-
u += gₘ₋₂*W.dW + 1/(2*sqrt(dt))*(gₘ₋₁ - gₘ₋₂)*(W.dW^2 - dt)
66+
u += gₘ₋₂*W.dW + 1/(2*sqrt(abs(dt)))*(gₘ₋₁ - gₘ₋₂)*(W.dW^2 - abs(dt))
6767
elseif is_diagonal_noise(integrator.sol.prob)
6868
gₘ₋₂ = integrator.g(uᵢ₋₁,p,tᵢ₋₁)
69-
uᵢ₋₂ .= uᵢ₋₁ .+ sqrt(dt) .* gₘ₋₂
69+
uᵢ₋₂ .= uᵢ₋₁ .+ sqrt(abs(dt)) .* gₘ₋₂
7070
gₘ₋₁ = integrator.g(uᵢ₋₂,p,tᵢ₋₁)
71-
u .+= gₘ₋₂ .* W.dW .+ (1/(2*sqrt(dt))) .* (gₘ₋₁ .- gₘ₋₂) .* (W.dW .^ 2 .- dt)
71+
u .+= gₘ₋₂ .* W.dW .+ (1/(2*sqrt(abs(dt)))) .* (gₘ₋₁ .- gₘ₋₂) .* (W.dW .^ 2 .- abs(dt))
7272
else
7373
gₘ₋₂ = integrator.g(uᵢ₋₁,p,tᵢ₋₁)
7474
u += gₘ₋₂*W.dW
@@ -94,7 +94,7 @@ end
9494
ccache = cache.constantcache
9595
alg = unwrap_alg(integrator, true)
9696
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
97-
ccache.mdeg = Int(floor(sqrt(2*dt*integrator.opts.internalnorm(integrator.eigen_est,t))+1)) # this is the spectral radius estimate to choose optimal stage
97+
ccache.mdeg = Int(floor(sqrt(2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t))+1)) # this is the spectral radius estimate to choose optimal stage
9898
choose_deg!(integrator,cache)
9999

100100
mdeg = ccache.mdeg
@@ -155,9 +155,9 @@ end
155155
elseif (i == mdeg) && alg_interpretation(integrator.alg) == :Ito
156156
if typeof(W.dW) <: Number || is_diagonal_noise(integrator.sol.prob)
157157
integrator.g(gₘ₋₂,uᵢ₋₁,p,tᵢ₋₁)
158-
@.. uᵢ₋₂ = uᵢ₋₁ + sqrt(dt)*gₘ₋₂
158+
@.. uᵢ₋₂ = uᵢ₋₁ + sqrt(abs(dt))*gₘ₋₂
159159
integrator.g(gₘ₋₁,uᵢ₋₂,p,tᵢ₋₁)
160-
@.. u += gₘ₋₂*W.dW + 1/(2*sqrt(dt))*(gₘ₋₁ - gₘ₋₂)*(W.dW^2 - dt)
160+
@.. u += gₘ₋₂*W.dW + 1/(2*sqrt(abs(dt)))*(gₘ₋₁ - gₘ₋₂)*(W.dW^2 - abs(dt))
161161
else
162162
integrator.g(gₘ₋₂,uᵢ₋₁,p,tᵢ₋₁)
163163
mul!(uᵢ₋₁,gₘ₋₂,W.dW)
@@ -187,7 +187,7 @@ end
187187

188188
alg = unwrap_alg(integrator, true)
189189
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
190-
cache.mdeg = Int(floor(sqrt((2*dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))
190+
cache.mdeg = Int(floor(sqrt((2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))
191191
cache.mdeg = max(3,min(cache.mdeg,200))-2
192192
choose_deg!(integrator,cache)
193193

@@ -319,7 +319,7 @@ end
319319

320320
alg = unwrap_alg(integrator, true)
321321
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
322-
ccache.mdeg = Int(floor(sqrt((2*dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))
322+
ccache.mdeg = Int(floor(sqrt((2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))
323323
ccache.mdeg = max(3,min(ccache.mdeg,200))-2
324324
choose_deg!(integrator,cache)
325325

@@ -461,9 +461,9 @@ end
461461
alg = unwrap_alg(integrator, true)
462462
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
463463
if integrator.alg.strong_order_1
464-
cache.mdeg = Int(floor(sqrt(dt*integrator.opts.internalnorm(integrator.eigen_est,t)/0.19)+1))
464+
cache.mdeg = Int(floor(sqrt(abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)/0.19)+1))
465465
else
466-
cache.mdeg = Int(floor(sqrt(dt*integrator.opts.internalnorm(integrator.eigen_est,t)/0.33)+1))
466+
cache.mdeg = Int(floor(sqrt(abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)/0.33)+1))
467467
end
468468
cache.mdeg = max(3,min(cache.mdeg,200))
469469
choose_deg!(integrator,cache)
@@ -552,9 +552,9 @@ end
552552
alg = unwrap_alg(integrator, true)
553553
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
554554
if integrator.alg.strong_order_1
555-
ccache.mdeg = Int(floor(sqrt(dt*integrator.opts.internalnorm(integrator.eigen_est,t)/0.19)+1))
555+
ccache.mdeg = Int(floor(sqrt(abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)/0.19)+1))
556556
else
557-
ccache.mdeg = Int(floor(sqrt(dt*integrator.opts.internalnorm(integrator.eigen_est,t)/0.33)+1))
557+
ccache.mdeg = Int(floor(sqrt(abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)/0.33)+1))
558558
end
559559
ccache.mdeg = max(3,min(ccache.mdeg,200))
560560
choose_deg!(integrator,cache)
@@ -643,7 +643,7 @@ end
643643
alg = unwrap_alg(integrator, true)
644644
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
645645
η = oftype(t,0.05)
646-
mdeg = Int(floor(sqrt((dt*integrator.opts.internalnorm(integrator.eigen_est,t) + 1.5)/(2-η*4/3))+1))
646+
mdeg = Int(floor(sqrt((abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t) + 1.5)/(2-η*4/3))+1))
647647
mdeg = max(3,min(mdeg,200))
648648

649649
ω₀ = 1 +/(mdeg^2))
@@ -729,7 +729,7 @@ end
729729
alg = unwrap_alg(integrator, true)
730730
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
731731
η = oftype(t,0.05)
732-
mdeg = Int(floor(sqrt((dt*integrator.opts.internalnorm(integrator.eigen_est,t) + 1.5)/(2-η*4/3))+1))
732+
mdeg = Int(floor(sqrt((abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t) + 1.5)/(2-η*4/3))+1))
733733
mdeg = max(3,min(mdeg,200))
734734

735735
ω₀ = 1 +/(mdeg^2))
@@ -819,8 +819,8 @@ end
819819

820820
alg = unwrap_alg(integrator, true)
821821
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
822-
(integrator.alg.version_num <= 2) && (cache.mdeg = Int(floor(sqrt((dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)))
823-
(integrator.alg.version_num > 2) && (cache.mdeg = Int(floor(sqrt((dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.611)+1)))
822+
(integrator.alg.version_num <= 2) && (cache.mdeg = Int(floor(sqrt((abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)))
823+
(integrator.alg.version_num > 2) && (cache.mdeg = Int(floor(sqrt((abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.611)+1)))
824824

825825
cache.mdeg = max(4,min(cache.mdeg,200))-2
826826
choose_deg!(integrator,cache)
@@ -974,8 +974,8 @@ end
974974

975975
alg = unwrap_alg(integrator, true)
976976
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
977-
(integrator.alg.version_num <= 2) && (ccache.mdeg = Int(floor(sqrt((dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)))
978-
(integrator.alg.version_num > 2) && (ccache.mdeg = Int(floor(sqrt((dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.611)+1)))
977+
(integrator.alg.version_num <= 2) && (ccache.mdeg = Int(floor(sqrt((abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1)))
978+
(integrator.alg.version_num > 2) && (ccache.mdeg = Int(floor(sqrt((abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.611)+1)))
979979
ccache.mdeg = max(4,min(ccache.mdeg,200))-2
980980
choose_deg!(integrator,cache)
981981

@@ -1109,7 +1109,7 @@ end
11091109

11101110
alg = unwrap_alg(integrator, true)
11111111
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
1112-
cache.mdeg = Int(floor(sqrt((2*dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))
1112+
cache.mdeg = Int(floor(sqrt((2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))
11131113
cache.mdeg = max(6,min(cache.mdeg,200))-2
11141114
choose_deg!(integrator,cache)
11151115

@@ -1298,7 +1298,7 @@ end
12981298

12991299
alg = unwrap_alg(integrator, true)
13001300
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
1301-
ccache.mdeg = Int(floor(sqrt((2*dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))
1301+
ccache.mdeg = Int(floor(sqrt((2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))
13021302
ccache.mdeg = max(6,min(ccache.mdeg,200))-2
13031303
choose_deg!(integrator,cache)
13041304

@@ -1511,7 +1511,7 @@ end
15111511

15121512
alg = unwrap_alg(integrator, true)
15131513
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
1514-
cache.mdeg = Int(floor(sqrt((2*dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))
1514+
cache.mdeg = Int(floor(sqrt((2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))
15151515
cache.mdeg = max(3,min(cache.mdeg,200))-2
15161516
choose_deg!(integrator,cache)
15171517

@@ -1597,7 +1597,7 @@ end
15971597

15981598
alg = unwrap_alg(integrator, true)
15991599
alg.eigen_est === nothing ? maxeig!(integrator, cache) : alg.eigen_est(integrator)
1600-
ccache.mdeg = Int(floor(sqrt((2*dt*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))
1600+
ccache.mdeg = Int(floor(sqrt((2*abs(dt)*integrator.opts.internalnorm(integrator.eigen_est,t)+1.5)/0.811)+1))
16011601
ccache.mdeg = max(3,min(ccache.mdeg,200))-2
16021602
choose_deg!(integrator,cache)
16031603

src/perform_step/explicit_3s_mil_methods.jl

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
k = integrator.g(u,p,t)
1717
tmp = u + k*integrator.sqdt
1818
k₁ = integrator.g(tmp,p,t)
19-
k₁ = (k₁ - k)/(integrator.sqdt)
19+
k₁ = (k₁ - k)/abs(integrator.sqdt)
2020
u = u .+ k .* W.dW .+ 0.5 .* (W.dW .^ 2) .* k₁
2121
integrator.u = u
2222
end
@@ -40,7 +40,7 @@ end
4040
integrator.g(k,u,p,t)
4141
@.. tmp = u + k*integrator.sqdt
4242
integrator.g(k₁,tmp,p,t)
43-
@.. k₁ = (k₁ - k)/(integrator.sqdt)
43+
@.. k₁ = (k₁ - k)/abs(integrator.sqdt)
4444
@.. u = u + k*W.dW + (W.dW^2/2)*k₁
4545
integrator.u = u
4646
end
@@ -62,7 +62,7 @@ end
6262
k = integrator.g(u,p,t)
6363
tmp = u + k*integrator.sqdt
6464
k₁ = integrator.g(tmp,p,t)
65-
k₁ = (k₁ - k)/integrator.sqdt
65+
k₁ = (k₁ - k)/abs(integrator.sqdt)
6666
u = u - (dt/2)*k₁
6767
integrator.u = u
6868
end
@@ -86,7 +86,7 @@ end
8686
integrator.g(k,u,p,t)
8787
@.. tmp = u + k*integrator.sqdt
8888
integrator.g(k₁,tmp,p,t)
89-
@.. k₁ = (k₁ - k)/integrator.sqdt
89+
@.. k₁ = (k₁ - k)/abs(integrator.sqdt)
9090
@.. u = u - (dt/2)*k₁
9191

9292
integrator.u = u
@@ -109,7 +109,7 @@ end
109109
k = integrator.g(u,p,t)
110110
tmp = u + k*integrator.sqdt
111111
k₁ = integrator.g(tmp,p,t)
112-
k₁ = (k₁ - k)/(integrator.sqdt)
112+
k₁ = (k₁ - k)/abs(integrator.sqdt)
113113
u = u - (dt/2)*k₁
114114
integrator.u = u
115115
end
@@ -133,7 +133,7 @@ end
133133
integrator.g(k,u,p,t)
134134
@.. tmp = u + k*integrator.sqdt
135135
integrator.g(k₁,tmp,p,t)
136-
@.. k₁ = (k₁ - k)/(integrator.sqdt)
136+
@.. k₁ = (k₁ - k)/abs(integrator.sqdt)
137137
@.. u = u - (dt/2)*k₁
138138
integrator.u = u
139139
end
@@ -155,7 +155,7 @@ end
155155
k = integrator.g(u,p,t)
156156
tmp = u + k*integrator.sqdt
157157
k₁ = integrator.g(tmp,p,t)
158-
k₁ = (k₁ - k)/(integrator.sqdt)
158+
k₁ = (k₁ - k)/abs(integrator.sqdt)
159159
u = u .+ k .* W.dW .+ 0.5 .* (W.dW .^ 2) .* k₁
160160
integrator.u = u
161161
end
@@ -179,7 +179,7 @@ end
179179
integrator.g(k,u,p,t)
180180
@.. tmp = u + k*integrator.sqdt
181181
integrator.g(k₁,tmp,p,t)
182-
@.. k₁ = (k₁ - k)/(integrator.sqdt)
182+
@.. k₁ = (k₁ - k)/abs(integrator.sqdt)
183183
@.. u = u + k*W.dW + (W.dW^2/2)*k₁
184184
integrator.u = u
185185
end
@@ -197,7 +197,7 @@ end
197197
k = integrator.g(u,p,t)
198198
tmp = u + k*integrator.sqdt
199199
k₁ = integrator.g(tmp,p,t)
200-
k₁ = (k₁ - k)/(integrator.sqdt)
200+
k₁ = (k₁ - k)/abs(integrator.sqdt)
201201
u = u .+ k .* W.dW .+ 0.5 .* (W.dW .^ 2) .* k₁
202202

203203
#stage 3
@@ -221,7 +221,7 @@ end
221221
integrator.g(k,u,p,t)
222222
@.. tmp = u + k*integrator.sqdt
223223
integrator.g(k₁,tmp,p,t)
224-
@.. k₁ = (k₁ - k)/(integrator.sqdt)
224+
@.. k₁ = (k₁ - k)/abs(integrator.sqdt)
225225
@.. u = u + k*W.dW + (W.dW^2/2)*k₁
226226

227227
#stage 3
@@ -243,7 +243,7 @@ end
243243
k = integrator.g(u,p,t)
244244
tmp = u + k*integrator.sqdt
245245
k₁ = integrator.g(tmp,p,t)
246-
k₁ = (k₁ - k)/integrator.sqdt
246+
k₁ = (k₁ - k)/abs(integrator.sqdt)
247247
u = u - (dt/2)*k₁
248248

249249
#stage 3
@@ -267,7 +267,7 @@ end
267267
integrator.g(k,u,p,t)
268268
@.. tmp = u + k*integrator.sqdt
269269
integrator.g(k₁,tmp,p,t)
270-
@.. k₁ = (k₁ - k)/integrator.sqdt
270+
@.. k₁ = (k₁ - k)/abs(integrator.sqdt)
271271
@.. u = u - (dt/2)*k₁
272272

273273
#stage 3

src/perform_step/low_order.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -240,9 +240,9 @@ end
240240
mil_correction = zero(u)
241241
if alg_interpretation(integrator.alg) == :Ito
242242
if typeof(dW) <: Number || is_diagonal_noise(integrator.sol.prob)
243-
J = J .- 1//2 .* dt
243+
J = J .- 1//2 .* abs(dt)
244244
else
245-
J -= 1//2 .* UniformScaling(dt)
245+
J -= 1//2 .* UniformScaling(abs(dt))
246246
end
247247
end
248248

@@ -308,9 +308,9 @@ end
308308
@.. mil_correction = zero(u)
309309
if alg_interpretation(integrator.alg) == :Ito
310310
if typeof(dW) <: Number || is_diagonal_noise(integrator.sol.prob)
311-
@.. J -= 1//2*dt
311+
@.. J -= 1 // 2 * abs(dt)
312312
else
313-
J -= 1//2 .* UniformScaling(dt)
313+
J -= 1//2 .* UniformScaling(abs(dt))
314314
end
315315
end
316316

@@ -362,9 +362,9 @@ end
362362

363363
if alg_interpretation(integrator.alg) == :Ito
364364
if typeof(dW) <: Number || is_diagonal_noise(integrator.sol.prob)
365-
J = J .- 1//2 .* dt
365+
J = J .- 1//2 .* abs(dt)
366366
else
367-
J -= 1//2 .* UniformScaling(dt)
367+
J -= 1//2 .* UniformScaling(abs(dt))
368368
end
369369
end
370370

@@ -432,9 +432,9 @@ end
432432

433433
if alg_interpretation(integrator.alg) == :Ito
434434
if typeof(dW) <: Number || is_diagonal_noise(integrator.sol.prob)
435-
@.. J -= 1//2*dt
435+
@.. J -= 1 // 2 * abs(dt)
436436
else
437-
J -= 1//2 .* UniformScaling(dt)
437+
J -= 1 // 2 .* UniformScaling(abs(dt))
438438
end
439439
end
440440

src/perform_step/sdirk.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
K = @.. uprev + dt * ftmp
3030
utilde = K + L*integrator.sqdt
3131
ggprime = (integrator.g(utilde,p,t).-L)./(integrator.sqdt)
32-
mil_correction = ggprime .* (integrator.W.dW.^2 .- dt)./2
32+
mil_correction = ggprime .* (integrator.W.dW.^2 .- abs(dt))./2
3333
gtmp += mil_correction
3434
elseif alg_interpretation(alg) == :Stratonovich ||
3535
typeof(cache) <: ImplicitEulerHeunConstantCache
@@ -158,7 +158,7 @@ end
158158
@.. z = uprev + dt * tmp + integrator.sqdt * gtmp
159159
integrator.g(gtmp3,z,p,t)
160160
@.. gtmp3 = (gtmp3-gtmp)/(integrator.sqdt) # ggprime approximation
161-
@.. gtmp2 += gtmp3*(dW.^2 - dt)/2
161+
@.. gtmp2 += gtmp3*(dW.^2 - abs(dt))/2
162162
elseif alg_interpretation(alg) == :Stratonovich
163163
@.. z = uprev + integrator.sqdt * gtmp
164164
integrator.g(gtmp3,z,p,t)

0 commit comments

Comments
 (0)