@@ -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,28 @@ 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] +
2980- dt * Θ *
2981- (duprev[idxs] +
2982- 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] +
2988- 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
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] +
3009+ dt * Θ *
3010+ (duprev[secondidxs] +
3011+ dt * Θ *
3012+ (b1Θ * k1[secondidxs] +
3013+ b3Θ * k3[secondidxs] +
3014+ b4Θ * k4[secondidxs] +
3015+ b5Θ * k5[secondidxs] +
3016+ b6Θ * k6[secondidxs]))
3017+ @views @. . broadcast= false out[isfirsthalf]= duprev[firstidxs] +
3018+ dt * Θ *
3019+ (bp1Θ * k1[firstidxs] +
3020+ bp3Θ * k3[firstidxs] +
3021+ bp4Θ * k4[firstidxs] +
3022+ bp5Θ * k5[firstidxs] +
3023+ bp6Θ * k6[firstidxs])
29993024 out
30003025end
0 commit comments