[petsc-users] DMPlex assembly global stiffness matrix

Matthew Knepley knepley at gmail.com
Mon May 20 05:52:04 CDT 2019

On Fri, May 17, 2019 at 7:59 PM Josh L via petsc-users <
petsc-users at mcs.anl.gov> wrote:

> Hi,
> I have a DM that has 2 fields , and field #1 has 2 dofs and field #2 has 1
> dof.
> I only have dofs on vertex.
> Can I use the following to assemble global stiffness matrix instead of
> using MatSetClosure(I am not integrating 2 field separately)
> DMGetGlobalSection(dm,GlobalSection)
> For cells
>    calculate element stiffness matrix eleMat
>    For vertex in cells
>       PetscSectionGetOffset(GlobalSection, vertex, offset)
>       loc=[offset_v1, offset_v1+1, offset_v1+2,  offset_v2,
> offset_v2+1.......]
>     End
>     MatSetValues(GlobalMat, n,loc,n,loc, eleMat, ADD_VALUES)
> End
> AssemblyBegin and End.
> Basically use the offset from global section to have the global dof number.

Yes, that is exactly what happens in MatSetClosure(). However, you have to
be careful if you use
constraints (like Dirichlet conditions) in the Section to filter them out.
I use negative indices to do that
since they are ignored by MatSetValues().

Are you doing this because you want to set one field at a time? If so, just
call DMCreateSubDM() for that
field, and everything should work correctly with MatSetClosure().



> Thanks,
> Josh

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/20190520/7491df88/attachment.html>

More information about the petsc-users mailing list