|
54 | 54 | OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) |
55 | 55 | end |
56 | 56 |
|
57 | | - calc_rosenbrock_differentiation!(integrator, cache, dtγ, dtγ, repeat_step) |
| 57 | + new_W = calc_rosenbrock_differentiation!(integrator, cache, dtγ, dtγ, repeat_step) |
58 | 58 |
|
59 | 59 | calculate_residuals!( |
60 | 60 | weight, fill!(weight, one(eltype(u))), uprev, uprev, |
61 | 61 | integrator.opts.abstol, integrator.opts.reltol, |
62 | 62 | integrator.opts.internalnorm, t |
63 | 63 | ) |
64 | 64 |
|
65 | | - if repeat_step |
66 | | - linres = dolinsolve( |
67 | | - integrator, cache.linsolve; A = nothing, b = _vec(linsolve_tmp), |
68 | | - du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, |
69 | | - solverdata = (; gamma = dtγ) |
70 | | - ) |
71 | | - else |
72 | | - linres = dolinsolve( |
73 | | - integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), |
74 | | - du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, |
75 | | - solverdata = (; gamma = dtγ) |
76 | | - ) |
77 | | - end |
| 65 | + linres = dolinsolve( |
| 66 | + integrator, cache.linsolve; A = new_W ? W : nothing, b = _vec(linsolve_tmp), |
| 67 | + du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, |
| 68 | + solverdata = (; gamma = dtγ) |
| 69 | + ) |
78 | 70 |
|
79 | 71 | vecu = _vec(linres.u) |
80 | 72 | veck₁ = _vec(k₁) |
@@ -178,27 +170,19 @@ end |
178 | 170 | OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) |
179 | 171 | end |
180 | 172 |
|
181 | | - calc_rosenbrock_differentiation!(integrator, cache, dtγ, dtγ, repeat_step) |
| 173 | + new_W = calc_rosenbrock_differentiation!(integrator, cache, dtγ, dtγ, repeat_step) |
182 | 174 |
|
183 | 175 | calculate_residuals!( |
184 | 176 | weight, fill!(weight, one(eltype(u))), uprev, uprev, |
185 | 177 | integrator.opts.abstol, integrator.opts.reltol, |
186 | 178 | integrator.opts.internalnorm, t |
187 | 179 | ) |
188 | 180 |
|
189 | | - if repeat_step |
190 | | - linres = dolinsolve( |
191 | | - integrator, cache.linsolve; A = nothing, b = _vec(linsolve_tmp), |
192 | | - du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, |
193 | | - solverdata = (; gamma = dtγ) |
194 | | - ) |
195 | | - else |
196 | | - linres = dolinsolve( |
197 | | - integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), |
198 | | - du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, |
199 | | - solverdata = (; gamma = dtγ) |
200 | | - ) |
201 | | - end |
| 181 | + linres = dolinsolve( |
| 182 | + integrator, cache.linsolve; A = new_W ? W : nothing, b = _vec(linsolve_tmp), |
| 183 | + du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, |
| 184 | + solverdata = (; gamma = dtγ) |
| 185 | + ) |
202 | 186 |
|
203 | 187 | vecu = _vec(linres.u) |
204 | 188 | veck₁ = _vec(k₁) |
@@ -578,27 +562,19 @@ end |
578 | 562 | dtd3 = dt * d3 |
579 | 563 | dtgamma = dt * gamma |
580 | 564 |
|
581 | | - calc_rosenbrock_differentiation!(integrator, cache, dtd1, dtgamma, repeat_step) |
| 565 | + new_W = calc_rosenbrock_differentiation!(integrator, cache, dtd1, dtgamma, repeat_step) |
582 | 566 |
|
583 | 567 | calculate_residuals!( |
584 | 568 | weight, fill!(weight, one(eltype(u))), uprev, uprev, |
585 | 569 | integrator.opts.abstol, integrator.opts.reltol, |
586 | 570 | integrator.opts.internalnorm, t |
587 | 571 | ) |
588 | 572 |
|
589 | | - if repeat_step |
590 | | - linres = dolinsolve( |
591 | | - integrator, cache.linsolve; A = nothing, b = _vec(linsolve_tmp), |
592 | | - du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, |
593 | | - solverdata = (; gamma = dtgamma) |
594 | | - ) |
595 | | - else |
596 | | - linres = dolinsolve( |
597 | | - integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), |
598 | | - du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, |
599 | | - solverdata = (; gamma = dtgamma) |
600 | | - ) |
601 | | - end |
| 573 | + linres = dolinsolve( |
| 574 | + integrator, cache.linsolve; A = new_W ? W : nothing, b = _vec(linsolve_tmp), |
| 575 | + du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, |
| 576 | + solverdata = (; gamma = dtgamma) |
| 577 | + ) |
602 | 578 |
|
603 | 579 | vecu = _vec(linres.u) |
604 | 580 | veck1 = _vec(k1) |
@@ -793,27 +769,19 @@ end |
793 | 769 | dtd4 = dt * d4 |
794 | 770 | dtgamma = dt * gamma |
795 | 771 |
|
796 | | - calc_rosenbrock_differentiation!(integrator, cache, dtd1, dtgamma, repeat_step) |
| 772 | + new_W = calc_rosenbrock_differentiation!(integrator, cache, dtd1, dtgamma, repeat_step) |
797 | 773 |
|
798 | 774 | calculate_residuals!( |
799 | 775 | weight, fill!(weight, one(eltype(u))), uprev, uprev, |
800 | 776 | integrator.opts.abstol, integrator.opts.reltol, |
801 | 777 | integrator.opts.internalnorm, t |
802 | 778 | ) |
803 | 779 |
|
804 | | - if repeat_step |
805 | | - linres = dolinsolve( |
806 | | - integrator, cache.linsolve; A = nothing, b = _vec(linsolve_tmp), |
807 | | - du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, |
808 | | - solverdata = (; gamma = dtgamma) |
809 | | - ) |
810 | | - else |
811 | | - linres = dolinsolve( |
812 | | - integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), |
813 | | - du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, |
814 | | - solverdata = (; gamma = dtgamma) |
815 | | - ) |
816 | | - end |
| 780 | + linres = dolinsolve( |
| 781 | + integrator, cache.linsolve; A = new_W ? W : nothing, b = _vec(linsolve_tmp), |
| 782 | + du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, |
| 783 | + solverdata = (; gamma = dtgamma) |
| 784 | + ) |
817 | 785 |
|
818 | 786 | vecu = _vec(linres.u) |
819 | 787 | veck1 = _vec(k1) |
@@ -1127,27 +1095,19 @@ end |
1127 | 1095 | f(cache.fsalfirst, uprev, p, t) # used in calc_rosenbrock_differentiation! |
1128 | 1096 | OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) |
1129 | 1097 |
|
1130 | | - calc_rosenbrock_differentiation!(integrator, cache, dtd1, dtgamma, repeat_step) |
| 1098 | + new_W = calc_rosenbrock_differentiation!(integrator, cache, dtd1, dtgamma, repeat_step) |
1131 | 1099 |
|
1132 | 1100 | calculate_residuals!( |
1133 | 1101 | weight, fill!(weight, one(eltype(u))), uprev, uprev, |
1134 | 1102 | integrator.opts.abstol, integrator.opts.reltol, |
1135 | 1103 | integrator.opts.internalnorm, t |
1136 | 1104 | ) |
1137 | 1105 |
|
1138 | | - if repeat_step |
1139 | | - linres = dolinsolve( |
1140 | | - integrator, cache.linsolve; A = nothing, b = _vec(linsolve_tmp), |
1141 | | - du = cache.fsalfirst, u = u, p = p, t = t, weight = weight, |
1142 | | - solverdata = (; gamma = dtgamma) |
1143 | | - ) |
1144 | | - else |
1145 | | - linres = dolinsolve( |
1146 | | - integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), |
1147 | | - du = cache.fsalfirst, u = u, p = p, t = t, weight = weight, |
1148 | | - solverdata = (; gamma = dtgamma) |
1149 | | - ) |
1150 | | - end |
| 1106 | + linres = dolinsolve( |
| 1107 | + integrator, cache.linsolve; A = new_W ? W : nothing, b = _vec(linsolve_tmp), |
| 1108 | + du = cache.fsalfirst, u = u, p = p, t = t, weight = weight, |
| 1109 | + solverdata = (; gamma = dtgamma) |
| 1110 | + ) |
1151 | 1111 |
|
1152 | 1112 | @.. broadcast = false $(_vec(k1)) = -linres.u |
1153 | 1113 |
|
@@ -1479,27 +1439,19 @@ end |
1479 | 1439 | f(cache.fsalfirst, uprev, p, t) |
1480 | 1440 | OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) |
1481 | 1441 |
|
1482 | | - calc_rosenbrock_differentiation!(integrator, cache, dtd[1], dtgamma, repeat_step) |
| 1442 | + new_W = calc_rosenbrock_differentiation!(integrator, cache, dtd[1], dtgamma, repeat_step) |
1483 | 1443 |
|
1484 | 1444 | calculate_residuals!( |
1485 | 1445 | weight, fill!(weight, one(eltype(u))), uprev, uprev, |
1486 | 1446 | integrator.opts.abstol, integrator.opts.reltol, |
1487 | 1447 | integrator.opts.internalnorm, t |
1488 | 1448 | ) |
1489 | 1449 |
|
1490 | | - if repeat_step |
1491 | | - linres = dolinsolve( |
1492 | | - integrator, cache.linsolve; A = nothing, b = _vec(linsolve_tmp), |
1493 | | - du = cache.fsalfirst, u = u, p = p, t = t, weight = weight, |
1494 | | - solverdata = (; gamma = dtgamma) |
1495 | | - ) |
1496 | | - else |
1497 | | - linres = dolinsolve( |
1498 | | - integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), |
1499 | | - du = cache.fsalfirst, u = u, p = p, t = t, weight = weight, |
1500 | | - solverdata = (; gamma = dtgamma) |
1501 | | - ) |
1502 | | - end |
| 1450 | + linres = dolinsolve( |
| 1451 | + integrator, cache.linsolve; A = new_W ? W : nothing, b = _vec(linsolve_tmp), |
| 1452 | + du = cache.fsalfirst, u = u, p = p, t = t, weight = weight, |
| 1453 | + solverdata = (; gamma = dtgamma) |
| 1454 | + ) |
1503 | 1455 |
|
1504 | 1456 | @.. $(_vec(ks[1])) = -linres.u |
1505 | 1457 | integrator.stats.nsolve += 1 |
|
0 commit comments