Skip to content

Conversation

ChrisRackauckas
Copy link
Member

Summary

  • Implements Verner's RKV76.IIa method, the most efficient 10-stage conventional Runge-Kutta pair of orders 6 and 7
  • Adds tableau coefficients from Verner's 2024 update with improved accuracy
  • Includes full support for lazy interpolation and comprehensive test coverage

Implementation Details

This PR adds the RKV76.IIa method to the OrdinaryDiffEqVerner package. The implementation includes:

  • Algorithm definition with lazy interpolation support
  • Complete Butcher tableau with coefficients parsed from Verner's data
  • Cache structures for both mutable and constant cache types
  • Specialized perform_step! methods
  • Interpolation functions for dense output
  • Comprehensive tests verifying convergence order

Test Plan

  • Tests pass for scalar and system ODEs
  • Convergence order verified to be 7
  • Lazy and non-lazy interpolation modes tested
  • CI tests pass

Fixes #2621

🤖 Generated with Claude Code

- Implements the most efficient 10-stage conventional pair of orders 6 and 7
- Includes tableau coefficients from Verner's 2024 update
- Adds full support for lazy interpolation
- Includes comprehensive tests for convergence and system ODEs

Fixes #2621

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Contributor

github-actions bot commented Jul 23, 2025

Benchmark Results (Julia v1)

