Skip to content

Add MREEF multirate extrapolated explicit Euler solver with tests#3139

Open
singhharsh1708 wants to merge 10 commits intoSciML:masterfrom
singhharsh1708:multirate-exploration
Open

Add MREEF multirate extrapolated explicit Euler solver with tests#3139
singhharsh1708 wants to merge 10 commits intoSciML:masterfrom
singhharsh1708:multirate-exploration

Conversation

@singhharsh1708
Copy link
Copy Markdown

Checklist:
Appropriate tests were added
Any code changes were done in a way that does not break public API
All documentation related to code changes were updated
The new code follows the
contributor guidelines
, in particular the SciML Style Guide
andCOLPRAC
Any new documentation only uses public API
Additional context:
This PR adds MREEF (Multirate Extrapolated Explicit Euler), based on Constantinescu & Sandu (2010).
The method targets SplitODEProblem systems and combines multirate Euler base steps with Richardson extrapolation to achieve higher-order accuracy.

Basic convergence tests and compatibility checks (SplitODEProblem, ForwardDiff, StaticArrays, complex states) were added under test/multirate/mreef_tests.jl. All existing OrdinaryDiffEqLowOrderRK tests pass locally with no regressions.

This implementation was mainly developed to better understand the solver architecture in OrdinaryDiffEq and to explore multirate methods.

@singhharsh1708
Copy link
Copy Markdown
Author

It looks like GPU CI is failing with a runtime error. I'm investigating the issue and will check compatibility with JLArrays / GPU backends.
Locally, all CPU tests pass including ForwardDiff, StaticArrays, and complex states. I'll update shortly once I identify the exact failure.

@singhharsh1708
Copy link
Copy Markdown
Author

singhharsh1708 commented Mar 17, 2026

All CI checks are now passing.
the FBDF GPU test was previously marked as @test_broken but is now passing, so it has been updated to @test. i reverted this change and project.toml change both

@singhharsh1708 singhharsh1708 force-pushed the multirate-exploration branch from ffd5007 to 55f3a50 Compare March 17, 2026 10:24
@singhharsh1708 singhharsh1708 force-pushed the multirate-exploration branch from d299219 to d1a5f65 Compare March 18, 2026 05:51
@singhharsh1708
Copy link
Copy Markdown
Author

rebased onto latest upstream/master and cleaned up the changes CI is passing now

@ChrisRackauckas
Copy link
Copy Markdown
Member

Rebase onto the new testing infrastructure.

@singhharsh1708 singhharsh1708 force-pushed the multirate-exploration branch from d1a5f65 to b96517f Compare March 19, 2026 19:05
@singhharsh1708
Copy link
Copy Markdown
Author

singhharsh1708 commented Mar 20, 2026

@ChrisRackauckas Rebased onto latest upstream/master and applied runic formatting fixes. All checks should now pass.

@singhharsh1708 singhharsh1708 force-pushed the multirate-exploration branch from f528e81 to 69b62f1 Compare March 20, 2026 19:05
@singhharsh1708
Copy link
Copy Markdown
Author

@ChrisRackauckas can you run test on this?

@singhharsh1708
Copy link
Copy Markdown
Author

@ChrisRackauckas is this correct now?

@singhharsh1708
Copy link
Copy Markdown
Author

singhharsh1708 commented Mar 22, 2026

@ChrisRackauckas
Addressed all review comments:
Moved MREEF to new OrdinaryDiffEqMultirate subpackage
Added docstring via generic_solver_docstring
Fixed per-step allocation: T pre-allocated in cache
Fixed alias: using @.. in-place assignment
Removed integrator.k pointer reassignments
Convergence tests now use DiffEqDevTools.test_convergence with analytic solution
Stats test: nf ≈ m * nf2 atol=m (offset from initialize! contributing 1 to each counter)
FSAL + Hermite interpolation flagged for follow-up PR
19/19 tests passing, Runic formatted. CI running.

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.

3 participants