<div dir="ltr"><div dir="ltr">On Mon, May 15, 2023 at 9:55 AM Zongze Yang <<a href="mailto:yangzongze@gmail.com">yangzongze@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Mon, 15 May 2023 at 17:24, Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Sun, May 14, 2023 at 7:23 PM Zongze Yang <<a href="mailto:yangzongze@gmail.com" target="_blank">yangzongze@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Could you try to project the coordinates into the continuity space by enabling the option `-dm_plex_gmsh_project_petscdualspace_lagrange_continuity true`?</div></blockquote><div><br></div><div>There is a comment in the code about that:</div><div><br></div><div>  /* XXX FIXME Requires DMPlexSetClosurePermutationLexicographic() */</div><div><br></div><div>So what is currently done is you project into the discontinuous space from the GMsh coordinates,</div><div>and then we get the continuous coordinates from those later. This is why we get the right answer.</div><div><br></div></div></div></blockquote><div> </div><div>Sorry, I'm having difficulty understanding the comment and fully understanding your intended meaning. Are you saying that we can only project the space to a discontinuous space? </div></div></div></blockquote><div><br></div><div>For higher order simplices, because we do not have the mapping to the GMsh order yet.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div>Additionally, should we always set `dm_plex_gmsh_project_petscdualspace_lagrange_continuity` to false for high-order gmsh files?</div></div></div></blockquote><div><br></div><div>This is done automatically if you do not override it.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div>With the option set to `true`, I got the following error:</div></div></div></blockquote><div><br></div><div>Yes, do not do that.</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div>```</div><div>$ $PETSC_DIR/$PETSC_ARCH/tests/dm/impls/plex/tests/runex33_gmsh_3d_q2.sh -e "-dm_plex_gmsh_project_petscdualspace_lagrange_continuity true"<br>not ok dm_impls_plex_tests-ex33_gmsh_3d_q2 # Error code: 77<br>#       Volume: 0.46875<br>#       [0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br>#       [0]PETSC ERROR: Petsc has generated inconsistent data<br>#       [0]PETSC ERROR: Calculated volume 0.46875 != 1. actual volume (error 0.53125 > 1e-06 tol)<br>#       [0]PETSC ERROR: See <a href="https://petsc.org/release/faq/" target="_blank">https://petsc.org/release/faq/</a> for trouble shooting.<br>#       [0]PETSC ERROR: Petsc Development GIT revision: v3.19.1-294-g9cc24bc9b93  GIT Date: 2023-05-15 12:07:10 +0000<br>#       [0]PETSC ERROR: ../ex33 on a arch-linux-c-debug named AMA-PC-RA18 by yzz Mon May 15 21:53:43 2023<br>#       [0]PETSC ERROR: Configure options --CFLAGS=-I/opt/intel/oneapi/mkl/latest/include --CXXFLAGS=-I/opt/intel/oneapi/mkl/latest/include --LDFLAGS="-Wl,-rpath,/opt/intel/oneapi/mkl/latest/lib/intel64 -L/opt/intel/oneapi/mkl/latest/lib/intel64" --download-bison --download-chaco --download-cmake --download-eigen="/home/yzz/firedrake/complex-int32-mkl-X-debug/src/eigen-3.3.3.tgz " --download-fftw --download-hdf5 --download-hpddm --download-hwloc --download-libpng --download-metis --download-mmg --download-mpich --download-mumps --download-netcdf --download-p4est --download-parmmg --download-pastix --download-pnetcdf --download-ptscotch --download-scalapack --download-slepc --download-suitesparse --download-superlu_dist --download-tetgen --download-triangle --with-blaslapack-dir=/opt/intel/oneapi/mkl/latest --with-c2html=0 --with-debugging=1 --with-fortran-bindings=0 --with-mkl_cpardiso-dir=/opt/intel/oneapi/mkl/latest --with-mkl_pardiso-dir=/opt/intel/oneapi/mkl/latest --with-scalar-type=complex --with-shared-libraries=1 --with-x=1 --with-zlib PETSC_ARCH=arch-linux-c-debug<br>#       [0]PETSC ERROR: #1 CheckVolume() at /home/yzz/opt/petsc/src/dm/impls/plex/tests/ex33.c:246<br>#       [0]PETSC ERROR: #2 main() at /home/yzz/opt/petsc/src/dm/impls/plex/tests/ex33.c:261<br>#       [0]PETSC ERROR: PETSc Option Table entries:<br>#       [0]PETSC ERROR: -coord_space 0 (source: command line)<br>#       [0]PETSC ERROR: -dm_plex_filename /home/yzz/opt/petsc/share/petsc/datafiles/meshes/cube_q2.msh (source: command line)<br>#       [0]PETSC ERROR: -dm_plex_gmsh_project (source: command line)<br>#       [0]PETSC ERROR: -dm_plex_gmsh_project_petscdualspace_lagrange_continuity true (source: command line)<br>#       [0]PETSC ERROR: -tol 1e-6 (source: command line)<br>#       [0]PETSC ERROR: -volume 1.0 (source: command line)<br>#       [0]PETSC ERROR: ----------------End of Error Message -------send entire error message to petsc-maint@mcs.anl.gov----------<br>#       application called MPI_Abort(MPI_COMM_SELF, 77) - process 0<br> ok dm_impls_plex_tests-ex33_gmsh_3d_q2 # SKIP Command failed so no diff<br></div><div>```</div><div><br></div><div><br></div><div>Best wishes,</div><div>Zongze</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div dir="ltr"><div dir="ltr">Best wishes,<div>Zongze</div></div></div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 15 May 2023 at 04:24, Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Sun, May 14, 2023 at 12:27 PM Zongze Yang <<a href="mailto:yangzongze@gmail.com" target="_blank">yangzongze@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><br clear="all"><div><div dir="ltr"><div dir="ltr"><br></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, 14 May 2023 at 23:54, Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Sun, May 14, 2023 at 9:21 AM Zongze Yang <<a href="mailto:yangzongze@gmail.com" target="_blank">yangzongze@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi, Matt,</div><div><br></div><div>The issue has been resolved while testing on the latest version of PETSc. It seems that the problem has been fixed in the following merge request: 

