[petsc-users] DMPlex : Assemble global stiffness matrix problem

Matthew Knepley knepley at gmail.com
Tue Mar 8 11:47:21 CST 2016


On Tue, Mar 8, 2016 at 7:10 AM, Matthew Knepley <knepley at gmail.com> wrote:

> On Mon, Mar 7, 2016 at 1:28 PM, Morten Nobel-Jørgensen <mono at mek.dtu.dk>
> wrote:
>
>> I have some problems using DMPlex on unstructured grids in 3D.
>>
>> After I have created the DMPlex and assigned dofs (3 dofs on each node),
>> I run into some problems when assembling the global stiffness matrix. I
>> have created a small example in the attached cc file. My problems are:
>>
>>    - It seems like the matrix (created using DMCreateMatrix) contains no
>>    non-zero elements. I was under the impression that the sparsity pattern of
>>    the matrix would be created automatically when the dofs has been assigned
>>    to the default section.
>>    - (Probably as a consequence of this) when assigning values to the
>>    matrix I get an: "Argument of of range. New nonzero at (0,0) caused a
>>    malloc. Use MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR,
>>    PETSC_FALSE) to turn off this check"
>>    - Finally, I'm reading the nodes of each element using the
>>    get-transitive-clojure (where I test if each point is inside the node
>>    range), but I have a hard time understanding if the returned values are
>>    sorted. And if not, how to sort the values (e.g. using orientation which
>>    the get-transitive-clojure function also returns).
>>
>> I hope someone can guide me in the right direction :)
>>
>
> I will take a look today or tomorrow. The first thing to do is to look at
> the nonzero pattern of the Jacobian. I use -mat_view draw -draw_pause -1
>

I admit that this problem is counter-intuitive, and I will think about a
good error check. The problem is that I allow "inconsistent"
sections, meaning that the dof for each field do not add up to the total
dof. In your code, when you call

      ierr = PetscSectionSetDof(s, v, 3);CHKERRQ(ierr);

you should also call

      ierr = PetscSectionSetFieldDof(s, v, 0, 3);CHKERRQ(ierr);

Then everything works. I am attaching my slight rewrite of your code.

  Thanks,

    Matt


>   Thanks,
>
>     Matt
>
>
>> Kind regards,
>> Morten
>>
>
>
>
> --
> 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
>



-- 
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20160308/adb56854/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ex18.c
Type: text/x-csrc
Size: 4252 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20160308/adb56854/attachment.c>


More information about the petsc-users mailing list