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

Preconditioner reuse #21868

Closed
reverendbedford opened this issue Aug 17, 2022 · 0 comments · Fixed by #21869
Closed

Preconditioner reuse #21868

reverendbedford opened this issue Aug 17, 2022 · 0 comments · Fixed by #21869
Labels
T: task An enhancement to the software.

Comments

@reverendbedford
Copy link
Contributor

reverendbedford commented Aug 17, 2022

Reason

Preconditioner reuse is a good trick to effectively reduce the computational cost of a simulation. The idea is that forming the preconditioner can be quite expensive, but often the structure of the problem only changes slowly over time. So you can reuse an old preconditioner at subsequent time steps quite effectively, avoiding the cost of reforming for many time steps.

As an example, imagine you use a full LU factorization as your preconditioner for GMRES. The first time you form the LU factorization the linear solve will converge in 1 iteration. If you keep reusing that LU factorization for multiple nonlinear iterations across multiple time steps it will often continue to work quite well.

Design

Use the new libmesh preconditioner reuse functionality to provide new options in the Executioner block:

  • reuse_preconditioner -- a bool, if true enable preconditioner reuse
  • reuse_preconditioner_max_its -- the heuristic is to continue to reuse the previously-constructed preconditioner until it takes this number of linear iterations to solve the linearized system. At that point reform a new preconditioner.

Impact

This will add a new feature and (should) not affect any existing functionality.

@reverendbedford reverendbedford added the T: task An enhancement to the software. label Aug 17, 2022
reverendbedford added a commit to reverendbedford/moose that referenced this issue Aug 17, 2022
reverendbedford added a commit to reverendbedford/moose that referenced this issue Aug 17, 2022
reverendbedford added a commit to reverendbedford/moose that referenced this issue Aug 17, 2022
reverendbedford added a commit to reverendbedford/moose that referenced this issue Aug 17, 2022
reverendbedford added a commit to reverendbedford/moose that referenced this issue Sep 2, 2022
lynnmunday pushed a commit to lynnmunday/moose that referenced this issue Sep 30, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
T: task An enhancement to the software.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant