Add two-type tableau support and Explicit/Implicit Tableaus sublibraries#3283
Merged
ChrisRackauckas merged 8 commits intoSciML:v7from Apr 7, 2026
Merged
Conversation
Contributor
Author
New commit: Convert remaining single-type tableaus to two-type formAdded commit that converts the last 3 single-type tableaus to
Also added All other existing |
ExplicitRKTableau now has a separate CType parameter for time-related coefficients (c) vs VType for state-related coefficients (α, αEEst). constructDormandPrince and constructTsit5ExplicitRK accept a second type parameter T_time for the time coefficient type (defaults to T). This allows e.g. constructVernerEfficient6(BigFloat, Float64) to use BigFloat precision for state coefficients but Float64 for c. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move explicit RK tableau constructors from DiffEqDevTools into a new
co-located sublibrary. All 87 construct* functions accept a second type
parameter T_time for the time coefficient type (c), defaulting to T.
The sublibrary is NOT a dependency of OrdinaryDiffEqExplicitRK — it's
too large to pull in by default. DP5 and Tsit5 constructors remain in
OrdinaryDiffEqExplicitRK since they're needed for defaults.
- New sublibrary: lib/OrdinaryDiffEqExplicitTableaus (co-located, not depended on)
- constructDormandPrince, constructTsit5ExplicitRK stay in ExplicitRK
- All construct* signatures use ::Type{T}, ::Type{T_time} with where
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move 18 implicit RK tableau constructors from DiffEqDevTools into a new co-located sublibrary. All constructors accept a second type parameter T_time for the time coefficient type (c), defaulting to T. Includes: GL2/4/6, LobattoIIIA/B/C/CStar/D, RadauIA/IIA, ImplicitEuler, MidpointRule, TrapezoidalRule. Co-located only — not a dependency of any solver package. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove all 105 construct* tableau functions from DiffEqDevTools (already migrated to OrdinaryDiffEqExplicitTableaus and OrdinaryDiffEqImplicitTableaus) - Keep deduce_Butcher_tableau in DiffEqDevTools (utility function) - Move tableau convergence tests (check_tableau, high-order convergence, deduce_Butcher, stability regions) to the new tableau packages - Update DiffEqDevTools stability_region_test to use algorithm-based API - Add LICENSE.md to both new tableau packages - Switch OrdinaryDiffEqRKIP from DiffEqDevTools to OrdinaryDiffEqExplicitTableaus for constructVerner6 Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rename all tableau functions in OrdinaryDiffEqExplicitTableaus and OrdinaryDiffEqImplicitTableaus to drop the 'construct' prefix (e.g., constructDormandPrince -> DormandPrince). Functions are no longer exported — access via qualified names (e.g., OrdinaryDiffEqExplicitTableaus.DormandPrince()). Update OrdinaryDiffEqRKIP to use Verner6 instead of constructVerner6. Update all tests to use qualified access. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
f3473c0 to
3d77739
Compare
Split the 10k-line ode_tableaus.jl into 7 files organized by method order: - tableaus_low_order.jl: Orders 1-4 (12 methods) - tableaus_order5.jl: Order 5 (15 methods) - tableaus_order6.jl: Order 6 (25 methods) - tableaus_order7.jl: Order 7 (10 methods) - tableaus_order8_9.jl: Orders 8-9 (8 methods) - tableaus_high_order.jl: Orders 10-14 (8 methods) - tableaus_classic.jl: Classic wrappers (9 methods) Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
These tests were already moved to OrdinaryDiffEqExplicitTableaus and OrdinaryDiffEqImplicitTableaus and are no longer included by DiffEqDevTools runtests.jl. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Revive the comprehensive convergence test from the original DiffEqDevTools.jl (758dee9) that numerically verifies convergence order for every explicit tableau from order 2 through 14 using test_convergence with ExplicitRK solver. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Based on top of #3282 (DiffEqDevTools migration). Three commits:
1. Two-type ExplicitRKTableau
ExplicitRKTableaustruct gets separateCTypefor time-relatedccoefficientsconstructDormandPrince(::Type{T}, ::Type{T_time})andconstructTsit5ExplicitRKaccept second type parameterExplicitRKConstantCacheconvertsctotypeof(dt)as safety net for external tableaux2. OrdinaryDiffEqExplicitTableaus sublibrary
(::Type{T}, ::Type{T_time})two-type signatures3. OrdinaryDiffEqImplicitTableaus sublibrary
ImplicitRKTableaustruct gets separateCTypePrepares for AutoSpecialize as default ODEFunction constructor (SciMLBase v3).
Test plan
Supersedes #3281.
🤖 Generated with Claude Code