<a href="https://gitlab.com/petsc/petsc/-/merge_requests/5970" target="_blank">https://gitlab.com/petsc/petsc/-/merge_requests/5970</a></div></div></blockquote><div><br></div><div>No problem. Glad it is working.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>I sincerely apologize for any inconvenience caused by my previous message. However, I would like to provide you with additional information regarding the test files. Attached to this email, you will find two Gmsh files: "square_2rd.msh" and "square_3rd.msh." These files contain high-order triangulated mesh data for the unit square.<br><br>```<br></div><div>$ ./ex33 -coord_space 0 -dm_plex_filename square_2rd.msh -dm_plex_gmsh_project -dm_plex_gmsh_project_petscdualspace_lagrange_continuity true -dm_plex_gmsh_project_fe_view -volume 1<br>PetscFE Object: P2 1 MPI process<br>  type: basic<br>  Basic Finite Element in 2 dimensions with 2 components<br>  PetscSpace Object: P2 1 MPI process<br>    type: sum<br>    Space in 2 variables with 2 components, size 12<br>    Sum space of 2 concatenated subspaces (all identical)<br>      PetscSpace Object: sum component (sumcomp_) 1 MPI process<br>        type: poly<br>        Space in 2 variables with 1 components, size 6<br>        Polynomial space of degree 2<br>  PetscDualSpace Object: P2 1 MPI process<br>    type: lagrange<br>    Dual space with 2 components, size 12<br>    Continuous Lagrange dual space<br>    Quadrature on a triangle of order 5 on 9 points (dim 2)<br>Volume: 1.<br>$ ./ex33 -coord_space 0 -dm_plex_filename square_3rd.msh -dm_plex_gmsh_project -dm_plex_gmsh_project_petscdualspace_lagrange_continuity true -dm_plex_gmsh_project_fe_view -volume 1<br>PetscFE Object: P3 1 MPI process<br>  type: basic<br>  Basic Finite Element in 2 dimensions with 2 components<br>  PetscSpace Object: P3 1 MPI process<br>    type: sum<br>    Space in 2 variables with 2 components, size 20<br>    Sum space of 2 concatenated subspaces (all identical)<br>      PetscSpace Object: sum component (sumcomp_) 1 MPI process<br>        type: poly<br>        Space in 2 variables with 1 components, size 10<br>        Polynomial space of degree 3<br>  PetscDualSpace Object: P3 1 MPI process<br>    type: lagrange<br>    Dual space with 2 components, size 20<br>    Continuous Lagrange dual space<br>    Quadrature on a triangle of order 7 on 16 points (dim 2)<br>Volume: 1.<br></div><div>```<br><div><br></div><div>Thank you for your attention and understanding. I apologize once again for my previous oversight.</div></div></div></blockquote><div><br></div><div>Great! If you make an MR for this, you will be included on the next list of PETSc contributors. Otherwise, I can do it.</div><div><br></div></div></div></blockquote><div><br></div><div>I appreciate your offer to handle the MR. Please go ahead and take care of it. Thank you!</div></div></div></blockquote><div><br></div><div>I have created the MR with your tests. They are working for me:</div><div><br></div><div>  <a href="https://gitlab.com/petsc/petsc/-/merge_requests/6463" target="_blank">https://gitlab.com/petsc/petsc/-/merge_requests/6463</a></div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div>Best Wishes,</div><div>Zongze</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div><div dir="ltr"><div dir="ltr">Best wishes,<div>Zongze</div></div></div></div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, 14 May 2023 at 16:44, Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Sat, May 13, 2023 at 6:08 AM Zongze Yang <<a href="mailto:yangzongze@gmail.com" target="_blank">yangzongze@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi, Matt, <div><br></div><div>There seem to be ongoing issues with projecting high-order coordinates from a gmsh file to other spaces. I would like to inquire whether there are any plans to resolve this problem.<br></div><div><br></div><div>Thank you for your attention to this matter.</div></div></blockquote><div><br></div><div>Yes, I will look at it. The important thing is to have a good test. Here are the higher order geometry tests</div><div><br></div><div>  <a href="https://gitlab.com/petsc/petsc/-/blob/main/src/dm/impls/plex/tests/ex33.c" target="_blank">https://gitlab.com/petsc/petsc/-/blob/main/src/dm/impls/plex/tests/ex33.c</a></div><div><br></div><div>I take shapes with known volume, mesh them with higher order geometry, and look at the convergence to the true volume. Could you add a GMsh test, meaning the .msh file and known volume, and I will fix it?</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br clear="all"><div><div dir="ltr"><div dir="ltr">Best wishes,<div>Zongze</div></div></div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, 18 Jun 2022 at 20:31, Zongze Yang <<a href="mailto:yangzongze@gmail.com" target="_blank">yangzongze@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Thank you for your reply. May I ask for some references on the order of the dofs on PETSc's FE Space (especially high order elements)?<br></div><div><br></div><div>Thanks,</div><div><br></div><div> Zongze</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>> 于2022年6月18日周六 20:02写道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Sat, Jun 18, 2022 at 2:16 AM Zongze Yang <<a href="mailto:yangzongze@gmail.com" target="_blank">yangzongze@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">In order to check if I made mistakes in the python code, I try to use c code to show the issue on DMProjectCoordinates. The code and mesh file is attached.<div>If the code is correct, there must be something wrong with `DMProjectCoordinates` or `DMPlexCreateGmshFromFile` for high-order mesh.</div></div></blockquote><div><br></div><div>Something is definitely wrong with high order, periodic simplices from Gmsh. We had not tested that case. I am at a conference and cannot look at it for a week.</div><div>My suspicion is that the space we make when reading in the Gmsh coordinates does not match the values (wrong order).</div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>The command and the output are listed below: (Obviously the bounding box is changed.)<div>```</div><div>$ ./test_gmsh_load_2rd -filename cube-p2.msh -old_fe_view -new_fe_view<br>Old Bounding Box:<br>  0: lo = 0. hi = 1.<br>  1: lo = 0. hi = 1.<br>  2: lo = 0. hi = 1.<br>PetscFE Object: OldCoordinatesFE 1 MPI processes<br>  type: basic<br>  Basic Finite Element in 3 dimensions with 3 components<br>  PetscSpace Object: P2 1 MPI processes<br>    type: sum<br>    Space in 3 variables with 3 components, size 30<br>    Sum space of 3 concatenated subspaces (all identical)<br>      PetscSpace Object: sum component (sumcomp_) 1 MPI processes<br>        type: poly<br>        Space in 3 variables with 1 components, size 10<br>        Polynomial space of degree 2<br>  PetscDualSpace Object: P2 1 MPI processes<br>    type: lagrange<br>    Dual space with 3 components, size 30<br>    Discontinuous Lagrange dual space<br>    Quadrature of order 5 on 27 points (dim 3)<br>PetscFE Object: NewCoordinatesFE 1 MPI processes<br>  type: basic<br>  Basic Finite Element in 3 dimensions with 3 components<br>  PetscSpace Object: P2 1 MPI processes<br>    type: sum<br>    Space in 3 variables with 3 components, size 30<br>    Sum space of 3 concatenated subspaces (all identical)<br>      PetscSpace Object: sum component (sumcomp_) 1 MPI processes<br>        type: poly<br>        Space in 3 variables with 1 components, size 10<br>        Polynomial space of degree 2<br>  PetscDualSpace Object: P2 1 MPI processes<br>    type: lagrange<br>    Dual space with 3 components, size 30<br>    Continuous Lagrange dual space<br>    Quadrature of order 5 on 27 points (dim 3)<br>New Bounding Box:<br>  0: lo = 2.5624e-17 hi = 8.<br>  1: lo = -9.23372e-17 hi = 7.<br>  2: lo = 2.72091e-17 hi = 8.5<br><div>``` </div></div></div><div><br></div><div>Thanks,</div><div>Zongze</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Zongze Yang <<a href="mailto:yangzongze@gmail.com" target="_blank">yangzongze@gmail.com</a>> 于2022年6月17日周五 14:54写道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I tried the projection operation. However, it seems that the projection gives the wrong solution. After projection, the bounding box is changed! See logs below.<div><br></div><div>First, I patch the petsc4py by adding `DMProjectCoordinates`:</div><div>```</div><div>diff --git a/src/binding/petsc4py/src/PETSc/DM.pyx b/src/binding/petsc4py/src/PETSc/DM.pyx<br>index d8a58d183a..dbcdb280f1 100644<br>--- a/src/binding/petsc4py/src/PETSc/DM.pyx<br>+++ b/src/binding/petsc4py/src/PETSc/DM.pyx<br>@@ -307,6 +307,12 @@ cdef class DM(Object):<br>         PetscINCREF(c.obj)<br>         return c<br><br>+    def projectCoordinates(self, FE fe=None):<br>+        if fe is None:<br>+            CHKERR( DMProjectCoordinates(<a href="http://self.dm" target="_blank">self.dm</a>, NULL) )<br>+        else:<br>+            CHKERR( DMProjectCoordinates(<a href="http://self.dm" target="_blank">self.dm</a>, fe.fe) )<br>+<br>     def getBoundingBox(self):<br>         cdef PetscInt i,dim=0<br>         CHKERR( DMGetCoordinateDim(<a href="http://self.dm" target="_blank">self.dm</a>, &dim) )<br>diff --git a/src/binding/petsc4py/src/PETSc/petscdm.pxi b/src/binding/petsc4py/src/PETSc/petscdm.pxi<br>index 514b6fa472..c778e39884 100644<br>--- a/src/binding/petsc4py/src/PETSc/petscdm.pxi<br>+++ b/src/binding/petsc4py/src/PETSc/petscdm.pxi<br>@@ -90,6 +90,7 @@ cdef extern from * nogil:<br>     int DMGetCoordinateDim(PetscDM,PetscInt*)<br>     int DMSetCoordinateDim(PetscDM,PetscInt)<br>     int DMLocalizeCoordinates(PetscDM)<br>+    int DMProjectCoordinates(PetscDM, PetscFE)<br><br>     int DMCreateInterpolation(PetscDM,PetscDM,PetscMat*,PetscVec*)<br>     int DMCreateInjection(PetscDM,PetscDM,PetscMat*)<br></div><div>```</div><div><br></div><div>Then in python, I load a mesh and project the coordinates to P2:</div><div><font face="arial, sans-serif">```</font></div><div><font face="arial, sans-serif">import firedrake as fd<br>from firedrake.petsc import PETSc<br><br># plex = fd.mesh._from_gmsh('test-fd-load-p2.msh')<br>plex = fd.mesh._from_gmsh('test-fd-load-p2-rect.msh')<br>print('old bbox:', plex.getBoundingBox())<br><br>dim = plex.getDimension()<br>#                                 (dim,  nc, isSimplex, k,          qorder, comm=None)<br>fe_new = PETSc.FE().createLagrange(dim, dim,      True, 2, PETSc.DETERMINE)<br>plex.projectCoordinates(fe_new)<br>fe_new.view()<br><br>print('new bbox:', plex.getBoundingBox())<br></font></div><div><font face="arial, sans-serif">```</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">The output is (The bounding box is changed!)</font></div><div><font face="arial, sans-serif">```</font></div><div><pre style="box-sizing:unset;border:none;margin-top:0px;margin-bottom:0px;padding:0px;overflow:auto;word-break:break-all;white-space:pre-wrap"><font face="arial, sans-serif">old bbox: ((0.0, 1.0), (0.0, 1.0), (0.0, 1.0))
PetscFE Object: P2 1 MPI processes
  type: basic
  Basic Finite Element in 3 dimensions with 3 components
  PetscSpace Object: P2 1 MPI processes
    type: sum
    Space in 3 variables with 3 components, size 30
    Sum space of 3 concatenated subspaces (all identical)
      PetscSpace Object: sum component (sumcomp_) 1 MPI processes
        type: poly
        Space in 3 variables with 1 components, size 10
        Polynomial space of degree 2
  PetscDualSpace Object: P2 1 MPI processes
    type: lagrange
    Dual space with 3 components, size 30
    Continuous Lagrange dual space
    Quadrature of order 5 on 27 points (dim 3)
