Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bounds-preserving time integration #48

Merged
merged 39 commits into from
Dec 20, 2024
Merged

Bounds-preserving time integration #48

merged 39 commits into from
Dec 20, 2024

Conversation

najlkin
Copy link
Collaborator

@najlkin najlkin commented Nov 20, 2024

This PR adds invariant domain preserving (IDP) time integrators based on explicit Runge-Kutta (ERK) methods. The implementation is general, where RKIDPSolver class converts any ERK scheme with non-decreasing time levels to the IDP form following the methodology of Alexandre Ern and Jean-Luc Guermond, Invariant-Domain-Preserving High-Order Time Stepping: I. Explicit Runge--Kutta Schemes, SIAM Journal on Scientific Computing, 44:5, A3366-A3392, 2022. The idea is that updates between consecutive stages are performed instead of a linear combination of the states, which enables sequential limiting for each new stage. Due to this kind of sub-stepping, the CFL criterion is also relaxed to these stage differences.

@najlkin najlkin requested a review from vladotomov November 20, 2024 02:14
@najlkin najlkin self-assigned this Nov 20, 2024
@najlkin najlkin requested a review from artv3 November 20, 2024 19:51
@najlkin
Copy link
Collaborator Author

najlkin commented Dec 5, 2024

I guess I know why it was not passing the regression, we turned off the clipping of the values here to see the undershoots 🤔 .

@vladotomov
Copy link
Member

I guess I know why it was not passing the regression, we turned off the clipping of the values here to see the undershoots 🤔 .

Aaaaa yes, that's why it failed only for RK2.

@najlkin
Copy link
Collaborator Author

najlkin commented Dec 7, 2024

Ahh, ok, it is clear to me what is happening with mass. It is not a bug 🐛 , but design 😄 The thing is HO solution is being combined to get HO update, which is then limited by a single forward Euler step of LO solution. So LO solution is LO time integrated. If we want it HO integrated, we need to combine it too, but that complicates the design quite a bit 🤔 . I thought there is no gain from LO solution being HO integrated, but I forgot it is non-conservative, so the mass convergence is affected.

@najlkin
Copy link
Collaborator Author

najlkin commented Dec 7, 2024

But a question is: is HO time-integrated LO solution bounds-preserving? 🤔 And can be the previous limited solution interchanged with the LO one for calculation of the new (kind of) LO solution?

Copy link
Member

@vladotomov vladotomov left a comment

Choose a reason for hiding this comment

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

Thank you for the new method @najlkin!

@vladotomov vladotomov merged commit 9f46138 into master Dec 20, 2024
1 check passed
@vladotomov vladotomov deleted the time-dev branch December 20, 2024 01:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants