@@ -2947,6 +2947,28 @@ end
29472947 b4Θ * k4[idxs] + b5Θ * k5[idxs] + b6Θ * k6[idxs])))
29482948end
29492949
2950+ @muladd function _ode_interpolant (Θ, dt, y₀, y₁, k,
2951+ cache:: Union{DPRKN6ConstantCache, DPRKN6Cache} , idxs:: Number ,
2952+ T:: Type{Val{0}} , differential_vars:: Nothing )
2953+ @dprkn6pre0
2954+ halfsize = length (y₀) ÷ 2
2955+ if idxs <= halfsize
2956+ duprev[idxs] +
2957+ dt * Θ *
2958+ (bp1Θ * k1[idxs] + bp3Θ * k3[idxs] +
2959+ bp4Θ * k4[idxs] + bp5Θ * k5[idxs] + bp6Θ * k6[idxs])
2960+ else
2961+ idxs = idxs - halfsize
2962+ uprev[idxs] +
2963+ dt * Θ *
2964+ (duprev[idxs] +
2965+ dt * Θ *
2966+ (b1Θ * k1[idxs] +
2967+ b3Θ * k3[idxs] +
2968+ b4Θ * k4[idxs] + b5Θ * k5[idxs] + b6Θ * k6[idxs]))
2969+ end
2970+ end
2971+
29502972@muladd function _ode_interpolant! (out, Θ, dt, y₀, y₁, k,
29512973 cache:: Union{DPRKN6ConstantCache, DPRKN6Cache} ,
29522974 idxs:: Nothing , T:: Type{Val{0}} , differential_vars:: Nothing )
@@ -2976,25 +2998,25 @@ end
29762998 cache:: Union{DPRKN6ConstantCache, DPRKN6Cache} , idxs,
29772999 T:: Type{Val{0}} , differential_vars:: Nothing )
29783000 @dprkn6pre0
2979- @inbounds @. . broadcast= false out. x[2 ]= uprev[idxs] +
3001+ halfsize = length (y₀) ÷ 2
3002+ isfirsthalf = idxs .<= halfsize
3003+ secondhalf = idxs .> halfsize
3004+ firstidxs = idxs[isfirsthalf]
3005+ secondidxs_shifted = idxs[secondhalf]
3006+ secondidxs = secondidxs_shifted .- halfsize
3007+
3008+ @views @. . broadcast= false out[secondhalf]= uprev[secondidxs] +
29803009 dt * Θ *
2981- (duprev[idxs ] +
3010+ (duprev[secondidxs ] +
29823011 dt * Θ *
2983- (b1Θ * k1[idxs ] +
2984- b3Θ * k3[idxs ] +
2985- b4Θ * k4[idxs ] + b5Θ * k5[idxs ] +
2986- b6Θ * k6[idxs ]))
2987- @inbounds @. . broadcast= false out. x[ 1 ]= duprev[idxs ] +
3012+ (b1Θ * k1[secondidxs ] +
3013+ b3Θ * k3[secondidxs ] +
3014+ b4Θ * k4[secondidxs ] + b5Θ * k5[secondidxs ] +
3015+ b6Θ * k6[secondidxs ]))
3016+ @views @. . broadcast= false out[isfirsthalf ]= duprev[firstidxs ] +
29883017 dt * Θ *
2989- (bp1Θ * k1[idxs] + bp3Θ * k3[idxs] +
2990- bp4Θ * k4[idxs] + bp5Θ * k5[idxs] +
2991- bp6Θ * k6[idxs])
2992- # for (j,i) in enumerate(idxs)
2993- # out.x[2][j] = uprev[i] + dt*Θ*(duprev[i] + dt*Θ*(b1Θ*k1[i] +
2994- # b3Θ*k3[i] +
2995- # b4Θ*k4[i] + b5Θ*k5[i] + b6Θ*k6[i]))
2996- # out.x[1][j] = duprev[i] + dt*Θ*(bp1Θ*k1[i] + bp3Θ*k3[i] +
2997- # bp4Θ*k4[i] + bp5Θ*k5[i] + bp6Θ*k6[i])
2998- # end
3018+ (bp1Θ * k1[firstidxs] + bp3Θ * k3[firstidxs] +
3019+ bp4Θ * k4[firstidxs] + bp5Θ * k5[firstidxs] +
3020+ bp6Θ * k6[firstidxs])
29993021 out
30003022end
0 commit comments