[petsc-users] DMNetworkGetEdgeRange() in parallel

Miguel Angel Salazar de Troya salazardetroya at gmail.com
Mon Feb 23 13:40:35 CST 2015


Wouldn't including the edge variables in the global vector make the code
slower? I'm using the global vector in a TS, using one of the explicit RK
schemes. The edge variables would not be updated in the RHSFunction
evaluation. I only change the edge variables in the TSUpdate. If the global
vector had the edge variables, it would be a much larger vector, and all
the vector operations performed by the TS would be slower. Although the
vector F returned by the RHSFunction would be zero in the edge variable
components. I guess that being the vector sparse that would not be a
problem.

I think I'm more interested in the PetscSection approach because it might
require less modifications in my code. However, I don't know how I could do
this. Maybe something like this?

PetscSectionCreate(PETSC_COMM_WORLD, &s);
PetscSectionSetNumFields(s, 1);
PetscSectionSetFieldComponents(s, 0, 1);

// Now to set the chart, I pick the edge range

DMNetworkGetEdgeRange(dm, & eStart, & eEnd

PetscSectionSetChart(s, eStart, eEnd);

for(PetscInt e = eStart; c < eEnd; ++e) {
     PetscSectionSetDof(s, e, 1);
     PetscSectionSetFieldDof(s, e, 1, 1);
}
PetscSectionSetUp(s);

Now in the manual I see this:

DMSetDefaultSection(dm, s);
DMGetLocalVector(dm, &localVec);
DMGetGlobalVector(dm, &globalVec);

Setting up the default section in the DM would interfere with the section
already set up with the variables in the vertices?

Thanks a lot for your responses.



On Mon, Feb 23, 2015 at 11:37 AM, Matthew Knepley <knepley at gmail.com> wrote:

> On Mon, Feb 23, 2015 at 9:27 AM, Miguel Angel Salazar de Troya <
> salazardetroya at gmail.com> wrote:
>
>> I'm iterating through local edges given in DMNetworkGetEdgeRange(). For
>> each edge, I extract or modify its corresponding value in a global petsc
>> vector. Therefore that vector must have as many components as edges there
>> are in the network. To extract the value in the vector, I use VecGetArray()
>> and a variable counter that is incremented in each iteration. The array
>> that I obtain in VecGetArray() has to be the same size than the edge
>> range. That variable counter starts as 0, so if the array that I obtained
>> in VecGetArray() is x_array, x_array[0] must be the component in the
>> global vector that corresponds with the start edge given in
>> DMNetworkGetEdgeRange()
>>
>> I need that global petsc vector because I will use it in other
>> operations, it's not just data. Sorry for the confusion. Thanks in advance.
>>
>
> This sounds like an assembly operation. The usual paradigm is to compute
> in the local space, and then communicate to get to the global space. So you
> would make a PetscSection that had 1 (or some) unknowns on each cell (edge)
> and then you can use DMCreateGlobal/LocalVector() and DMLocalToGlobal() to
> do this.
>
> Does that make sense?
>
>   Thanks,
>
>      Matt
>
>
>> Miguel
>>
>>
>> On Mon, Feb 23, 2015 at 9:09 AM, Matthew Knepley <knepley at gmail.com>
>> wrote:
>>
>>> On Mon, Feb 23, 2015 at 8:42 AM, Miguel Angel Salazar de Troya <
>>> salazardetroya at gmail.com> wrote:
>>>
>>>> Thanks, that will help me. Now what I would like to have is the
>>>> following: if I have two processors and ten edges, the partitioning results
>>>> in the first processor having the edges 0-4 and the second processor, the
>>>> edges 5-9. I also have a global vector with as many components as edges,
>>>> 10. How can I partition it so the first processor also has the 0-4
>>>> components and the second, the 5-9 components of the vector?
>>>>
>>> I think it would help to know what you want to accomplish. This is how
>>> you are proposing to do it.'
>>>
>>> If you just want to put data on edges, DMNetwork has a facility for that
>>> already.
>>>
>>>   Thanks,
>>>
>>>      Matt
>>>
>>>
>>>> Miguel
>>>> On Feb 23, 2015 8:08 AM, "Abhyankar, Shrirang G." <abhyshr at mcs.anl.gov>
>>>> wrote:
>>>>
>>>>>  Miguel,
>>>>>    One possible way is to store the global numbering of any
>>>>> edge/vertex in the "component" attached to it. Once the mesh gets
>>>>> partitioned, the components are also distributed so you can easily retrieve
>>>>> the global number of any edge/vertex by accessing its component. This is
>>>>> what is done in the DMNetwork example pf.c although the global numbering is
>>>>> not used for anything.
>>>>>
>>>>>  Shri
>>>>>  From: Matthew Knepley <knepley at gmail.com>
>>>>> Date: Mon, 23 Feb 2015 07:54:34 -0600
>>>>> 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] DMNetworkGetEdgeRange() in parallel
>>>>>
>>>>>   On Sun, Feb 22, 2015 at 3:59 PM, Miguel Angel Salazar de Troya <
>>>>> salazardetroya at gmail.com> wrote:
>>>>>
>>>>>> Thanks. Once I obtain that Index Set with the routine DMPlexCreateCellNumbering()
>>>>>> (I assume that the edges in DMNetwork correspond to cells in DMPlex) can I
>>>>>> use it to partition a vector with as many components as edges I have in my
>>>>>> network?
>>>>>>
>>>>>
>>>>>  I do not completely understand the question.
>>>>>
>>>>>  If you want a partition of the edges, you can use
>>>>> DMPlexCreatePartition() and its friend DMPlexDistribute(). What
>>>>> are you trying to do?
>>>>>
>>>>>     Matt
>>>>>
>>>>>
>>>>>>  Thanks
>>>>>> Miguel
>>>>>>
>>>>>> On Sun, Feb 22, 2015 at 12:15 PM, Matthew Knepley <knepley at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>>  On Sun, Feb 22, 2015 at 11:01 AM, Miguel Angel Salazar de Troya <
>>>>>>> salazardetroya at gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi
>>>>>>>>
>>>>>>>>  I noticed that the routine DMNetworkGetEdgeRange() returns the
>>>>>>>> local indices for the edge range. Is there any way to obtain the global
>>>>>>>> indices? So if my network has 10 edges, the processor 1 has the 0-4 edges
>>>>>>>> and the processor 2, the 5-9 edges, how can I obtain this information?
>>>>>>>>
>>>>>>>
>>>>>>>  One of the points of DMPlex is we do not require a global
>>>>>>> numbering. Everything is numbered
>>>>>>> locally, and the PetscSF maps local numbers to local numbers in
>>>>>>> order to determine ownership.
>>>>>>>
>>>>>>>  If you want to create a global numbering for some reason, you can
>>>>>>> using DMPlexCreatePointNumbering().
>>>>>>> There are also cell and vertex versions that we use for output, so
>>>>>>> you could do it just for edges as well.
>>>>>>>
>>>>>>>    Thanks,
>>>>>>>
>>>>>>>       Matt
>>>>>>>
>>>>>>>
>>>>>>>>  Thanks
>>>>>>>>  Miguel
>>>>>>>>
>>>>>>>>  --
>>>>>>>>  *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
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>  --
>>>>>>> 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
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>  --
>>>>> 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
>>>
>>
>>
>>
>> --
>> *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
>>
>>
>
>
> --
> 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 --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20150223/db154c3f/attachment.html>


More information about the petsc-users mailing list