[petsc-users] DMNetworkGetEdgeRange() in parallel

Matthew Knepley knepley at gmail.com
Mon Feb 23 11:37:30 CST 2015


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20150223/a9b90736/attachment.html>


More information about the petsc-users mailing list