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

JacobiPC and SliceJacobiPC for all-at-once-system #162

Merged
merged 32 commits into from
Feb 27, 2024
Merged

Conversation

JHopeCollins
Copy link
Member

@JHopeCollins JHopeCollins commented Jan 17, 2024

This PR implements two new preconditioners for the all-at-once system. Each one builds an approximation to the all-at-once Jacobian and applies an (approximate) solve.

  1. A block Jacobi preconditioner JacobiPC. This forms the preconditioner from the blocks on the diagonal of the all-at-once system. These blocks are real-valued and have no time average approximation (unless you ask for it), but there is no coupling between the timesteps.

  2. A "slice Jacobi" preconditioner SliceJacobiPC. This forms a preconditioner from blocks of several timesteps of the all-at-once Jacobian. The timesteps are coupled within each block, but not between blocks. Another all-at-once preconditioner can be applied to each of these blocks, for example applying CirculantPC to smaller slices of the full timeseries. In this case, the circulant preconditioner in each slice would use the time average from the local slice which would hopefully reduce this error source.

Other additions in this PR

  • Base classes for all-at-once preconditioners.
  • Renaming DiagFFTPC -> CirculantPC
  • A LinearSolver class that solves a ksp with the AllAtOnceJacobian. This does not build the rhs including the initial condition like the AllAtOnceSolver does so unless you provide it with an appropriate rhs it will not solve for an all-at-once-system timeseries.
  • A split_ensemble function for taking a large Ensemble and creating smaller sub Ensembles defined over only part of the large one.

@JHopeCollins JHopeCollins added enhancement New feature or request Core functionality Adding to the main paradiag functionality labels Jan 17, 2024
@JHopeCollins JHopeCollins added the performance Improving or fixing the computational performance label Jan 31, 2024
@JHopeCollins JHopeCollins marked this pull request as ready for review February 5, 2024 15:48
@JHopeCollins JHopeCollins self-assigned this Feb 22, 2024
@JHopeCollins JHopeCollins merged commit 7419a03 into master Feb 27, 2024
1 check passed
@JHopeCollins JHopeCollins deleted the jacobipc branch February 27, 2024 15:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Core functionality Adding to the main paradiag functionality enhancement New feature or request performance Improving or fixing the computational performance
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants