[petsc-users] How to get cell number from node number?

barry barrydog505 at gmail.com
Fri Nov 30 08:43:56 CST 2018


Thanks, I'll try it.

Barry

On 11/30/18 10:40 PM, Stefano Zampini wrote:
> Just to add to what Matt wrote: it seems your question is to get the 
> cell numbers  given a node (=vertex) numbering
> In general, there are many cells that share the same vertex. If you 
> have a vertex id (vertex), you can traverse the cells that share that 
> vertex by still using DMPlexGetTransitiveClosure, with a PETSC_FALSE 
> argument to get the so-called “star” of the point
>
> ierr = DMPlexGetHeightStratum(dm, 0, &cStart, &cEnd);CHKERRQ(ierr);
> ierr = DMPlexGetTransitiveClosure(dm, vertex, PETSC_FALSE, &clSize, 
> &closure);CHKERRQ(ierr);
> for (cl = 0; cl < clSize*2; cl += 2) {
>   const PetscInt point = closure[cl];
>
>   if (point >= cStart && point < cEnd) {
>     <this is a cell>
>   }
> }
> ierr = DMPlexRestoreTransitiveClosure(dm, vertex, PETSC_FALSE, 
> &clSize, &closure);CHKERRQ(ierr);
>
>
>> On Nov 30, 2018, at 4:28 PM, Matthew Knepley <knepley at gmail.com 
>> <mailto:knepley at gmail.com>> wrote:
>>
>> On Fri, Nov 30, 2018 at 8:19 AM barry via petsc-users 
>> <petsc-users at mcs.anl.gov <mailto:petsc-users at mcs.anl.gov>> wrote:
>>
>>     Sorry for the imprecisely description.
>>
>>     I have an unstructured grid (DMPLEX) with triangle mesh.
>>
>>     cell number (2 dim)={0};    line number (1 dim)={1, 2, 3};   
>>     node number (0 dim)={4, 5, 6}
>>
>>
>> So, you have a 2D interpolated simplex mesh in DMPlex, which means it 
>> has vertices, edges, and cells.
>> If you want the vertices on a given cell, you would get the closure 
>> and then filter out any points which are
>> not vertices. For example,
>>
>> PetscInt *closure = NULL;
>> PetscInt  clSize, cl;
>>
>> ierr = DMPlexGetDepthStratum(dm, 0, &vStart, &vEnd);CHKERRQ(ierr);
>> ierr = DMPlexGetTransitiveClosure(dm, cell, PETSC_TRUE, &clSize, 
>> &closure);CHKERRQ(ierr);
>> for (cl = 0; cl < clSize*2; cl += 2) {
>>   const PetscInt point = closure[cl];
>>
>>   if (point >= vStart && point < vEnd) {
>>     <this is a vertex>
>>   }
>> }
>> ierr = DMPlexRestoreTransitiveClosure(dm, cell, PETSC_TRUE, &clSize, 
>> &closure);CHKERRQ(ierr);
>>
>> If you do not use edges, then its much easier. Just call 
>> DMPlexGetCone(). If you do use edges, but also
>> get the vertices all the time, you can make an index for this query, 
>> which will speed it up greatly at the
>> cost of some memory.
>>
>>   Thanks,
>>
>>      Matt
>>
>>     Thank you,
>>
>>     Barry
>>
>>     On 11/30/18 8:33 PM, Stefano Zampini wrote:
>>>
>>>
>>>     Il giorno Ven 30 Nov 2018, 15:05 Tsung-Hsing Chen via
>>>     petsc-users <petsc-users at mcs.anl.gov
>>>     <mailto:petsc-users at mcs.anl.gov>> ha scritto:
>>>
>>>         Hi,
>>>         Is there any function that can get cell number from the
>>>         given node number exist already?
>>>
>>>
>>>     Cell number of what? DMPLEX? And what is "node number"?
>>>
>>>
>>>         Thank you,
>>>         Barry
>>>
>>
>>
>> --
>> 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
>>
>> https://www.cse.buffalo.edu/~knepley/ 
>> <http://www.cse.buffalo.edu/~knepley/>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20181130/d86b5260/attachment-0001.html>


More information about the petsc-users mailing list