[petsc-users] DMPlex with spring elements

Abhyankar, Shrirang G. abhyshr at mcs.anl.gov
Fri Sep 26 10:53:29 CDT 2014


What Matt is saying is that there are two interfaces in PETSc for setting
the residual evaluation routine:

i) SNESSetFunction takes in a function pointer for the residual evaluation
routine that has the prototype
                 PetscErrorCode xyzroutine(SNES snes, Vec X, Vec F, void*
ctx);

X and F are the "global" solution and residual vectors. To compute the
global residual evaluation, typically one does -- (a) scattering X and F
onto local vectors localX and localF (DMGlobalToLocal), (b) computing the
local residual, and (c) gathering the localF in the global F
(DMLocalToGlobal). This is what is done in the example.

ii) DMSNESSetFunctionLocal takes in a function pointer for the residual
evaluation routine that has the prototype
                 PetscErrorCode xyzlocalroutine(DM, Vec localX, localF,
void* ctx)

In this case, the localX and localF get passed to the routine. So, you
only have to do the local residual evaluation. PETSc does the
LocalToGlobal gather to form the global residual.

I chose to use SNESSetFunction in the example. You can use either of them.

Shri

From:  Matthew Knepley <knepley at gmail.com>
Date:  Fri, 26 Sep 2014 10:28:26 -0500
To:  Miguel Angel Salazar de Troya <salazardetroya at gmail.com>
Cc:  Jed Brown <jed at jedbrown.org>, Shri <abhyshr at mcs.anl.gov>,
"petsc-users at mcs.anl.gov" <petsc-users at mcs.anl.gov>
Subject:  Re: [petsc-users] DMPlex with spring elements


>On Fri, Sep 26, 2014 at 10:26 AM, Miguel Angel Salazar de Troya
><salazardetroya at gmail.com> wrote:
>
>Yeah, but doesn't it only work with the local vectors localX and localF?
>
>
>
>I am telling you what the interface for the functions is. You can do
>whatever you want inside.
>
>  Matt
> 
>
>Miguel
>
>On Fri, Sep 26, 2014 at 10:10 AM, Matthew Knepley <knepley at gmail.com>
>wrote:
>
>On Fri, Sep 26, 2014 at 10:06 AM, Miguel Angel Salazar de Troya
><salazardetroya at gmail.com> wrote:
>
>That means that if we call SNESSetFunction() we don't build the residual
>vector in parallel? In the pflow example
>(http://www.mcs.anl.gov/petsc/petsc-as/petsc-current/src/snes/examples/tut
>orials/network/pflow/pf.c.html) the function FormFunction() (Input for
>SNESSetFunction() works with the local vectors. I don't understand this.
>
>
>
>FormFunction() in that link clearly takes in a global vector X and
>returns a global vector F. Inside, it
>converts them to local vectors. This is exactly what you would do for a
>function given to SNESSetFunction().
>
>  Matt
> 
>
>
>Thanks
>Miguel
>
>
>On Fri, Sep 26, 2014 at 9:34 AM, Matthew Knepley <knepley at gmail.com>
>wrote:
>
>On Fri, Sep 26, 2014 at 9:31 AM, Miguel Angel Salazar de Troya
><salazardetroya at gmail.com> wrote:
>
>Thanks. I had another question about the DM and SNES and TS. There are
>similar routines to assign the residual and jacobian evaluation to both
>objects. For the SNES case are:
>DMSNESSetFunctionLocal
>DMSNESSetJacobianLocal
>
>What are the differences of these with:
>
>SNESSetFunction
>SNESSetJacobian
>
>
>
>
>SNESSetFunction() expects the user to construct the entire parallel
>residual vector. DMSNESSetFunctionLocal()
>expects the user to construct the local pieces of the residual, and then
>it automatically calls DMLocalToGlobal()
>to assembly the full residual. It also converts the input from global
>vectors to local vectors, and in the case of
>DMDA multidimensional arrays.
>
>  Thanks,
>
>    Matt
> 
>
>and when should we use each? With "Local", it is meant to evaluate the
>function/jacobian for the elements in the local processor? I could get
>the local edges in DMNetwork by calling DMNetworkGetEdgeRange?
>
>Miguel
>
>
>On Thu, Sep 25, 2014 at 5:17 PM, Matthew Knepley <knepley at gmail.com>
>wrote:
>
>
>
>On Thu, Sep 25, 2014 at 5:15 PM, Miguel Angel Salazar de Troya
><salazardetroya at gmail.com> wrote:
>
>> If you need a symmetric Jacobian, you can use the BC facility in
>> PetscSection, which eliminates the
>> variables completely. This is how the FEM examples, like ex12, work.
>Would that be with PetscSectionSetConstraintDof ? For that I will need
>the PetscSection, DofSection, within DMNetwork, how can I obtain it? I
>could cast it to DM_Network from the dm, networkdm,  declared in the main
>program, maybe something like this:
>DM_Network     *network = (DM_Network*) networkdm->data;Then I would loop
>over the vertices and call PetscSectionSetConstraintDof if it's a
>boundary node (by checking the corresponding component)
>
>
>
>
>I admit to not completely understanding DMNetwork. However, it eventually
>builds a PetscSection for data layout, which
>you could get from DMGetDefaultSection(). The right thing to do is find
>where it builds the Section, and put in your BC
>there, but that sounds like it would entail coding.
>
>  Thanks,
>
>     Matt
>
>
> 
>
>Thanks for your responses.Miguel
>
>
>
>
>On Thu, Sep 25, 2014 at 2:42 PM, Jed Brown <jed at jedbrown.org> wrote:
>
>Matthew Knepley <knepley at gmail.com> writes:
>
>> On Thu, Sep 25, 2014 at 1:46 PM, Abhyankar, Shrirang G.
>><abhyshr at mcs.anl.gov
>>> wrote:
>>
>>> You are right. The Jacobian for the power grid application is indeed
>>> non-symmetric. Is that a problem for your application?
>>>
>>
>> If you need a symmetric Jacobian, you can use the BC facility in
>> PetscSection, which eliminates the
>> variables completely. This is how the FEM examples, like ex12, work.
>
>You can also use MatZeroRowsColumns() or do the equivalent
>transformation during assembly (my preference).
>
>
>
>
>
>
>
>
>-- 
>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 <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 <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 <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



More information about the petsc-users mailing list