Skip to content

Commit adbb347

Browse files
author
oscarddssmith
committed
start fixing addsteps
1 parent 1438a63 commit adbb347

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

lib/OrdinaryDiffEqRosenbrock/src/stiff_addsteps.jl

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)