OK, thank you Matt.
Manuel
---
On 3/25/19 6:27 PM, Matthew Knepley wrote:
On Mon, Mar 25, 2019 at 8:07 AM Manuel Colera Rico via petsc-users
<petsc-users@mcs.anl.gov <mailto:petsc-users@mcs.anl.gov>> wrote:
Hello,
I would like to solve a N*N block system (with N>2) in which some
of the
diagonal blocks are null. My system matrix is defined as a
MatNest. As
N>2, I can't use "pc_fieldsplit_type schur" nor
"pc_fieldsplit_detect_saddle_point". The other algorithms
("additive",
"multiplicative" and "symmetric_multiplicative") don't work either as
they need each A_ii to be non-zero.
Is there any built-in function in PETSc for this? If not, could you
please suggest a workaround?
You can just shove all of the rows with nonzero diagonal in one field,
and all with zero diagonal in another, and do Schur. This is what
-pc_fieldsplit_detect_saddle_point
does. However, you have to understand the Schur complement to solve it
efficiently. More generally, you can recursively split the matrix,
which is what I do for many multiphysics problems.
Thanks,
Matt
Thanks and kind regards,
Manuel
---
--
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which
their experiments lead.
-- Norbert Wiener
https://www.cse.buffalo.edu/~knepley/
<http://www.cse.buffalo.edu/~knepley/>