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

Generic Block solvers #49

Merged
merged 17 commits into from
Jan 14, 2024
Merged

Generic Block solvers #49

merged 17 commits into from
Jan 14, 2024

Conversation

JordiManyer
Copy link
Member

@JordiManyer JordiManyer commented Dec 13, 2023

The aim of this PR is the implementation of generic (linear/nonlinear), hierarchical block preconditioners.

The idea is that we want to have a preconditioner with a block structure, such that each block can be a regular solver (Direct/Iterative) or another block solver. Moreover, the iterative solvers can themselves be preconditioned.

Another difficulty is the fact that some of the blocks can be nonlinear (i.e the matrix for that block changes every time the solver is called) and possibly are NOT the system matrix (i.e the case of a preconditioner that changes at each nonlinear iteration but which requires integrating it's own components).

All in all, I have identified three types of blocks:

  • Blocks that solve the system matrix block (which can be linear or nonlinear).
  • Blocks that solve an alternative fixed matrix which is not the matrix from the linear system (always linear).
  • Blocks that solve an alternative problem given with a weakform (linear or nonlinear).

In addition, I also aim to implement structures that allow for efficient re-assembly of block systems: In most cases, not all the blocks in a multi-physics problem will have non-linearity. For instance, in the MHD equations only the u-u block has the Navier-Stokes nonlinear term. We would like to exploit this and only re-assemble the blocks containing that non-linearity. To this purpose:

  • We will require a BlockFEOperator, which has knowledge of which blocks are nonlinear.
  • We will require the weakform to also be block-wise, i.e a BlockFunctional type of object.

Other stuff:

  • GMRES/FGMRES: Restart mode and modified how iterations are counted.
  • Added enhanced version of NewtonRaphson solver. Very similar to the one in Gridap, but with better logging and control of tolerances.

@JordiManyer JordiManyer added the enhancement New feature or request label Dec 13, 2023
@JordiManyer JordiManyer self-assigned this Dec 13, 2023
@JordiManyer JordiManyer changed the base branch from main to develop December 13, 2023 01:59
@JordiManyer JordiManyer mentioned this pull request Dec 31, 2023
25 tasks
@JordiManyer JordiManyer merged commit 960f6fa into develop Jan 14, 2024
1 of 2 checks passed
@JordiManyer JordiManyer deleted the block-solvers branch December 5, 2024 03:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant