|
69 | 69 |
|
70 | 70 | if typeof(cache) <: ISSEMConstantCache
|
71 | 71 | K = @.. uprev + dt * ftmp
|
72 |
| - utilde = @.. K + integrator.sqdt * L |
73 |
| - ggprime = (integrator.g(utilde, p, t) .- L) ./ (integrator.sqdt) |
74 | 72 | 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 |
76 | 81 | else
|
| 82 | + utilde = @.. K + integrator.sqdt * L |
| 83 | + ggprime = (integrator.g(utilde, p, t) .- L) ./ (integrator.sqdt) |
77 | 84 | En = ggprime .* (integrator.W.dW .^ 2 .- dt) ./ 2
|
78 | 85 | end
|
79 | 86 | elseif typeof(cache) <: ISSEulerHeunConstantCache
|
80 |
| - utilde = @.. uprev + L * integrator.sqdt |
81 |
| - ggprime = (integrator.g(utilde, p, t) .- L) ./ (integrator.sqdt) |
82 | 87 | 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 |
84 | 96 | else
|
| 97 | + utilde = @.. uprev + L * integrator.sqdt |
| 98 | + ggprime = (integrator.g(utilde, p, t) .- L) ./ (integrator.sqdt) |
85 | 99 | En = ggprime .* (integrator.W.dW .^ 2) ./ 2
|
86 | 100 | end
|
87 | 101 | end
|
|
0 commit comments