Skip to content

WIP: Linear multistep Patankar schemes#182

Open
SKopecz wants to merge 63 commits into
mainfrom
sk/patankar_multistep
Open

WIP: Linear multistep Patankar schemes#182
SKopecz wants to merge 63 commits into
mainfrom
sk/patankar_multistep

Conversation

@SKopecz

@SKopecz SKopecz commented Dec 23, 2025

Copy link
Copy Markdown
Collaborator

This implements #107.

  • Out-of-place implementations
  • In-place implementations
  • Check stats count
  • Tests
  • Docs
  • Additional test problems
  • Benchmark diffusion test problem
  • Ensure that dt remains constant for all times (no changes by callbacks allowed)

@SKopecz

SKopecz commented Dec 23, 2025

Copy link
Copy Markdown
Collaborator Author

All the onestep MPRK/SSPMPRK and also the multistep Patankar schemes can be interpreted as sequences of MPE steps with slightly modified input data. Before continuing this PR we should implement a function like _permform_step_MPE! and rewrite the implementations of MPRK and SSPMPRK schemes. This will make the implementation of the multistep Patankar schemes easier and cleaner. The corresponding PR is #183 .

@codecov

codecov Bot commented Dec 23, 2025

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 16.35389% with 312 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/mplm.jl 0.00% 296 Missing ⚠️
src/mprk.jl 27.27% 16 Missing ⚠️

📢 Thoughts on this report? Let us know!

@coveralls

coveralls commented Dec 23, 2025

Copy link
Copy Markdown

Coverage Report for CI Build 27185234316

Coverage increased (+0.9%) to 98.233%

Details

  • Coverage increased (+0.9%) from the base build.
  • Patch coverage: 17 uncovered changes across 1 file (1844 of 1861 lines covered, 99.09%).
  • No coverage regressions found.

Uncovered Changes

File Changed Covered %
src/mplm.jl 1765 1748 99.04%
Total (3 files) 1861 1844 99.09%

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 3566
Covered Lines: 3503
Line Coverage: 98.23%
Coverage Strength: 61897107.54 hits per line

💛 - Coveralls

export MPLM22

export prob_pds_linmod, prob_pds_linmod_inplace, prob_pds_nonlinmod,
prob_pds_robertson, prob_pds_brusselator, prob_pds_sir,

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new problems need to be added here, to be found in the tests.

@SKopecz

SKopecz commented Feb 16, 2026

Copy link
Copy Markdown
Collaborator Author

The authors of the original paper kindly shared their code; consequently, the current out-of-place implementations of MPLM22, MPLM33, and MPLM43 yield the same results as those in the paper.

However, the implementation of the startup phase for these m-step methods is quite cumbersome and difficult to maintain. To achieve the required accuracy for the starting values, the authors utilize a sub-stepping strategy (dt/4) with nested lower-order MPLM schemes. This currently necessitates a redundant implementation: one for the standard perform_step! and another for a perform_substeps_MPLMXX function, which is used within the perform_step! of higher-order methods to compute initial values. This "double implementation" is error-prone and leads to significant code duplication.

Should we keep this sub-stepping strategy? If so, is there a way to eliminate the "double implementation"? Alternatively, we could use MPRK or MPDeC one-step schemes to compute the initial values. Since these are available for all orders, the reduced time step would not be necessary. However, this would also require implementations of these methods that can be integrated into the MPLM perform_step!.

@ranocha @JoshuaLampert Do you have any suggestions?

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.

4 participants