[petsc-users] DMPlex with spring elements

Abhyankar, Shrirang G. abhyshr at mcs.anl.gov
Wed Sep 24 13:43:51 CDT 2014

>Thanks for your response. My discretization is based on spring elements.
>For the linear one dimensional case in which each spring has a
>coefficient k, their jacobian would be this two by two matrix.
>[  k    -k ]
>[ -k     k ]
>and the internal force
>[ k ( Ui - Uj) ]
>[ k ( Uj - Ui) ]
>where Ui and Uj are the node displacements (just one displacement per
>node because it's one dimensional)
>For the two dimensional case, assuming small deformations, we have a
>four-by-four matrix. Each node has two degrees of freedom. We obtain it
>by performing the outer product of the vector (t , -t) where "t" is the
>vector that connects both nodes in a spring. This is for the case of
>small deformations. I would need to assemble each spring contribution to
>the jacobian and the residual like they were finite elements. The springs
>share nodes, that's how they are connected. This example is just the
>linear case, I will have to implement a nonlinear case in a similar
>Seeing the DMNetwork example, I think it's what I need, although I don't
>know much of power electric grids and it's hard for me to understand
>what's going on. Do you have a good reference to be able to follow the

Please see the attached document which has more description of DMNetwork
and the equations for the power grid example. I don't have anything that
describes how the power grid example is implemented.

>For example, why are they adding components to the edges?
>475:     DMNetworkAddComponent

Each edge or node can have several components (limited to 10) attached to
it. The term components, taken from the circuit terminology, refers to the
elements of a network. For example, a component could be a resistor,
inductor, spring, or even edge/vertex weights (for graph problems). For
code implementation, component is a data structure that holds the data
needed for the residual, Jacobian, or any other function evaluation. In
the case of power grid, there are 4 components: branches or transmission
lines connecting nodes, buses or nodes, generators that are incident at a
subset of the nodes, and loads that are also incident at a subset of the
nodes. Each of the these components are defined by their data structures
given in pf.h.

DMNetwork is a wrapper class of DMPlex specifically for network
applications that can be solely described using nodes, edges, and their
associated components. If you have a PDE, or need FEM, or need other
advanced features then DMPlex would be suitable. Please send us a write-up
of your equations so that we can assist you better.


>On Tue, Sep 23, 2014 at 11:13 PM, Abhyankar, Shrirang G.
><abhyshr at mcs.anl.gov> wrote:
>You may also want to take a look at the DMNetwork framework that can be
>used for general unstructured networks that don't use PDEs. Its
>description is given in the manual and an example is in
>From:  Matthew Knepley <knepley at gmail.com>
>Date:  Tue, 23 Sep 2014 22:40:52 -0400
>To:  Miguel Angel Salazar de Troya <salazardetroya at gmail.com>
>Cc:  "petsc-users at mcs.anl.gov" <petsc-users at mcs.anl.gov>
>Subject:  Re: [petsc-users] DMPlex with spring elements
>>On Tue, Sep 23, 2014 at 4:01 PM, Miguel Angel Salazar de Troya
>><salazardetroya at gmail.com> wrote:
>>Hi all
>>I was wondering if it could be possible to build a model similar to the
>>example snes/ex12.c, but with spring elements (for elasticity) instead of
>>simplicial elements. Spring elements in a grid, therefore each element
>>would have two nodes and each node two components. There would be more
>>differences, because instead of calling the functions f0,f1,g0,g1,g2 and
>>g3 to build the residual and the jacobian, I would call a routine that
>>would build the residual vector and the jacobian matrix directly. I would
>>not have shape functions whatsoever. My problem is discrete, I don't have
>>a PDE and my equations are algebraic. What is the best way in petsc to
>>solve this problem? Is there any example that I can follow? Thanks in
>>Yes, ex12 is fairly specific to FEM. However, I think the right tools for
>>what you want are
>>DMPlex and PetscSection. Here is how I would proceed:
>>  1) Make a DMPlex that encodes a simple network that you wish to
>>  2) Make a PetscSection that gets the data layout right. Its hard from
>>the above
>>      for me to understand where you degrees of freedom actually are.
>>This is usually
>>      the hard part.
>>  3) Calculate the residual, so you can check an exact solution. Here you
>>use the
>>      PetscSectionGetDof/Offset() for each mesh piece that you are
>>interested in. Again,
>>      its hard to be more specific when I do not understand your
>>  Thanks,
>>    Matt
>>Miguel Angel Salazar de Troya
>>Graduate Research Assistant
>>Department of Mechanical Science and Engineering
>>University of Illinois at Urbana-Champaign
>>(217) 550-2360 <tel:%28217%29%20550-2360>
>>salaza11 at illinois.edu
>>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
>Miguel Angel Salazar de Troya
>Graduate Research Assistant
>Department of Mechanical Science and Engineering
>University of Illinois at Urbana-Champaign
>(217) 550-2360
>salaza11 at illinois.edu

-------------- next part --------------
A non-text attachment was scrubbed...
Name: dmnetwork-abstract.pdf
Type: application/pdf
Size: 195830 bytes
Desc: dmnetwork-abstract.pdf
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20140924/626b9d31/attachment-0001.pdf>

More information about the petsc-users mailing list