@@ -108,7 +108,7 @@ function _ode_addsteps!(integrator, cache::RadauIIA3Cache, repeat_step = false)
108
108
@unpack t, dt, uprev, u, f, p, fsallast, fsalfirst = integrator
109
109
@unpack T11, T12, T21, T22, TI11, TI12, TI21, TI22 = cache. tab
110
110
@unpack c1, c2, α, β, e1, e2 = cache. tab
111
- @unpack κ, cont1, cont2 = cache
111
+ @unpack κ = cache
112
112
@unpack z1, z2, w1, w2,
113
113
dw12, cubuff,
114
114
k, k2, fw1, fw2,
@@ -127,14 +127,24 @@ function _ode_addsteps!(integrator, cache::RadauIIA3Cache, repeat_step = false)
127
127
integrator. stats. nw += 1
128
128
end
129
129
130
- # better initial guess
131
- uzero = zero (eltype (z1))
132
- @. z1 = uzero
133
- @. z2 = uzero
134
- @. w1 = uzero
135
- @. w2 = uzero
136
- @. cache. cont1 = uzero
137
- @. cache. cont2 = uzero
130
+ c1m1 = c1 - 1
131
+ if integrator. iter == 1 || integrator. u_modified || alg. extrapolant == :constant
132
+ cache. dtprev = one (cache. dtprev)
133
+ uzero = zero (eltype (u))
134
+ @. . broadcast= false z1= uzero
135
+ @. . broadcast= false z2= uzero
136
+ @. . broadcast= false w1= uzero
137
+ @. . broadcast= false w2= uzero
138
+ @. . broadcast= false integrator. k[3 ]= uzero
139
+ @. . broadcast= false integrator. k[4 ]= uzero
140
+ else
141
+ c2′ = dt / cache. dtprev
142
+ c1′ = c1 * c2′
143
+ @. . broadcast= false z1= c1′ * (k[3 ] + (c1′ - c1m1) * k[4 ])
144
+ @. . broadcast= false z2= c2′ * (k[3 ] + (c2′ - c1m1) * k[4 ])
145
+ @. . broadcast= false w1= TI11 * z1 + TI12 * z2
146
+ @. . broadcast= false w2= TI21 * z1 + TI22 * z2
147
+ end
138
148
139
149
# Newton iteration
140
150
local ndw
@@ -233,6 +243,14 @@ function _ode_addsteps!(integrator, cache::RadauIIA3Cache, repeat_step = false)
233
243
@. u = uprev + z2
234
244
step_limiter! (u, integrator, p, t + dt)
235
245
246
+ if integrator. EEst <= oneunit (integrator. EEst)
247
+ cache. dtprev = dt
248
+ if alg. extrapolant != :constant
249
+ integrator. k[3 ] = (z1 - z2) / c1m1
250
+ integrator. k[4 ] = integrator. k[3 ] - (z1 / c1)
251
+ end
252
+ end
253
+
236
254
f (fsallast, u, p, t + dt)
237
255
OrdinaryDiffEqCore. increment_nf! (integrator. stats, 1 )
238
256
return
@@ -384,7 +402,7 @@ function _ode_addsteps!(integrator, cache::RadauIIA5Cache, repeat_step = false)
384
402
@unpack t, dt, uprev, u, f, p, fsallast, fsalfirst, k = integrator
385
403
@unpack T11, T12, T13, T21, T22, T23, T31, TI11, TI12, TI13, TI21, TI22, TI23, TI31, TI32, TI33 = cache. tab
386
404
@unpack c1, c2, γ, α, β, e1, e2, e3 = cache. tab
387
- @unpack κ, cont1, cont2, cont3 = cache
405
+ @unpack κ = cache
388
406
@unpack z1, z2, z3, w1, w2, w3,
389
407
dw1, ubuff, dw23, cubuff,
390
408
k, k2, k3, fw1, fw2, fw3,
@@ -396,8 +414,8 @@ alg = unwrap_alg(integrator, true)
396
414
mass_matrix = integrator. f. mass_matrix
397
415
398
416
# precalculations
399
- c1m1 = ( c1 - 1 ) * dt
400
- c2m1 = ( c2 - 1 ) * dt
417
+ c1m1 = c1 - 1
418
+ c2m1 = c2 - 1
401
419
c1mc2 = c1 - c2
402
420
γdt, αdt, βdt = γ / dt, α / dt, β / dt
403
421
if (new_W = do_newW (integrator, alg, new_jac, cache. W_γdt))
@@ -422,7 +440,7 @@ if integrator.iter == 1 || integrator.u_modified || alg.extrapolant == :constant
422
440
@. . broadcast= false integrator. k[4 ] = uzero
423
441
@. . broadcast= false integrator. k[5 ] = uzero
424
442
else
425
- c3′ = dt
443
+ c3′ = dt / cache . dtprev
426
444
c1′ = c1 * c3′
427
445
c2′ = c2 * c3′
428
446
@. . broadcast= false z1= c1′ * (k[3 ] + (c1′ - c2m1) * (k[4 ] + (c1′ - c1m1) * k[5 ]))
@@ -565,8 +583,8 @@ step_limiter!(u, integrator, p, t + dt)
565
583
if integrator. EEst <= oneunit (integrator. EEst)
566
584
cache. dtprev = dt
567
585
if alg. extrapolant != :constant
568
- integrator. k[3 ] = (z2 - z3) / (dt * c2m1)
569
- @. . tmp= (z1 - z2) / (dt * c1mc2)
586
+ integrator. k[3 ] = (z2 - z3) / c2m1
587
+ @. . tmp= (z1 - z2) / c1mc2
570
588
integrator. k[4 ] = (tmp - integrator. k[3 ]) / c1m1
571
589
integrator. k[5 ] = integrator. k[4 ] - (tmp - z1 / c1) / c2
572
590
end
@@ -807,7 +825,7 @@ function _ode_addsteps!(integrator, cache::RadauIIA9Cache, repeat_step = false)
807
825
@unpack T11, T12, T13, T14, T15, T21, T22, T23, T24, T25, T31, T32, T33, T34, T35, T41, T42, T43, T44, T45, T51 = cache. tab #= T52 = 1, T53 = 0, T54 = 1, T55 = 0=#
808
826
@unpack TI11, TI12, TI13, TI14, TI15, TI21, TI22, TI23, TI24, TI25, TI31, TI32, TI33, TI34, TI35, TI41, TI42, TI43, TI44, TI45, TI51, TI52, TI53, TI54, TI55 = cache. tab
809
827
@unpack c1, c2, c3, c4, γ, α1, β1, α2, β2, e1, e2, e3, e4, e5 = cache. tab
810
- @unpack κ= cache
828
+ @unpack κ = cache
811
829
@unpack z1, z2, z3, z4, z5, w1, w2, w3, w4, w5 = cache
812
830
@unpack dw1, ubuff, dw23, dw45, cubuff1, cubuff2 = cache
813
831
@unpack k, k2, k3, k4, k5, fw1, fw2, fw3, fw4, fw5 = cache
0 commit comments