@@ -1369,19 +1369,19 @@ end
1369
1369
1370
1370
J = calc_J (integrator, cache)
1371
1371
if u isa Number
1372
+ LU1 = - γdt * mass_matrix + J
1372
1373
tmp = - (αdt[1 ] + βdt[1 ] * im) * mass_matrix + J
1373
1374
else
1375
+ LU1 = lu (- γdt * mass_matrix + J)
1374
1376
tmp = lu (- (αdt[1 ] + βdt[1 ] * im) * mass_matrix + J)
1375
1377
end
1376
1378
LU2 = Vector {typeof(tmp)} (undef, (num_stages - 1 ) ÷ 2 )
1377
1379
LU2[1 ] = tmp
1378
1380
if u isa Number
1379
- LU1 = - γdt * mass_matrix + J
1380
1381
for i in 2 : (num_stages - 1 ) ÷ 2
1381
1382
LU2[i] = - (αdt[i] + βdt[i] * im) * mass_matrix + J
1382
1383
end
1383
1384
else
1384
- LU1 = lu (- γdt * mass_matrix + J)
1385
1385
for i in 2 : (num_stages - 1 ) ÷ 2
1386
1386
LU2[i] = lu (- (αdt[i] + βdt[i] * im) * mass_matrix + J)
1387
1387
end
@@ -1412,7 +1412,13 @@ end
1412
1412
end
1413
1413
z[i] = @. . z[i] * c_prime[i]
1414
1414
end
1415
- w = TI* z
1415
+ # w = TI*z
1416
+ for i in 1 : num_stages
1417
+ w[i] = zero (u)
1418
+ for j in 1 : num_stages
1419
+ w[i] += TI[i,j] * z[j]
1420
+ end
1421
+ end
1416
1422
end
1417
1423
1418
1424
# Newton iteration
@@ -1431,7 +1437,15 @@ end
1431
1437
end
1432
1438
integrator. stats. nf += num_stages
1433
1439
1434
- fw = TI * ff
1440
+ # fw = TI * ff
1441
+ fw = Vector {typeof(u)} (undef, num_stages)
1442
+ for i in 1 : num_stages
1443
+ fw[i] = zero (u)
1444
+ for j in 1 : num_stages
1445
+ fw[i] += TI[i,j] * ff[j]
1446
+ end
1447
+ end
1448
+
1435
1449
Mw = Vector {typeof(u)} (undef, num_stages)
1436
1450
if mass_matrix isa UniformScaling # `UniformScaling` doesn't play nicely with broadcast
1437
1451
for i in 1 : num_stages
@@ -1481,8 +1495,13 @@ end
1481
1495
w = @. . w - dw
1482
1496
1483
1497
# transform `w` to `z`
1484
- z = T * w
1485
-
1498
+ # z = T * w
1499
+ for i in 1 : num_stages
1500
+ z[i] = zero (u)
1501
+ for j in 1 : num_stages
1502
+ z[i] += T[i,j] * w[j]
1503
+ end
1504
+ end
1486
1505
# check stopping criterion
1487
1506
iter > 1 && (η = θ / (1 - θ))
1488
1507
if η * ndw < κ && (iter > 1 || iszero (ndw) || ! iszero (integrator. success_iter))
@@ -1565,7 +1584,6 @@ end
1565
1584
mass_matrix = integrator. f. mass_matrix
1566
1585
1567
1586
# precalculations
1568
-
1569
1587
γdt, αdt, βdt = γ / dt, α ./ dt, β ./ dt
1570
1588
(new_jac = do_newJ (integrator, alg, cache, repeat_step)) &&
1571
1589
(calc_J! (J, integrator, cache); cache. W_γdt = dt)
@@ -1600,7 +1618,13 @@ end
1600
1618
end
1601
1619
@. . z[i] *= c_prime[i]
1602
1620
end
1603
- mul! (w, TI, z)
1621
+ # mul!(w, TI, z)
1622
+ for i in 1 : num_stages
1623
+ w[i] = zero (u)
1624
+ for j in 1 : num_stages
1625
+ w[i] += TI[i,j] * z[j]
1626
+ end
1627
+ end
1604
1628
end
1605
1629
1606
1630
# Newton iteration
@@ -1620,13 +1644,19 @@ end
1620
1644
end
1621
1645
integrator. stats. nf += num_stages
1622
1646
1623
- mul! (fw, TI, ks)
1647
+ # mul!(fw, TI, ks)
1648
+ for i in 1 : num_stages
1649
+ fw[i] = zero (u)
1650
+ for j in 1 : num_stages
1651
+ fw[i] += TI[i,j] * ks[j]
1652
+ end
1653
+ end
1624
1654
1625
1655
if mass_matrix === I
1626
1656
Mw = w
1627
1657
elseif mass_matrix isa UniformScaling
1628
1658
for i in 1 : num_stages
1629
- mul! (z[i], mass_matrix. λ, w[i])
1659
+ mul! (z[i], mass_matrix. λ, w[i])
1630
1660
end
1631
1661
Mw = z
1632
1662
else
@@ -1698,7 +1728,13 @@ end
1698
1728
end
1699
1729
1700
1730
# transform `w` to `z`
1701
- mul! (z, T, w)
1731
+ # mul!(z, T, w)
1732
+ for i in 1 : num_stages
1733
+ z[i] = zero (u)
1734
+ for j in 1 : num_stages
1735
+ z[i] += T[i,j] * w[j]
1736
+ end
1737
+ end
1702
1738
# check stopping criterion
1703
1739
iter > 1 && (η = θ / (1 - θ))
1704
1740
if η * ndw < κ && (iter > 1 || iszero (ndw) || ! iszero (integrator. success_iter))
0 commit comments