@@ -1498,12 +1498,20 @@ end
1498
1498
1499
1499
# transform `w` to `z`
1500
1500
# z = T * w
1501
- for i in 1 : num_stages
1501
+ for i in 1 : num_stages - 1
1502
1502
z[i] = zero (u)
1503
1503
for j in 1 : num_stages
1504
1504
z[i] += T[i,j] * w[j]
1505
1505
end
1506
1506
end
1507
+ z[num_stages] = T[num_stages, 1 ] * w[1 ]
1508
+ i = 2
1509
+ while i < num_stages
1510
+ z[num_stages] += w[i]
1511
+ i += 2
1512
+ end
1513
+
1514
+
1507
1515
# check stopping criterion
1508
1516
iter > 1 && (η = θ / (1 - θ))
1509
1517
if η * ndw < κ && (iter > 1 || iszero (ndw) || ! iszero (integrator. success_iter))
@@ -1524,13 +1532,16 @@ end
1524
1532
cache. iter = iter
1525
1533
1526
1534
u = @. . uprev + z[num_stages]
1527
- #=
1535
+
1528
1536
if adaptive
1529
1537
edt = e ./ dt
1530
- tmp = @.. dot(edt, z)
1538
+ tmp = dot (edt, z)
1531
1539
mass_matrix != I && (tmp = mass_matrix * tmp)
1532
1540
utilde = @. . broadcast= false integrator. fsalfirst+ tmp
1533
- alg.smooth_est && (utilde = LU[1] \ utilde; integrator.stats.nsolve += 1)
1541
+ if alg. smooth_est
1542
+ utilde = _reshape (LU1 \ _vec (utilde), axes (u))
1543
+ integrator. stats. nsolve += 1
1544
+ end
1534
1545
atmp = calculate_residuals (utilde, uprev, u, atol, rtol, internalnorm, t)
1535
1546
integrator. EEst = internalnorm (atmp, t)
1536
1547
@@ -1539,12 +1550,15 @@ end
1539
1550
f0 = f (uprev .+ utilde, p, t)
1540
1551
integrator. stats. nf += 1
1541
1552
utilde = @. . broadcast= false f0+ tmp
1542
- alg.smooth_est && (utilde = LU[1] \ utilde; integrator.stats.nsolve += 1)
1553
+ if alg. smooth_est
1554
+ utilde = _reshape (LU1 \ _vec (utilde), axes (u))
1555
+ integrator. stats. nsolve += 1
1556
+ end
1543
1557
atmp = calculate_residuals (utilde, uprev, u, atol, rtol, internalnorm, t)
1544
1558
integrator. EEst = internalnorm (atmp, t)
1545
1559
end
1546
1560
end
1547
- =#
1561
+
1548
1562
if integrator. EEst <= oneunit (integrator. EEst)
1549
1563
cache. dtprev = dt
1550
1564
if alg. extrapolant != :constant
@@ -1729,12 +1743,19 @@ end
1729
1743
1730
1744
# transform `w` to `z`
1731
1745
# mul!(z, T, w)
1732
- for i in 1 : num_stages
1746
+ for i in 1 : num_stages - 1
1733
1747
z[i] = zero (u)
1734
1748
for j in 1 : num_stages
1735
1749
z[i] += T[i,j] * w[j]
1736
1750
end
1737
1751
end
1752
+ z[num_stages] = T[num_stages, 1 ] * w[1 ]
1753
+ i = 2
1754
+ while i < num_stages
1755
+ z[num_stages] += w[i]
1756
+ i += 2
1757
+ end
1758
+
1738
1759
# check stopping criterion
1739
1760
iter > 1 && (η = θ / (1 - θ))
1740
1761
if η * ndw < κ && (iter > 1 || iszero (ndw) || ! iszero (integrator. success_iter))
0 commit comments