Hello,

In an old question about obtaining the node connectivity of a cell with a high 
order approximation space, the use of the flag "-dm_plex_high_order_view" for 
visualization purposes was brought up, as a way to refine the grid down to 
linear space.

Link: 
https://urldefense.us/v3/__https://gitlab.com/petsc/petsc/-/blob/main/src/dm/impls/plex/plex.c?ref_type=heads*L2021__;Iw!!G_uCfscf7eWS!ZZVaar4OGVdTXOAAjkEadcw-CAZUpAAzibpD_2SKpRupYG4oxSH-W7u5necsgTYDii6v-1kjfV4aqsllxL9XI_hK2YITfNz-$
 

I'm trying to make use of this flag to see the refinement, but I see no 
difference with higher order approximations. Perhaps I am misunderstanding its 
use? I thought that by using it, one could see a "subdivision" of each element. 
Say, a single triangle, FE approximation space order 2 (3 corner nodes, 3 
mid-edge nodes), would be refined into e.g. 4 linear triangles.

The code (Fortran) looks something along these lines:

! Create a DM from the mesh file

DM :: cdm
PetscInt :: K, cdim, fedim
PetscBool :: simplex
PetscFE :: cfe
PetscViewer :: viewer
PetscErrorCode :: ierr

PetsCallA(DMSetFromOptions(cdm, ierr))
PetsCallA(DMGetDimension(cdm, cdim, ierr))
PetsCallA(DMPlexSimplex(cdm, simplex, ierr))
PetsCallA(PetscFECreateDefault(PETSC_COMM_WORLD, cdim, cdim, simplex, "ho_", K, 
cfe, ierr))
PetsCallA(PetscFEGetDimension(cfe, fedim, ierr))

PetsCallA(PetscViewerCreate(PETSC_COMM_WORLD, viewer, ierr))
PetsCallA(PetscViewerDrawOpen(PETSC_COMM_WORLD, PETSC_NULL_CHARACTER, 
PETSC_NULL_CHARACTER, 100, 100, 800, 800, viewer, ierr))
PetsCallA(PetscViewerSetFromOptions(viewer, ierr)) ! also using flag 
-draw_pause 5
PetsCallA(DMView(cdm, viewer, ierr))
[...]

With the following list of flags:

-ho_petscspace_degree K
-ho_petscdualspace_lagrange_node_type equispaced
-ho_petscdualspace_lagrange_node_endpoints 1
-dm_plex_high_order_view
-options_left

Using "-options_left" shows that "there are no unused options"; so 
"-dm_plex_high_order_view" is used somehow; it is at least required for the 
call to "DMPlexCreateHighOrderSurrogate_Internal" within the "draw" functions.

>From the CoordinateDM I can see the additional nodes created for the higher 
>order approximation (e.g. mid-edge, mid-face nodes), so it seems the FE space 
>is correct.

Regardless of the order "K", the mesh plotted with "DMView" is always the same, 
corresponding to the linear case.

Thank you.

Noam

Reply via email to