- Thank you received: 6
Tuning the bddc preconditioner
- Guosheng Fu
- Topic Author
- Offline
- Elite Member
Less
More
4 years 4 months ago #2961
by Guosheng Fu
Tuning the bddc preconditioner was created by Guosheng Fu
Hi,
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,
Guosheng
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,
Guosheng
4 years 4 months ago #2962
by lkogler
Best,
Lukas
Replied by lkogler on topic Tuning the bddc preconditioner
You could set up two seperate bddc preconditioners and then use BlockMatrix.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?
This does not currently work with the PETSc interface, sorry.Also, how can I change the coarsetype in bddc to other solvers like the ones in the petsc library?
Best,
Lukas
- Guosheng Fu
- Topic Author
- Offline
- Elite Member
Less
More
- Thank you received: 6
4 years 4 months ago #2963
by Guosheng Fu
Replied by Guosheng Fu on topic Tuning the bddc preconditioner
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:
Here is a minimal code:
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
a.Assemble()
Time to create page: 0.113 seconds