On Thu, Jun 16, 2022 at 12:06 PM Zongze Yang <[email protected]> wrote:
在 2022年6月16日,23:22,Matthew Knepley <[email protected]> 写道:
On Thu, Jun 16, 2022 at 11:11 AM Zongze Yang <[email protected]> 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 <https://petsc.org/main/docs/manualpages/DMPLEX/DMPlexVecGetClosure/> seems return the coordinates in lex order.
Some code in reading gmsh file reads that
1756: if (isSimplex) continuity = PETSC_FALSE <https://petsc.org/main/docs/manualpages/Sys/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.
Oh, yes. That needs to be fixed. For now, you can just project it to P2 if you want using https://petsc.org/main/docs/manualpages/DM/DMProjectCoordinates/ Thanks, Matt
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/ <http://www.cse.buffalo.edu/~knepley/>
-- 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/>