Time benchmarks
master 2243693... master / 2243693...
construction/linear_N50 28.2 ± 14 μs 28.5 ± 10 μs 0.988 ± 0.6
construction/lotka_volterra 19.1 ± 0.33 μs 19 ± 0.27 μs 1 ± 0.022
construction/rober 18.9 ± 0.2 μs 19 ± 0.21 μs 0.997 ± 0.015
nonstiff/fitzhugh_nagumo/BS3 0.147 ± 0.011 ms 0.146 ± 0.0099 ms 1.01 ± 0.1
nonstiff/fitzhugh_nagumo/DP5 0.0973 ± 0.0097 ms 0.104 ± 0.0098 ms 0.939 ± 0.13
nonstiff/fitzhugh_nagumo/Tsit5 0.115 ± 0.009 ms 0.127 ± 0.009 ms 0.907 ± 0.095
nonstiff/fitzhugh_nagumo/Vern6 0.17 ± 0.0084 ms 0.175 ± 0.0088 ms 0.971 ± 0.068
nonstiff/fitzhugh_nagumo/Vern7 0.115 ± 0.0088 ms 0.121 ± 0.0088 ms 0.949 ± 0.1
nonstiff/lotka_volterra/BS3 0.292 ± 0.011 ms 0.291 ± 0.011 ms 1 ± 0.054
nonstiff/lotka_volterra/DP5 0.0478 ± 0.018 ms 0.0498 ± 0.016 ms 0.959 ± 0.47
nonstiff/lotka_volterra/Tsit5 0.0626 ± 0.025 ms 0.0669 ± 0.024 ms 0.936 ± 0.5
nonstiff/lotka_volterra/Vern6 0.0827 ± 0.013 ms 0.086 ± 0.011 ms 0.961 ± 0.19
nonstiff/lotka_volterra/Vern7 0.0512 ± 0.022 ms 0.0527 ± 0.022 ms 0.971 ± 0.58
nonstiff/pleiades/BS3 0.088 ± 0.023 s 0.0867 ± 0.016 s 1.02 ± 0.32
nonstiff/pleiades/DP5 1.29 ± 0.098 ms 1.24 ± 0.093 ms 1.04 ± 0.11
nonstiff/pleiades/Tsit5 15.5 ± 6.1 ms 15.5 ± 5.4 ms 0.998 ± 0.52
nonstiff/pleiades/Vern6 7.54 s 6.74 s 1.12
nonstiff/pleiades/Vern7 8.07 s 8.02 s 1.01
scaling/brusselator_2d/16x16 0.3 ± 0.022 s 0.315 ± 0.031 s 0.955 ± 0.12
scaling/brusselator_2d/32x32 7.17 s 7.26 s 0.988
scaling/brusselator_2d/8x8 11.7 ± 0.67 ms 11.2 ± 0.22 ms 1.04 ± 0.063
scaling/linear/N10 0.0373 ± 0.017 ms 0.0392 ± 0.017 ms 0.953 ± 0.61
scaling/linear/N100 0.791 ± 0.014 ms 0.801 ± 0.018 ms 0.988 ± 0.029
scaling/linear/N50 0.212 ± 0.011 ms 0.224 ± 0.011 ms 0.949 ± 0.068
stiff/pollution/FBDF 0.59 ± 0.014 ms 0.594 ± 0.015 ms 0.993 ± 0.034
stiff/pollution/KenCarp4 0.549 ± 0.0099 ms 0.549 ± 0.01 ms 1 ± 0.026
stiff/pollution/Rodas4 0.767 ± 0.019 ms 0.767 ± 0.018 ms 1 ± 0.034
stiff/pollution/Rosenbrock23 1.34 ± 0.038 ms 1.35 ± 0.037 ms 0.995 ± 0.039
stiff/pollution/TRBDF2 0.511 ± 0.012 ms 0.516 ± 0.011 ms 0.991 ± 0.031
stiff/rober/FBDF 0.608 ± 0.01 ms 0.618 ± 0.01 ms 0.985 ± 0.023
stiff/rober/KenCarp4 0.769 ± 0.019 ms 0.768 ± 0.02 ms 1 ± 0.036
stiff/rober/Rodas4 0.419 ± 0.0094 ms 0.41 ± 0.011 ms 1.02 ± 0.035
stiff/rober/Rosenbrock23 0.284 ± 0.0094 ms 0.278 ± 0.0094 ms 1.02 ± 0.048
stiff/rober/TRBDF2 1.75 ± 0.014 ms 1.79 ± 0.013 ms 0.976 ± 0.011
stiff/van_der_pol/FBDF 9.93 ± 0.09 ms 9.99 ± 0.075 ms 0.994 ± 0.012
stiff/van_der_pol/KenCarp4 4.83 ± 0.067 ms 4.96 ± 0.063 ms 0.974 ± 0.018
stiff/van_der_pol/Rodas4 7.43 ± 0.066 ms 7.48 ± 0.039 ms 0.994 ± 0.01
stiff/van_der_pol/Rosenbrock23 21.4 ± 0.24 ms 21.1 ± 0.2 ms 1.01 ± 0.015
stiff/van_der_pol/TRBDF2 3.07 ± 0.092 ms 3.09 ± 0.091 ms 0.993 ± 0.042
time_to_load 3.23 ± 0.0086 s 3.22 ± 0.026 s 1 ± 0.0084
Memory benchmarks
master 2243693... master / 2243693...
construction/linear_N50 0.071 k allocs: 0.0411 MB 0.071 k allocs: 0.0411 MB 1
construction/lotka_volterra 0.065 k allocs: 2.45 kB 0.065 k allocs: 2.45 kB 1
construction/rober 0.065 k allocs: 2.42 kB 0.065 k allocs: 2.42 kB 1
nonstiff/fitzhugh_nagumo/BS3 3.69 k allocs: 0.164 MB 3.69 k allocs: 0.164 MB 1
nonstiff/fitzhugh_nagumo/DP5 2.63 k allocs: 0.127 MB 2.63 k allocs: 0.127 MB 1
nonstiff/fitzhugh_nagumo/Tsit5 4 k allocs: 0.182 MB 4 k allocs: 0.182 MB 1
nonstiff/fitzhugh_nagumo/Vern6 4.54 k allocs: 0.207 MB 4.54 k allocs: 0.207 MB 1
nonstiff/fitzhugh_nagumo/Vern7 3.91 k allocs: 0.165 MB 3.91 k allocs: 0.165 MB 1
nonstiff/lotka_volterra/BS3 7.88 k allocs: 0.365 MB 7.88 k allocs: 0.365 MB 1
nonstiff/lotka_volterra/DP5 1.21 k allocs: 0.0543 MB 1.21 k allocs: 0.0543 MB 1
nonstiff/lotka_volterra/Tsit5 2.17 k allocs: 0.093 MB 2.17 k allocs: 0.093 MB 1
nonstiff/lotka_volterra/Vern6 2.24 k allocs: 0.0986 MB 2.24 k allocs: 0.0986 MB 1
nonstiff/lotka_volterra/Vern7 1.65 k allocs: 0.0736 MB 1.65 k allocs: 0.0736 MB 1
nonstiff/pleiades/BS3 0.685 M allocs: 0.0675 GB 0.685 M allocs: 0.0675 GB 1
nonstiff/pleiades/DP5 6.63 k allocs: 0.51 MB 6.63 k allocs: 0.51 MB 1
nonstiff/pleiades/Tsit5 0.186 M allocs: 20.4 MB 0.186 M allocs: 20.4 MB 1
nonstiff/pleiades/Vern6 0.038 G allocs: 4.05 GB 0.038 G allocs: 4.05 GB 1
nonstiff/pleiades/Vern7 0.044 G allocs: 4.63 GB 0.044 G allocs: 4.63 GB 1
scaling/brusselator_2d/16x16 3.58 k allocs: 0.152 GB 3.58 k allocs: 0.152 GB 1
scaling/brusselator_2d/32x32 3.4 k allocs: 2.22 GB 3.4 k allocs: 2.22 GB 1
scaling/brusselator_2d/8x8 2.62 k allocs: 8.76 MB 2.62 k allocs: 8.76 MB 1
scaling/linear/N10 0.752 k allocs: 0.0514 MB 0.752 k allocs: 0.0514 MB 1
scaling/linear/N100 2.27 k allocs: 0.901 MB 2.27 k allocs: 0.901 MB 1
scaling/linear/N50 1.66 k allocs: 0.348 MB 1.66 k allocs: 0.348 MB 1
stiff/pollution/FBDF 1.5 k allocs: 0.288 MB 1.5 k allocs: 0.288 MB 1
stiff/pollution/KenCarp4 0.516 k allocs: 0.134 MB 0.516 k allocs: 0.134 MB 1
stiff/pollution/Rodas4 1.28 k allocs: 0.363 MB 1.28 k allocs: 0.363 MB 1
stiff/pollution/Rosenbrock23 2.77 k allocs: 0.819 MB 2.77 k allocs: 0.819 MB 1
stiff/pollution/TRBDF2 0.783 k allocs: 0.168 MB 0.783 k allocs: 0.168 MB 1
stiff/rober/FBDF 2.89 k allocs: 0.137 MB 2.89 k allocs: 0.137 MB 1
stiff/rober/KenCarp4 1.3 k allocs: 0.0575 MB 1.3 k allocs: 0.0575 MB 1
stiff/rober/Rodas4 2.19 k allocs: 0.106 MB 2.19 k allocs: 0.106 MB 1
stiff/rober/Rosenbrock23 2.51 k allocs: 0.117 MB 2.51 k allocs: 0.117 MB 1
stiff/rober/TRBDF2 7.72 k allocs: 0.36 MB 7.72 k allocs: 0.36 MB 1
stiff/van_der_pol/FBDF 0.0444 M allocs: 2.2 MB 0.0444 M allocs: 2.2 MB 1
stiff/van_der_pol/KenCarp4 4.27 k allocs: 0.184 MB 4.27 k allocs: 0.184 MB 1
stiff/van_der_pol/Rodas4 0.0377 M allocs: 1.86 MB 0.0377 M allocs: 1.86 MB 1
stiff/van_der_pol/Rosenbrock23 0.213 M allocs: 9.09 MB 0.213 M allocs: 9.09 MB 1
stiff/van_der_pol/TRBDF2 5.02 k allocs: 0.212 MB 5.02 k allocs: 0.212 MB 1
time_to_load 0.159 k allocs: 11.2 kB 0.159 k allocs: 11.2 kB 1

@ChrisRackauckas ChrisRackauckas deleted the add-verner-rkv76-iia-method branch July 29, 2025 05:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add new Verner methods
1 participant