Skip to content

Conversation

@ChrisRackauckas-Claude
Copy link
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 <[email protected]>
@ChrisRackauckas
Copy link
Member

rebase

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

2 participants