[petsc-users] Question about PCFieldSplit

Jorti, Zakariae zjorti at lanl.gov
Fri Apr 16 19:39:28 CDT 2021


Hello,


I have a DMStag grid with one dof on each edge and face center.

I want to use a PCFieldSplit preconditioner on a Jacobian matrix that I assume is already split but I am not sure how to determine the fields.

In the DMStag examples (ex2.c and ex3.c), the function PCFieldSplitSetDetectSaddlePoint is used to determine those fields based on zero diagonal entries. In my case, I have a Jacobian matrix that does not have zero diagonal entries.

Can I use that PCFieldSplitSetDetectSaddlePoint in this case?

If not, how should I do?

Should I do like this example (https://www.mcs.anl.gov/petsc/petsc-master/src/ksp/ksp/tutorials/ex43.c.html):

const PetscInt Bfields[1] = {0},Efields[1] = {1};

KSPGetPC(ksp,&pc);

PCFieldSplitSetBlockSize(pc,2);

PCFieldSplitSetFields(pc,"B",1,Bfields,Bfields); PCFieldSplitSetFields(pc,"E",1,Efields,Efields);

where my B unknowns are defined on face centers and E unknowns are defined on edge centers?


One last thing, I do not know which field comes first. Is it the one defined for face dofs or edge dofs.


Thank you.

Best regards,


Zakariae
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20210417/992c4eae/attachment.html>


More information about the petsc-users mailing list