@@ -2209,3 +2209,65 @@ function perform_step!(integrator, cache::Alshina6Cache, repeat_step = false)
22092209 integrator. fsallast = k7
22102210 return nothing
22112211end
2212+
2213+ function initialize! (integrator, cache:: Ralston4ConstantCache )
2214+ integrator. kshortsize = 2
2215+ integrator. k = typeof (integrator. k)(undef, integrator. kshortsize)
2216+ integrator. fsalfirst = integrator. f (integrator. uprev, integrator. p, integrator. t)
2217+ OrdinaryDiffEqCore. increment_nf! (integrator. stats, 1 )
2218+ integrator. fsallast = zero (integrator. fsalfirst)
2219+ integrator. k[1 ] = integrator. fsalfirst
2220+ return integrator. k[2 ] = integrator. fsallast
2221+ end
2222+
2223+ @muladd function perform_step! (
2224+ integrator, cache:: Ralston4ConstantCache , repeat_step = false
2225+ )
2226+ (; t, dt, uprev, u, f, p) = integrator
2227+ (; a21, a31, a32, a41, a42, a43, c2, c3, b1, b2, b3, b4) = cache
2228+ k1 = integrator. fsalfirst
2229+ k2 = f (uprev + dt * a21 * k1, p, t + c2 * dt)
2230+ k3 = f (uprev + dt * (a31 * k1 + a32 * k2), p, t + c3 * dt)
2231+ k4 = f (uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3), p, t + dt)
2232+ u = uprev + dt * (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4)
2233+ integrator. fsallast = f (u, p, t + dt)
2234+ OrdinaryDiffEqCore. increment_nf! (integrator. stats, 4 )
2235+ integrator. k[1 ] = integrator. fsalfirst
2236+ integrator. k[2 ] = integrator. fsallast
2237+ integrator. u = u
2238+ end
2239+
2240+ get_fsalfirstlast (cache:: Ralston4Cache , u) = (cache. fsalfirst, cache. k)
2241+ function initialize! (integrator, cache:: Ralston4Cache )
2242+ (; fsalfirst, k) = cache
2243+ integrator. fsalfirst = fsalfirst
2244+ integrator. fsallast = k
2245+ integrator. kshortsize = 2
2246+ resize! (integrator. k, integrator. kshortsize)
2247+ integrator. k[1 ] = integrator. fsalfirst
2248+ integrator. k[2 ] = integrator. fsallast
2249+ integrator. f (integrator. fsalfirst, integrator. uprev, integrator. p, integrator. t)
2250+ return OrdinaryDiffEqCore. increment_nf! (integrator. stats, 1 )
2251+ end
2252+
2253+ @muladd function perform_step! (integrator, cache:: Ralston4Cache , repeat_step = false )
2254+ (; t, dt, uprev, u, f, p) = integrator
2255+ (; fsalfirst, k2, k3, k4, k, tmp, tab, stage_limiter!, step_limiter!, thread) = cache
2256+ (; a21, a31, a32, a41, a42, a43, c2, c3, b1, b2, b3, b4) = tab
2257+ k1 = fsalfirst
2258+ @. . broadcast = false thread = thread tmp = uprev + dt * a21 * k1
2259+ stage_limiter! (tmp, integrator, p, t + c2 * dt)
2260+ f (k2, tmp, p, t + c2 * dt)
2261+ @. . broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2)
2262+ stage_limiter! (tmp, integrator, p, t + c3 * dt)
2263+ f (k3, tmp, p, t + c3 * dt)
2264+ @. . broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)
2265+ stage_limiter! (tmp, integrator, p, t + dt)
2266+ f (k4, tmp, p, t + dt)
2267+ @. . broadcast = false thread = thread u = uprev + dt * (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4)
2268+ stage_limiter! (u, integrator, p, t + dt)
2269+ step_limiter! (u, integrator, p, t + dt)
2270+ f (k, u, p, t + dt)
2271+ OrdinaryDiffEqCore. increment_nf! (integrator. stats, 4 )
2272+ return nothing
2273+ end
0 commit comments