|
174 | 174 | if alg_interpretation(integrator.alg) == :Ito
|
175 | 175 | utilde = K + L*integrator.sqdt
|
176 | 176 | ggprime = (integrator.g(utilde,p,t).-L)./(integrator.sqdt)
|
177 |
| - mil_correction = ggprime.*(W.dW.^2 .- dt)./2 |
| 177 | + mil_correction = ggprime.*(W.dW.^2 .- abs(dt))./2 |
178 | 178 | elseif alg_interpretation(integrator.alg) == :Stratonovich
|
179 | 179 | utilde = uprev + L*integrator.sqdt
|
180 | 180 | ggprime = (integrator.g(utilde,p,t).-L)./(integrator.sqdt)
|
|
183 | 183 | error("Alg interpretation invalid. Use either :Ito or :Stratonovich")
|
184 | 184 | end
|
185 | 185 | u = K+L.*W.dW+mil_correction
|
| 186 | + |
186 | 187 | if integrator.opts.adaptive
|
187 | 188 | du2 = integrator.f(K,p,t+dt)
|
188 | 189 | Ed = dt*(du2 - du1)/2
|
|
196 | 197 | integrator.u = u
|
197 | 198 | end
|
198 | 199 |
|
199 |
| -#= |
200 |
| -@muladd function perform_step!(integrator,cache::RKMilCache) |
201 |
| - @unpack du1,du2,K,tmp,L = cache |
202 |
| - @unpack t,dt,uprev,u,W,p,f = integrator |
203 |
| - integrator.f(du1,uprev,p,t) |
204 |
| - integrator.g(L,uprev,p,t) |
205 |
| - @.. K = uprev + dt * du1 |
206 |
| - @.. tmp = K + integrator.sqdt * L |
207 |
| - integrator.g(du2,tmp,p,t) |
208 |
| - if alg_interpretation(integrator.alg) == :Ito |
209 |
| - @.. tmp = (du2-L)/(2integrator.sqdt)*(W.dW^2 - dt) |
210 |
| - elseif alg_interpretation(integrator.alg) == :Stratonovich |
211 |
| - @.. tmp = (du2-L)/(2integrator.sqdt)*(W.dW^2) |
212 |
| - else |
213 |
| - error("Alg interpretation invalid. Use either :Ito or :Stratonovich") |
214 |
| - end |
215 |
| - @.. u = K+L*W.dW + tmp |
216 |
| - if integrator.opts.adaptive |
217 |
| - @.. tmp = (tmp)/(integrator.opts.abstol + max(integrator.opts.internalnorm(uprev,t),integrator.opts.internalnorm(u,t))*integrator.opts.reltol) |
218 |
| - integrator.EEst = integrator.opts.internalnorm(tmp,t) |
219 |
| - end |
220 |
| - integrator.u = u |
221 |
| -end |
222 |
| -=# |
223 |
| - |
224 | 200 | @muladd function perform_step!(integrator,cache::RKMilCache)
|
225 | 201 | @unpack du1,du2,K,tmp,L = cache
|
226 | 202 | @unpack t,dt,uprev,u,W,p,f = integrator
|
|
231 | 207 | if alg_interpretation(integrator.alg) == :Ito
|
232 | 208 | @.. tmp = K + integrator.sqdt * L
|
233 | 209 | integrator.g(du2,tmp,p,t)
|
234 |
| - @.. tmp = (du2-L)/(2integrator.sqdt)*(W.dW.^2 - dt) |
| 210 | + @.. tmp = (du2-L)/(2integrator.sqdt)*(W.dW.^2 - abs(dt)) |
235 | 211 | elseif alg_interpretation(integrator.alg) == :Stratonovich
|
236 | 212 | @.. tmp = uprev + integrator.sqdt * L
|
237 | 213 | integrator.g(du2,tmp,p,t)
|
|
0 commit comments