Add ES-DG optimized 3S* low-storage RK methods (Al Jahdali et al. 2022)#3241
Open
singhharsh1708 wants to merge 4 commits into
Open
Add ES-DG optimized 3S* low-storage RK methods (Al Jahdali et al. 2022)#3241singhharsh1708 wants to merge 4 commits into
singhharsh1708 wants to merge 4 commits into
Conversation
Contributor
Author
ChrisRackauckas
approved these changes
Mar 26, 2026
singhharsh1708
added a commit
to singhharsh1708/OrdinaryDiffEq.jl
that referenced
this pull request
Jul 15, 2026
Rebasing SciML#3241 (approved months ago) over master exposed two breakages from unrelated drift, not merge conflicts: - thread::Thread = False() no longer resolves; the rest of the low-storage family moved to Serial() as the default. - SVector(...) was passed to LowStorageRK3SConstantCache, whose fields are NTuple; StaticArrays was never a runtime dependency, only a test one, so this never actually worked. Switched to plain tuples matching the sibling ParsaniKetcheson* constructors. Also Runic-reformats the added AlJahdali constructors (numeric literal style drifted from current convention); no other lines touched. Verified: all 16 methods solve, order-of-convergence matches each method's claimed order, and the full LowStorageRK Core suite passes (515 pass, 28 pre-existing broken, 0 fail).
singhharsh1708
force-pushed
the
aljahdali-3s-methods
branch
from
July 15, 2026 21:03
f3659ad to
7ce88e7
Compare
singhharsh1708
added a commit
to singhharsh1708/OrdinaryDiffEq.jl
that referenced
this pull request
Jul 16, 2026
Rebasing SciML#3241 (approved months ago) over master exposed two breakages from unrelated drift, not merge conflicts: - thread::Thread = False() no longer resolves; the rest of the low-storage family moved to Serial() as the default. - SVector(...) was passed to LowStorageRK3SConstantCache, whose fields are NTuple; StaticArrays was never a runtime dependency, only a test one, so this never actually worked. Switched to plain tuples matching the sibling ParsaniKetcheson* constructors. Also Runic-reformats the added AlJahdali constructors (numeric literal style drifted from current convention); no other lines touched. Verified: all 16 methods solve, order-of-convergence matches each method's claimed order, and the full LowStorageRK Core suite passes (515 pass, 28 pre-existing broken, 0 fail).
singhharsh1708
force-pushed
the
aljahdali-3s-methods
branch
from
July 16, 2026 11:50
798dec8 to
58c60e1
Compare
- Implement 16 new methods (advection- and vortex-optimized) - Reuse existing LowStorageRK3S cache structures (no allocations) - Add tableau constructors and alg_cache implementations - Register methods in alg_utils and exports - All tests pass (517 + JET + Aqua)
Rebasing SciML#3241 (approved months ago) over master exposed two breakages from unrelated drift, not merge conflicts: - thread::Thread = False() no longer resolves; the rest of the low-storage family moved to Serial() as the default. - SVector(...) was passed to LowStorageRK3SConstantCache, whose fields are NTuple; StaticArrays was never a runtime dependency, only a test one, so this never actually worked. Switched to plain tuples matching the sibling ParsaniKetcheson* constructors. Also Runic-reformats the added AlJahdali constructors (numeric literal style drifted from current convention); no other lines touched. Verified: all 16 methods solve, order-of-convergence matches each method's claimed order, and the full LowStorageRK Core suite passes (515 pass, 28 pre-existing broken, 0 fail).
The approved PR shipped with no test coverage for these methods at all. Adds a compact loop over all 16 checking convergence order against an analytic reference (test_problems_only_time), matching each method's alg_order. Unlike ParsaniKetchesonDeconinck3S*, these don't show a consistent +1 pure-quadrature super-convergence bump at the same dts range (some do, some measure close to their claimed order, some land between), so atol is looser (1.25) than the family's usual testTol (0.25) rather than hand-tuning dts per method. Still catches an actually wrong coefficient set, which would land further off.
Spell Check CI flagged every occurrence of Vor (the vorticity- optimized half of the AlJahdali 3S* family, paired with Adv for advection-optimized) as a typo for For.
singhharsh1708
force-pushed
the
aljahdali-3s-methods
branch
from
July 18, 2026 07:33
58c60e1 to
5c06e64
Compare
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.
📌 Description
This PR adds 16 new 3S* low-storage explicit Runge–Kutta methods based on the work of Al Jahdali et al. (2022), designed for entropy-stable discontinuous Galerkin (ES-DG) discretizations.
The implemented methods include both:
Each method follows the existing 3S* low-storage formulation and integrates seamlessly with the current
OrdinaryDiffEqLowStorageRKinfrastructure.✨ What’s included
AlJahdaliAdv3S*(advection-optimized)AlJahdaliVor3S*(vortex-optimized)algorithms.jllow_storage_rk_caches.jlalg_utils.jlOrdinaryDiffEqLowStorageRK.jl(exports)🧠 Implementation Details
LowStorageRK3SConstantCacheLowStorageRK3SCacheperform_step!for 3S* methods (no changes required)🧪 Testing
No regressions observed.
✅ Checklist
🔗 Additional context
Implements methods discussed in issue #2903.
These methods extend the solver suite with problem-specific optimized integrators for high-order DG discretizations, particularly useful in compressible flow and wave propagation problems.