在 2022年6月16日,23:22,Matthew Knepley <knepley@gmail.com> 写道:On Thu, Jun 16, 2022 at 11:11 AM Zongze Yang <yangzongze@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 that1756: 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,ZongzeYou can ask for the coordinates of a vertex or an edge directly usingby giving the vertex or edge point. You can get all the coordinates on a cell, in the closure order, usingThanks,MattBelow 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