|
1 | 1 | @inline function initialize!(integrator,cache::LawsonEulerConstantCache,f=integrator.f)
|
2 | 2 | integrator.kshortsize = 2
|
3 | 3 | integrator.k = eltype(integrator.sol.k)(integrator.kshortsize)
|
4 |
| - rtmp = f[2](integrator.t,integrator.uprev) |
| 4 | + rtmp = f[2] |
5 | 5 | integrator.fsalfirst = rtmp # Pre-start fsal
|
6 | 6 | end
|
7 | 7 |
|
8 | 8 | @inline function perform_step!(integrator,cache::LawsonEulerConstantCache,f=integrator.f)
|
9 | 9 | @unpack t,dt,uprev,u,k = integrator
|
10 | 10 | rtmp = integrator.fsalfirst
|
11 |
| - A = f[1](t,u) |
| 11 | + A = f[1] |
12 | 12 | u = expm(dt*A)*(uprev + dt*rtmp)
|
13 | 13 | rtmp = f[2](t+dt,u)
|
14 | 14 | k = A*u + rtmp # For the interpolation, needs k at the updated point
|
|
26 | 26 | integrator.k = eltype(integrator.sol.k)(integrator.kshortsize)
|
27 | 27 | integrator.k[1] = fsalfirst # this is wrong, since it's just rtmp. Should fsal this value though
|
28 | 28 | integrator.k[2] = k
|
29 |
| - A = f[1](integrator.t,integrator.u,rtmp) |
| 29 | + A = f[1] |
30 | 30 | A_mul_B!(cache.k,A,integrator.u)
|
31 | 31 | f[2](integrator.t,integrator.uprev,rtmp) # For the interpolation, needs k at the updated point
|
32 | 32 | integrator.fsalfirst .= cache.k .+ rtmp
|
|
35 | 35 | @inline function perform_step!(integrator,cache::LawsonEulerCache,f=integrator.f)
|
36 | 36 | @unpack t,dt,uprev,u = integrator
|
37 | 37 | @unpack k,rtmp,tmp = cache
|
38 |
| - A = f[1](t,u,integrator.fsalfirst) |
| 38 | + A = f[1] |
39 | 39 | M = expm(dt*A)
|
40 | 40 | tmp .= uprev .+ dt.*integrator.fsalfirst
|
41 | 41 | A_mul_B!(u,M,tmp)
|
|
55 | 55 | @inline function perform_step!(integrator,cache::NorsettEulerConstantCache,f=integrator.f)
|
56 | 56 | @unpack t,dt,uprev,u,k = integrator
|
57 | 57 | rtmp = integrator.fsalfirst
|
58 |
| - A = f[1](t,u) |
| 58 | + A = f[1] |
59 | 59 | u = uprev + ((expm(dt*A)-I)/A)*(A*uprev + rtmp)
|
60 | 60 | rtmp = f[2](t+dt,u)
|
61 | 61 | k = A*u + rtmp # For the interpolation, needs k at the updated point
|
|
82 | 82 | @inline function perform_step!(integrator,cache::NorsettEulerCache,f=integrator.f)
|
83 | 83 | @unpack t,dt,uprev,u = integrator
|
84 | 84 | @unpack k,rtmp,tmp = cache
|
85 |
| - A = f[1](t,u,integrator.fsalfirst) |
| 85 | + A = f[1] |
86 | 86 | M = ((expm(dt*A)-I)/A)
|
87 | 87 | A_mul_B!(tmp,A,uprev)
|
88 | 88 | tmp .+= rtmp
|
|
0 commit comments