[petsc-users] Solving block systems with some null diagonal blocks

Matthew Knepley knepley at gmail.com
Mon Mar 25 12:27:44 CDT 2019


On Mon, Mar 25, 2019 at 8:07 AM Manuel Colera Rico via petsc-users <
petsc-users at 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/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20190325/50fc48e1/attachment.html>


More information about the petsc-users mailing list