new bbox: ((-6.530133708576188e-17, 36.30670832662781), (-3.899962995254311e-17, 36.2406171632539), (-8.8036464152166e-17, 36.111577025012224))</font></pre><pre style="box-sizing:unset;border:none;margin-top:0px;margin-bottom:0px;padding:0px;overflow:auto;word-break:break-all;white-space:pre-wrap"><font face="arial, sans-serif">```</font></pre><pre style="box-sizing:unset;border:none;margin-top:0px;margin-bottom:0px;padding:0px;overflow:auto;word-break:break-all;white-space:pre-wrap"><font face="arial, sans-serif"><br></font></pre><pre style="box-sizing:unset;border:none;margin-top:0px;margin-bottom:0px;padding:0px;overflow:auto;word-break:break-all;white-space:pre-wrap"><font face="arial, sans-serif">By the way, for the original DG coordinates, where can I find the relation of the closure and the order of the dofs for the cell?</font></pre><pre style="box-sizing:unset;border:none;margin-top:0px;margin-bottom:0px;padding:0px;overflow:auto;word-break:break-all;white-space:pre-wrap"><font face="arial, sans-serif"><br></font></pre><pre style="box-sizing:unset;border:none;margin-top:0px;margin-bottom:0px;padding:0px;overflow:auto;word-break:break-all;white-space:pre-wrap"><font face="arial, sans-serif">Thanks!</font></pre><pre style="box-sizing:unset;border:none;margin-top:0px;margin-bottom:0px;padding:0px;overflow:auto;word-break:break-all;white-space:pre-wrap"><font face="arial, sans-serif"><br></font></pre><pre style="box-sizing:unset;border:none;margin-top:0px;margin-bottom:0px;padding:0px;overflow:auto;word-break:break-all;white-space:pre-wrap"><font face="arial, sans-serif">  Zongze</font></pre><pre style="box-sizing:unset;border:none;margin-top:0px;margin-bottom:0px;padding:0px;overflow:auto;word-break:break-all;white-space:pre-wrap"><br></pre></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>> 于2022年6月17日周五 01:11写道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Thu, Jun 16, 2022 at 12:06 PM Zongze Yang <<a href="mailto:yangzongze@gmail.com" target="_blank">yangzongze@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"><div dir="ltr"></div><div dir="ltr"><br></div><div dir="ltr"><br><blockquote type="cite">在 2022年6月16日,23:22,Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>> 写道:<br><br></blockquote></div><blockquote type="cite"><div dir="ltr"><div dir="ltr"><div dir="ltr">On Thu, Jun 16, 2022 at 11:11 AM Zongze Yang <<a href="mailto:yangzongze@gmail.com" target="_blank">yangzongze@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>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? </div></div></blockquote><div><br></div><div>By default, they are stored as P2, not DG.</div></div></div></div></blockquote><div><br></div><div>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.</div><div>Then the function <a href="https://petsc.org/main/docs/manualpages/DMPLEX/DMPlexVecGetClosure/" target="_blank">DMPlexVecGetClosure</a> seems return the coordinates in lex order.</div><div><br></div><div>Some code in reading gmsh file reads that</div><div><br></div><div><br></div><div><p style="margin:0px;font-stretch:normal;font-size:medium;line-height:normal;color:rgb(0,0,0)"><span style="font-size:16px">1756:    <span> </span>if (isSimplex) continuity = <a href="https://petsc.org/main/docs/manualpages/Sys/PETSC_FALSE/" target="_blank"><span>PETSC_FALSE</span></a>; /* XXX FIXME Requires DMPlexSetClosurePermutationLexicographic() */</span></p><p style="margin:0px;font-stretch:normal;font-size:medium;line-height:normal;min-height:21px;color:rgb(0,0,0)"><span style="font-size:16px"></span><br></p><p style="margin:0px;font-stretch:normal;font-size:medium;line-height:normal;color:rgb(0,0,0)"><span style="font-size:16px">1758:    <span> </span>GmshCreateFE(comm, NULL, isSimplex, continuity, nodeType, dim, coordDim, order, &fe)</span></p><p style="margin:0px;font-stretch:normal;font-size:medium;line-height:normal;color:rgb(0,0,0)"><span style="font-size:16px"><br></span></p><p style="margin:0px;font-stretch:normal;font-size:medium;line-height:normal;color:rgb(0,0,0)"><span style="font-size:16px">The continuity is set to false for simplex.</span></p></div></div></blockquote><div><br></div><div>Oh, yes. That needs to be fixed. For now, you can just project it to P2 if you want using</div><div><br></div><div>  <a href="https://petsc.org/main/docs/manualpages/DM/DMProjectCoordinates/" target="_blank">https://petsc.org/main/docs/manualpages/DM/DMProjectCoordinates/</a></div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"><div>Thanks,</div><div>Zongze</div><blockquote type="cite"><div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div>You can ask for the coordinates of a vertex or an edge directly using</div><div><br></div><div>  <a href="https://petsc.org/main/docs/manualpages/DMPLEX/DMPlexPointLocalRead/" target="_blank">https://petsc.org/main/docs/manualpages/DMPLEX/DMPlexPointLocalRead/</a></div><div><br></div><div>by giving the vertex or edge point. You can get all the coordinates on a cell, in the closure order, using</div><div><br></div><div>  <a href="https://petsc.org/main/docs/manualpages/DMPLEX/DMPlexVecGetClosure/" target="_blank">https://petsc.org/main/docs/manualpages/DMPLEX/DMPlexVecGetClosure/</a></div></div></div></div></blockquote><blockquote type="cite"><div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Below is some code load the gmsh file, I want to know the relation between `cl` and `cell_coords`.</div><div><br></div>```<div>import firedrake as fd<br>import numpy as np<br><br># Load gmsh file (2rd)<br>plex = fd.mesh._from_gmsh('test-fd-load-p2-rect.msh')<br><br>cs, ce = plex.getHeightStratum(0)<br><br>cdm = plex.getCoordinateDM()<br>csec = dm.getCoordinateSection()<br>coords_gvec = dm.getCoordinates()<br><br>for i in range(cs, ce):<br>    cell_coords = cdm.getVecClosure(csec, coords_gvec, i)<br>    print(f'coordinates for cell {i} :\n{cell_coords.reshape([-1, 3])}')<br>    cl = dm.getTransitiveClosure(i)<br>    print('closure:', cl)<br>    break</div><div>```<br clear="all"><div><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><br></div><div dir="ltr">Best wishes,</div></div><div>Zongze</div></div></div></div></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</div></blockquote></div></blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div><span>-- </span><br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div><span>-- </span><br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div></div>
</blockquote></div><br clear="all"><div><br></div><span>-- </span><br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div><span>-- </span><br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div></div>
</blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>