[petsc-users] Question about PCFieldSplit

Matthew Knepley knepley at gmail.com
Wed Jun 23 05:15:29 CDT 2021


On Wed, Jun 23, 2021 at 12:51 AM Patrick Sanan <patrick.sanan at gmail.com>
wrote:

> Hi Zakariae -
>
> The usual way to do this is to define an IS (index set) with the degrees
> of freedom of interest for the rows, and another one for the columns, and
> then use MatCreateSubmatrix [1] .
>
> There's not a particularly convenient way to create an IS with the degrees
> of freedom corresponding to a particular "stratum" (i.e. elements, faces,
> edges, or vertices) of a DMStag, but fortunately I believe we have some
> code to do exactly this in a development branch.
>
> I'll track it down and see if it can quickly be added to the main branch.
>

Note that an easy way to keep track of this would be to create a section
with the different locations as fields. This Section could then
easily create the ISes, and could automatically interface with PCFIELDSPLIT.

  Thanks,

     Matt


>
> [1]:
> https://petsc.org/release/docs/manualpages/Mat/MatCreateSubMatrix.html
>
> Am 22.06.2021 um 22:29 schrieb Jorti, Zakariae <zjorti at lanl.gov>:
>
> Hello,
>
> I am working on DMStag and I have one dof on vertices (let us call it V), one
> dof on edges (let us call it E), one dof on faces ((let us call it F)) and
> one dof on cells (let us call it C).
> I build a matrix on this DM, and I was wondering if there was a way to
> get blocks (or sub matrices) of this matrix corresponding to specific
> degrees of freedom, for example rows corresponding to V dofs and columns
> corresponding to E dofs.
> I already asked this question before and the answer I got was I could call PCFieldSplitSetDetectSaddlePoint
> with the diagonal entries being of the matrix being zero or nonzero.
> That worked well. Nonetheless, I am curious to know if there was another
> alternative that does not require creating a dummy matrix with
> appropriate diagonal entries and solving a dummy linear system with this
> matrix to define the splits.
>
>
> Many thanks.
>
> Best regards,
>
> Zakariae
> ------------------------------
> *From:* petsc-users <petsc-users-bounces at mcs.anl.gov> on behalf of Tang,
> Qi <tangqi at msu.edu>
> *Sent:* Sunday, April 18, 2021 11:51:59 PM
> *To:* Patrick Sanan
> *Cc:* petsc-users at mcs.anl.gov; Tang, Xianzhu
> *Subject:* [EXTERNAL] Re: [petsc-users] Question about PCFieldSplit
>
> Thanks a lot, Patrick. We appreciate your help.
>
> Qi
>
>
>
> On Apr 18, 2021, at 11:30 PM, Patrick Sanan <patrick.sanan at gmail.com>
> wrote:
>
> We have this functionality in a branch, which I'm working on cleaning up
> to get to master. It doesn't use PETScSection. Sorry about the delay!
>
> You can only use PCFieldSplitSetDetectSaddlePoint when your diagonal
> entries being zero or non-zero defines the splits correctly.
>
> Am 17.04.2021 um 21:09 schrieb Matthew Knepley <knepley at gmail.com>:
>
> On Fri, Apr 16, 2021 at 8:39 PM Jorti, Zakariae via petsc-users <
> petsc-users at mcs.anl.gov> wrote:
>
>> 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
>> <https://urldefense.com/v3/__https://www.mcs.anl.gov/petsc/petsc-master/src/ksp/ksp/tutorials/ex43.c.html__;!!HXCxUKc!jbBwV2h9luOW4dtBcNh6n_W1ULQnSVeXpxl0Ef1752s4Hlef-nC2JcnksFSO3Q$>
>> ):
>> 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?
>>
> That will not work.That interface only works for colocated fields that you
> get from DMDA.
>
> Patrick, does DMSTAG use PetscSection? Then the field split would be
> automatically calculated. If not, does it maintain the
> field division so that it could be given to PCFIELDSPLIT as ISes?
>
>   Thanks,
>
>      Matt
>
>> 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
>>
>>
>
> --
> 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/
> <https://urldefense.com/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!HXCxUKc!jbBwV2h9luOW4dtBcNh6n_W1ULQnSVeXpxl0Ef1752s4Hlef-nC2JcmGgSwfag$>
>
>
>

-- 
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/20210623/7e330b7c/attachment.html>


More information about the petsc-users mailing list