Add StrangMarchuk second-order symmetric operator splitting#73
Merged
Conversation
Implement the classical ABA scheme for two operators A and B: A(dt/2) → B(dt) → A(dt/2), achieving second-order accuracy through symmetry. Closes SciML#10
Remove separate StrangMarchuk testset and instead add it to the main convergence and adaptive test loops alongside LieTrotterGodunov. This gives StrangMarchuk the same coverage: all nested splitting combinations, FakeAdaptive wrapper, and adaptive mode tests.
…, bibliography - Validate StrangMarchuk requires exactly 2 inner algorithms - Add convergence order test with non-commuting operators to verify first-order (LTG) vs second-order (SM) splitting accuracy - Add StrangMarchuk precompilation workload - Add Strang 1968 and Marchuk 1971 bibliography entries - Remove accidental OrdinaryDiffEqTsit5 from [deps]
termi-official
requested changes
May 9, 2026
Collaborator
termi-official
left a comment
There was a problem hiding this comment.
Formatting is needed and I left a comment.
Replace the hardcoded 2-operator implementation with a general N-operator palindromic sweep using @unroll, matching LTG's style. Add 3-operator test verifying iteration counts and solution accuracy. Update docs and docstrings for the general scheme.
termi-official
approved these changes
May 13, 2026
Collaborator
termi-official
left a comment
There was a problem hiding this comment.
LGTM. Thanks for ironing out the details here and adding the order tests!!
Contributor
Author
|
Can we tag a release? |
Collaborator
termi-official
referenced
this pull request
May 29, 2026
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
Implements the classical Strang-Marchuk ABA splitting scheme as requested in #10. For two operators A and B, the scheme performs A(Δt/2) → B(Δt) → A(Δt/2), achieving second-order accuracy through symmetry.
StrangMarchukalgorithm struct with inner constructor validating exactly 2 operatorsinit_cache, and_perform_step!insrc/solver.jlStrangMarchukfrom the main moduletry_snap_children_to_tstop!References
Closes #10
Test plan