[petsc-users] How to find the map between the high order coordinates of DMPlex and vertex numbering?

Zongze Yang yangzongze at gmail.com
Thu Jun 16 11:06:22 CDT 2022



> 在 2022年6月16日,23:22,Matthew Knepley <knepley at gmail.com> 写道:
> 
> 
>> On Thu, Jun 16, 2022 at 11:11 AM Zongze Yang <yangzongze at gmail.com> wrote:
> 
>> Hi, if I load a `gmsh` file with second-order elements, the coordinates will be stored in a DG-P2 space. After obtaining the coordinates of a cell, how can I map the coordinates to vertex and edge? 
> 
> By default, they are stored as P2, not DG.

I checked the coordinates vector, and found the dogs only defined on cell other than vertex and edge, so I said they are stored as DG.
Then the function DMPlexVecGetClosure seems return the coordinates in lex order.

Some code in reading gmsh file reads that


1756:     if (isSimplex) continuity = PETSC_FALSE; /* XXX FIXME Requires DMPlexSetClosurePermutationLexicographic() */

1758:     GmshCreateFE(comm, NULL, isSimplex, continuity, nodeType, dim, coordDim, order, &fe)

The continuity is set to false for simplex.

Thanks,
Zongze



> 
> You can ask for the coordinates of a vertex or an edge directly using
> 
>   https://petsc.org/main/docs/manualpages/DMPLEX/DMPlexPointLocalRead/
> 
> by giving the vertex or edge point. You can get all the coordinates on a cell, in the closure order, using
> 
>   https://petsc.org/main/docs/manualpages/DMPLEX/DMPlexVecGetClosure/
>   Thanks,
> 
>      Matt
>  
>> Below is some code load the gmsh file, I want to know the relation between `cl` and `cell_coords`.
>> 
>> ```
>> import firedrake as fd
>> import numpy as np
>> 
>> # Load gmsh file (2rd)
>> plex = fd.mesh._from_gmsh('test-fd-load-p2-rect.msh')
>> 
>> cs, ce = plex.getHeightStratum(0)
>> 
>> cdm = plex.getCoordinateDM()
>> csec = dm.getCoordinateSection()
>> coords_gvec = dm.getCoordinates()
>> 
>> for i in range(cs, ce):
>>     cell_coords = cdm.getVecClosure(csec, coords_gvec, i)
>>     print(f'coordinates for cell {i} :\n{cell_coords.reshape([-1, 3])}')
>>     cl = dm.getTransitiveClosure(i)
>>     print('closure:', cl)
>>     break
>> ```
>> 
>> Best wishes,
>> Zongze
> 
> 
> -- 
> 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/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20220617/e05995ba/attachment.html>


More information about the petsc-users mailing list