Tuning the bddc preconditioner


I have a symmetric indefinite matrix to solve,
K = [A, B]
[B^T -S].
Minres with a block diagonal preconditioner
M = [A^{-1} 0]
[0, S^{-1}]
works quite well for this particular system.

Here A is roughly a (h.o.) mass matrix and S is the diffusion operator.
I was wondering if the bddc preconditioner can be separately applied to the sub matrices A and S, instead of directly on the big matrix K by default?

Also, how can I change the coarsetype in bddc to other solvers like the ones in the petsc library?

Best regards,

You could set up two seperate bddc preconditioners and then use BlockMatrix.

This does not currently work with the PETSc interface, sorry.


How to apply bddc to submatrices? Do I need to create separate bilinear forms for each block, or can I directly work with the big bilinear form by providing the active dofs?
Here is a minimal code:

(u,p) , (v,q) = fes.TnT()
a = BilinearForm(fes, condense=True)
a += (u*v - grad(p)*grad(q))*dx
c = Preconditioner(a, "bddc") # change it to two bddc for each block

You need separate BilinearForms.