@@ -922,81 +922,21 @@ end
922922@muladd function perform_step! (integrator, cache:: RK46NLCache , repeat_step = false )
923923 (; t, dt, uprev, u, f, p) = integrator
924924 (; k, fsalfirst, tmp, stage_limiter!, step_limiter!, thread) = cache
925- (; α2, α3, α4, α5, α6, β1, β2, β3, β4, β5, β6, c2, c3, c4, c5, c6 ) = cache. tab
925+ (; A2end, B1, B2end, c2end ) = cache. tab
926926
927- # u1
928927 @. . broadcast = false thread = thread tmp = dt * fsalfirst
929- @. . broadcast = false thread = thread u = uprev + β1 * tmp
930- stage_limiter! (u, integrator, p, t + c2 * dt)
931- # u2
932- f (k, u, p, t + c2 * dt)
933- @. . broadcast = false thread = thread tmp = α2 * tmp + dt * k
934- @. . broadcast = false thread = thread u = u + β2 * tmp
935- stage_limiter! (u, integrator, p, t + c3 * dt)
936- # u3
937- f (k, u, p, t + c3 * dt)
938- @. . broadcast = false thread = thread tmp = α3 * tmp + dt * k
939- @. . broadcast = false thread = thread u = u + β3 * tmp
940- stage_limiter! (u, integrator, p, t + c4 * dt)
941- # u4
942- f (k, u, p, t + c4 * dt)
943- @. . broadcast = false thread = thread tmp = α4 * tmp + dt * k
944- @. . broadcast = false thread = thread u = u + β4 * tmp
945- stage_limiter! (u, integrator, p, t + c5 * dt)
946- # u5 = u
947- f (k, u, p, t + c5 * dt)
948- @. . broadcast = false thread = thread tmp = α5 * tmp + dt * k
949- @. . broadcast = false thread = thread u = u + β5 * tmp
950- stage_limiter! (u, integrator, p, t + c6 * dt)
951-
952- f (k, u, p, t + c6 * dt)
953- @. . broadcast = false thread = thread tmp = α6 * tmp + dt * k
954- @. . broadcast = false thread = thread u = u + β6 * tmp
928+ @. . broadcast = false thread = thread u = uprev + B1 * tmp
929+ for i in eachindex (A2end)
930+ stage_limiter! (u, integrator, p, t + c2end[i] * dt)
931+ f (k, u, p, t + c2end[i] * dt)
932+ OrdinaryDiffEqCore. increment_nf! (integrator. stats, 1 )
933+ @. . broadcast = false thread = thread tmp = A2end[i] * tmp + dt * k
934+ @. . broadcast = false thread = thread u = u + B2end[i] * tmp
935+ end
955936 stage_limiter! (u, integrator, p, t + dt)
956937 step_limiter! (u, integrator, p, t + dt)
957-
958938 f (k, u, p, t + dt)
959- OrdinaryDiffEqCore. increment_nf! (integrator. stats, 6 )
960- end
961-
962- function initialize! (integrator, cache:: RK46NLConstantCache )
963- integrator. fsalfirst = integrator. f (integrator. uprev, integrator. p, integrator. t) # Pre-start fsal
964939 OrdinaryDiffEqCore. increment_nf! (integrator. stats, 1 )
965- integrator. kshortsize = 1
966- integrator. k = typeof (integrator. k)(undef, integrator. kshortsize)
967-
968- # Avoid undefined entries if k is an array of arrays
969- integrator. fsallast = zero (integrator. fsalfirst)
970- return integrator. k[1 ] = integrator. fsalfirst
971- end
972-
973- @muladd function perform_step! (integrator, cache:: RK46NLConstantCache , repeat_step = false )
974- (; t, dt, uprev, u, f, p) = integrator
975- (; α2, α3, α4, α5, α6, β1, β2, β3, β4, β5, β6, c2, c3, c4, c5, c6) = cache
976-
977- # u1
978- tmp = dt * integrator. fsalfirst
979- u = uprev + β1 * tmp
980- # u2
981- tmp = α2 * tmp + dt * f (u, p, t + c2 * dt)
982- u = u + β2 * tmp
983- # u3
984- tmp = α3 * tmp + dt * f (u, p, t + c3 * dt)
985- u = u + β3 * tmp
986- # u4
987- tmp = α4 * tmp + dt * f (u, p, t + c4 * dt)
988- u = u + β4 * tmp
989- # u5 = u
990- tmp = α5 * tmp + dt * f (u, p, t + c5 * dt)
991- u = u + β5 * tmp
992- # u6
993- tmp = α6 * tmp + dt * f (u, p, t + c6 * dt)
994- u = u + β6 * tmp
995-
996- integrator. fsallast = f (u, p, t + dt) # For interpolation, then FSAL'd
997- OrdinaryDiffEqCore. increment_nf! (integrator. stats, 6 )
998- integrator. k[1 ] = integrator. fsalfirst
999- integrator. u = u
1000940end
1001941
1002942function initialize! (integrator, cache:: SHLDDRK52ConstantCache )
0 commit comments