Commit b85c233
Add Jacobian reuse for Rosenbrock-W methods
W-methods guarantee correctness with a stale Jacobian, but the existing
code recomputes J every accepted step. This adds CVODE-inspired reuse
logic that skips Jacobian recomputation when conditions allow it,
reducing the dominant cost for large stiff systems.
Reuse strategy (W-methods only):
- Recompute J on first iteration, error test failure, callback
modification, gamma ratio change > 30%, or every 50 accepted steps
- W is always rebuilt since it depends on current dt
- Strict Rosenbrock methods are unchanged (always recompute J)
Changes:
- Add JacReuseState struct and reuse decision logic to derivative_utils.jl
- Add jac_reuse field to all Rosenbrock mutable caches (hand-written and
macro-generated)
- Wire reuse decision into calc_rosenbrock_differentiation!
- Add comprehensive test suite for convergence, Jacobian savings, and
benchmark accuracy
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1 parent e52f9ad commit b85c233
7 files changed
Lines changed: 346 additions & 20 deletions
File tree
- lib
- OrdinaryDiffEqDifferentiation/src
- OrdinaryDiffEqRosenbrock
- src
- test
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
44 | | - | |
| 44 | + | |
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
3 | 89 | | |
4 | 90 | | |
5 | 91 | | |
| |||
689 | 775 | | |
690 | 776 | | |
691 | 777 | | |
| 778 | + | |
| 779 | + | |
692 | 780 | | |
693 | | - | |
| 781 | + | |
694 | 782 | | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
695 | 793 | | |
696 | 794 | | |
697 | 795 | | |
| |||
Lines changed: 2 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
36 | | - | |
| 36 | + | |
| 37 | + | |
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
176 | 176 | | |
177 | 177 | | |
178 | 178 | | |
179 | | - | |
| 179 | + | |
180 | 180 | | |
181 | 181 | | |
182 | 182 | | |
| |||
198 | 198 | | |
199 | 199 | | |
200 | 200 | | |
| 201 | + | |
201 | 202 | | |
202 | 203 | | |
203 | 204 | | |
| |||
246 | 247 | | |
247 | 248 | | |
248 | 249 | | |
249 | | - | |
| 250 | + | |
250 | 251 | | |
251 | 252 | | |
252 | 253 | | |
| |||
255 | 256 | | |
256 | 257 | | |
257 | 258 | | |
258 | | - | |
| 259 | + | |
| 260 | + | |
259 | 261 | | |
260 | 262 | | |
261 | 263 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| |||
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| 49 | + | |
49 | 50 | | |
50 | 51 | | |
51 | 52 | | |
| |||
69 | 70 | | |
70 | 71 | | |
71 | 72 | | |
72 | | - | |
| 73 | + | |
73 | 74 | | |
74 | 75 | | |
75 | 76 | | |
| |||
99 | 100 | | |
100 | 101 | | |
101 | 102 | | |
| 103 | + | |
102 | 104 | | |
103 | 105 | | |
104 | 106 | | |
105 | 107 | | |
106 | 108 | | |
107 | | - | |
| 109 | + | |
108 | 110 | | |
109 | 111 | | |
110 | 112 | | |
| |||
134 | 136 | | |
135 | 137 | | |
136 | 138 | | |
| 139 | + | |
137 | 140 | | |
138 | 141 | | |
139 | 142 | | |
| |||
185 | 188 | | |
186 | 189 | | |
187 | 190 | | |
| 191 | + | |
| 192 | + | |
188 | 193 | | |
189 | 194 | | |
190 | 195 | | |
191 | 196 | | |
192 | 197 | | |
193 | | - | |
| 198 | + | |
194 | 199 | | |
195 | 200 | | |
196 | 201 | | |
| |||
244 | 249 | | |
245 | 250 | | |
246 | 251 | | |
| 252 | + | |
| 253 | + | |
247 | 254 | | |
248 | 255 | | |
249 | 256 | | |
250 | | - | |
| 257 | + | |
| 258 | + | |
251 | 259 | | |
252 | 260 | | |
253 | 261 | | |
| |||
336 | 344 | | |
337 | 345 | | |
338 | 346 | | |
339 | | - | |
| 347 | + | |
340 | 348 | | |
341 | 349 | | |
342 | 350 | | |
| |||
366 | 374 | | |
367 | 375 | | |
368 | 376 | | |
| 377 | + | |
369 | 378 | | |
370 | 379 | | |
371 | 380 | | |
| |||
412 | 421 | | |
413 | 422 | | |
414 | 423 | | |
| 424 | + | |
| 425 | + | |
415 | 426 | | |
416 | 427 | | |
417 | 428 | | |
418 | 429 | | |
419 | 430 | | |
420 | | - | |
| 431 | + | |
421 | 432 | | |
422 | 433 | | |
423 | 434 | | |
| |||
443 | 454 | | |
444 | 455 | | |
445 | 456 | | |
446 | | - | |
| 457 | + | |
447 | 458 | | |
448 | 459 | | |
449 | 460 | | |
| |||
472 | 483 | | |
473 | 484 | | |
474 | 485 | | |
| 486 | + | |
475 | 487 | | |
476 | 488 | | |
477 | 489 | | |
| |||
520 | 532 | | |
521 | 533 | | |
522 | 534 | | |
| 535 | + | |
| 536 | + | |
523 | 537 | | |
524 | 538 | | |
525 | 539 | | |
526 | 540 | | |
527 | 541 | | |
528 | | - | |
| 542 | + | |
529 | 543 | | |
530 | 544 | | |
531 | 545 | | |
| |||
611 | 625 | | |
612 | 626 | | |
613 | 627 | | |
614 | | - | |
| 628 | + | |
615 | 629 | | |
616 | 630 | | |
617 | 631 | | |
| |||
646 | 660 | | |
647 | 661 | | |
648 | 662 | | |
| 663 | + | |
649 | 664 | | |
650 | 665 | | |
651 | 666 | | |
652 | 667 | | |
653 | | - | |
| 668 | + | |
654 | 669 | | |
655 | 670 | | |
656 | 671 | | |
| |||
685 | 700 | | |
686 | 701 | | |
687 | 702 | | |
| 703 | + | |
688 | 704 | | |
689 | 705 | | |
690 | 706 | | |
| |||
737 | 753 | | |
738 | 754 | | |
739 | 755 | | |
| 756 | + | |
| 757 | + | |
740 | 758 | | |
741 | 759 | | |
742 | 760 | | |
743 | 761 | | |
744 | | - | |
| 762 | + | |
745 | 763 | | |
746 | 764 | | |
747 | 765 | | |
| |||
795 | 813 | | |
796 | 814 | | |
797 | 815 | | |
| 816 | + | |
| 817 | + | |
798 | 818 | | |
799 | 819 | | |
800 | 820 | | |
801 | 821 | | |
802 | | - | |
| 822 | + | |
803 | 823 | | |
804 | 824 | | |
805 | 825 | | |
| |||
934 | 954 | | |
935 | 955 | | |
936 | 956 | | |
| 957 | + | |
| 958 | + | |
937 | 959 | | |
938 | 960 | | |
939 | 961 | | |
940 | 962 | | |
941 | 963 | | |
942 | | - | |
| 964 | + | |
943 | 965 | | |
944 | 966 | | |
945 | 967 | | |
| |||
0 commit comments