@@ -26,71 +26,29 @@ function perform_step!(integrator, cache::LowStorageRK2NCache, repeat_step = fal
2626 return _perform_step_iip! (integrator, cache, cache. tab)
2727end
2828
29- # 2C low storage methods
30- function initialize! (integrator, cache:: LowStorageRK2CConstantCache )
31- integrator. fsalfirst = integrator. f (integrator. uprev, integrator. p, integrator. t) # Pre-start fsal
29+ function initialize! (integrator, cache:: LowStorageRKTableau{:two_c} )
30+ integrator. fsalfirst = integrator. f (integrator. uprev, integrator. p, integrator. t)
3231 OrdinaryDiffEqCore. increment_nf! (integrator. stats, 1 )
3332 integrator. kshortsize = 1
3433 integrator. k = typeof (integrator. k)(undef, integrator. kshortsize)
35-
36- # Avoid undefined entries if k is an array of arrays
3734 integrator. fsallast = zero (integrator. fsalfirst)
3835 return integrator. k[1 ] = integrator. fsalfirst
3936end
4037
41- @muladd function perform_step! (
42- integrator, cache:: LowStorageRK2CConstantCache ,
43- repeat_step = false
44- )
45- (; t, dt, u, f, p) = integrator
46- (; A2end, B1, B2end, c2end) = cache
47-
48- # u1
49- k = integrator. fsalfirst = f (u, p, t)
50- integrator. k[1 ] = integrator. fsalfirst
51- OrdinaryDiffEqCore. increment_nf! (integrator. stats, 1 )
52- u = u + B1 * dt * k
53-
54- # other stages
55- for i in eachindex (A2end)
56- tmp = u + A2end[i] * dt * k
57- k = f (tmp, p, t + c2end[i] * dt)
58- OrdinaryDiffEqCore. increment_nf! (integrator. stats, 1 )
59- u = u + B2end[i] * dt * k
60- end
61-
62- integrator. u = u
38+ function perform_step! (integrator, cache:: LowStorageRKTableau{:two_c} , repeat_step = false )
39+ return _perform_step_oop! (integrator, cache)
6340end
6441
6542function initialize! (integrator, cache:: LowStorageRK2CCache )
66- (; k, fsalfirst) = cache
67-
6843 integrator. kshortsize = 1
6944 resize! (integrator. k, integrator. kshortsize)
7045 integrator. k[1 ] = integrator. fsalfirst
71- integrator. f (integrator. fsalfirst, integrator. uprev, integrator. p, integrator. t) # FSAL for interpolation
46+ integrator. f (integrator. fsalfirst, integrator. uprev, integrator. p, integrator. t)
7247 return OrdinaryDiffEqCore. increment_nf! (integrator. stats, 1 )
7348end
7449
75- @muladd function perform_step! (integrator, cache:: LowStorageRK2CCache , repeat_step = false )
76- (; t, dt, u, f, p) = integrator
77- (; k, fsalfirst, tmp, stage_limiter!, step_limiter!, thread) = cache
78- (; A2end, B1, B2end, c2end) = cache. tab
79-
80- # u1
81- @. . broadcast = false thread = thread k = integrator. fsalfirst
82- @. . broadcast = false thread = thread u = u + B1 * dt * k
83-
84- # other stages
85- for i in eachindex (A2end)
86- @. . broadcast = false thread = thread tmp = u + A2end[i] * dt * k
87- f (k, tmp, p, t + c2end[i] * dt)
88- OrdinaryDiffEqCore. increment_nf! (integrator. stats, 1 )
89- @. . broadcast = false thread = thread u = u + B2end[i] * dt * k
90- end
91- step_limiter! (u, integrator, p, t + dt)
92- f (k, u, p, t + dt)
93- OrdinaryDiffEqCore. increment_nf! (integrator. stats, 1 )
50+ function perform_step! (integrator, cache:: LowStorageRK2CCache , repeat_step = false )
51+ return _perform_step_iip! (integrator, cache, cache. tab)
9452end
9553
9654# 3S low storage methods
0 commit comments