Skip to content

Commit 1a45b42

Browse files
committed
handle non-diagonal noise
1 parent cb669ab commit 1a45b42

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

src/perform_step/implicit_split_step.jl

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,19 +69,33 @@
6969

7070
if typeof(cache) <: ISSEMConstantCache
7171
K = @.. uprev + dt * ftmp
72-
utilde = @.. K + integrator.sqdt * L
73-
ggprime = (integrator.g(utilde, p, t) .- L) ./ (integrator.sqdt)
7472
if !is_diagonal_noise(integrator.sol.prob)
75-
En = ggprime * (integrator.W.dW .^ 2 .- dt) ./ 2
73+
g_sized = norm(L, 2)
74+
utilde = @.. K + integrator.sqdt * g_sized
75+
gtmp2 = integrator.g(utilde, p, t)
76+
g_sized2 = norm(gtmp2, 2)
77+
ggprime = (g_sized2 - g_sized) / (integrator.sqdt)
78+
dW_cache = integrator.W.dW .^ 2 .- dt
79+
diff_tmp = integrator.opts.internalnorm(dW_cache, t)
80+
En = ggprime * diff_tmp / 2
7681
else
82+
utilde = @.. K + integrator.sqdt * L
83+
ggprime = (integrator.g(utilde, p, t) .- L) ./ (integrator.sqdt)
7784
En = ggprime .* (integrator.W.dW .^ 2 .- dt) ./ 2
7885
end
7986
elseif typeof(cache) <: ISSEulerHeunConstantCache
80-
utilde = @.. uprev + L * integrator.sqdt
81-
ggprime = (integrator.g(utilde, p, t) .- L) ./ (integrator.sqdt)
8287
if !is_diagonal_noise(integrator.sol.prob)
83-
En = ggprime * (integrator.W.dW .^ 2) ./ 2
88+
g_sized = norm(L, 2)
89+
utilde = @.. uprev + g_sized * integrator.sqdt
90+
gtmp2 = integrator.g(utilde, p, t)
91+
g_sized2 = norm(gtmp2, 2)
92+
ggprime = (g_sized2 - g_sized) / (integrator.sqdt)
93+
dW_cache = integrator.W.dW .^ 2
94+
diff_tmp = integrator.opts.internalnorm(dW_cache, t)
95+
En = ggprime * diff_tmp / 2
8496
else
97+
utilde = @.. uprev + L * integrator.sqdt
98+
ggprime = (integrator.g(utilde, p, t) .- L) ./ (integrator.sqdt)
8599
En = ggprime .* (integrator.W.dW .^ 2) ./ 2
86100
end
87101
end

0 commit comments

Comments
 (0)