Skip to content

Add StrangMarchuk second-order symmetric operator splitting#45

Closed
ChrisRackauckas-Claude wants to merge 1 commit into
SciML:mainfrom
ChrisRackauckas-Claude:investigate-issue-10
Closed

Add StrangMarchuk second-order symmetric operator splitting#45
ChrisRackauckas-Claude wants to merge 1 commit into
SciML:mainfrom
ChrisRackauckas-Claude:investigate-issue-10

Conversation

@ChrisRackauckas-Claude
Copy link
Copy Markdown
Contributor

Summary

Implements the classical Strang-Marchuk ABA splitting scheme as requested in #10. This is a second-order symmetric operator splitting algorithm that achieves higher accuracy than the first-order Lie-Trotter-Godunov scheme through symmetry.

For two operators A and B, the scheme performs:

  • A(dt/2) -> B(dt) -> A(dt/2)

Changes

  • Added StrangMarchuk algorithm struct in src/solver.jl
  • Added StrangMarchukCache cache struct
  • Implemented init_cache and advance_solution_to! for the ABA scheme
  • Exported StrangMarchuk from the main module
  • Extended existing tests to also cover StrangMarchuk

References

  • G. Strang, On the construction and comparison of difference schemes, SIAM Journal on Numerical Analysis, 5 (1968), pp. 506-517
  • G. I. Marchuk, On the theory of the splitting-up method, in Numerical Solution of Partial Differential Equations-II, Academic Press, 1971, pp. 469-500

Closes #10

Test plan

  • All existing tests pass with StrangMarchuk included in the test matrix
  • Tests run locally with Pkg.test() - 369 tests pass
  • CI passes

cc @ChrisRackauckas

🤖 Generated with Claude Code

Implements the classical Strang-Marchuk ABA splitting scheme which achieves
second-order accuracy through symmetry. For two operators A and B, the scheme
performs:
- A(dt/2) -> B(dt) -> A(dt/2)

This is an improvement over the first-order Lie-Trotter-Godunov scheme
(A(dt) -> B(dt)) and is commonly used for semidiscrete exponential propagator
(EP) problems.

Closes SciML#10

References:
* G. Strang, On the construction and comparison of difference schemes, SIAM
  Journal on Numerical Analysis, 5 (1968), pp. 506-517
* G. I. Marchuk, On the theory of the splitting-up method, in Numerical Solution
  of Partial Differential Equations-II, Academic Press, 1971, pp. 469-500

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@ChrisRackauckas
Copy link
Copy Markdown
Member

rebase

@oameye
Copy link
Copy Markdown
Contributor

oameye commented May 8, 2026

Hey, this is exactly within me needs at the moment. I know it are busy times with the OrdinaryDiffEq v8 release, but can I help to move this forward?

@termi-official
Copy link
Copy Markdown
Collaborator

I did the first big refactoring of the internals with the last release (v0.3) of this package, but we need another round of refactoring to reuse more of the new OrdinaryDiffEqCore infrastructure from the latest release (OrdinaryDiffEq v7).

This brach does unfurtunately not work anymore due to the latest changes (and there were some issues anyway), but you can make a PR to implement and test Strang-Marchuk if you want.

@termi-official
Copy link
Copy Markdown
Collaborator

Superseded by #73

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.

Strang-Marchuk

4 participants