@@ -5,7 +5,8 @@ function _ode_addsteps!(k, t, uprev, u, dt, f, p,
55 force_calc_end = false )
66 if length (k) < 2 || always_calc_begin
77 @unpack tf, uf, d = cache
8- γ = dt * d
8+ dtγ = dt * d
9+ dto2 = dt / 2
910 tf. u = uprev
1011 if cache. autodiff isa AutoForwardDiff
1112 dT = ForwardDiff. derivative (tf, t)
@@ -14,16 +15,18 @@ function _ode_addsteps!(k, t, uprev, u, dt, f, p,
1415 end
1516
1617 mass_matrix = f. mass_matrix
17- if uprev isa AbstractArray
18- J = ForwardDiff. jacobian (uf, uprev)
19- W = mass_matrix - γ * J
20- else
18+ if uprev isa Number
2119 J = ForwardDiff. derivative (uf, uprev)
22- W = 1 - γ * J
20+ W = 1 - dtγ * J
21+ else
22+ J = ForwardDiff. jacobian (uf, uprev)
23+ W = mass_matrix - dtγ * J
2324 end
24- k₁ = W \ (f (uprev, p, t) + dt * d * dT)
25- f₁ = f (uprev + dt * k₁ / 2 , p, t + dt / 2 )
26- k₂ = W \ (f₁ - k₁) + k₁
25+ f₀ = f (uprev, p, t)
26+ k₁ = W \ (@. . f₀ + dtγ * dT)
27+ tmp = @. . uprev + dto2 * k₁
28+ f₁ = f (tmp, p, t + dto2)
29+ k₂ = (W \ (f₁ - k₁)) + k₁
2730 copyat_or_push! (k, 1 , k₁)
2831 copyat_or_push! (k, 2 , k₂)
2932 end
@@ -42,15 +45,14 @@ function _ode_addsteps!(k, t, uprev, u, dt, f, p,
4245 # Assignments
4346 sizeu = size (u)
4447 mass_matrix = f. mass_matrix
45- γ = dt * d
48+ dtγ = dt * d
4649 dto2 = dt / 2
47- dto6 = dt / 6
4850
49- @. . broadcast = false linsolve_tmp= @muladd fsalfirst + γ * dT
51+ @. . linsolve_tmp= @muladd fsalfirst + dtγ * dT
5052
5153 # ## Jacobian does not need to be re-evaluated after an event
5254 # ## Since it's unchanged
53- jacobian2W! (W, mass_matrix, γ , J, false )
55+ jacobian2W! (W, mass_matrix, dtγ , J, true )
5456
5557 linsolve = cache. linsolve
5658
0 commit comments