Re: [petsc-users] [petsc-maint] how to check if cell is local owned in DMPlex
On 18-03-07 03:54 PM, Jed Brown wrote: Danyang Suwrites: Based on my test, this function works fine using current PETSc-dev version, but I cannot get it compiled correctly using other versions for Fortran code, as mentioned in the previous emails. I asked this question because some of the clusters we use do not have the PETSc-dev version and it takes time get staff reinstall another version. You can install PETSc yourself as a normal user. Thanks, Jed. This is the way I will follow. Danyang
Re: [petsc-users] [petsc-maint] how to check if cell is local owned in DMPlex
Hi All, Thanks again for all your help during my code development and it turns out the DMPlex for unstructured grid works pretty well. I have another question. Is there any alternative method to get number of leaves without using PetscSFGetGraph? Based on my test, this function works fine using current PETSc-dev version, but I cannot get it compiled correctly using other versions for Fortran code, as mentioned in the previous emails. I asked this question because some of the clusters we use do not have the PETSc-dev version and it takes time get staff reinstall another version. Thanks, Danyang On 18-03-05 11:50 AM, Smith, Barry F. wrote: MatSolverPackage became MatSolverType On Mar 5, 2018, at 1:35 PM, Danyang Suwrote: Hi Barry and Matt, The compiling problem should be caused by the PETSc version installed on my computer. When updated to PETSc-Dev version, the ex1f example works fine. However, I cannot compile this example under PETSc-3.8.3 version. After updating to PETSc-Dev verison, I encounter another compiling problem in my code. MatSolverPackage :: solver_pkg_flow 1 Error: Unclassifiable statement at (1) Including petscmat.h or petscpc.h does not help to solve this problem. I can rewrite this part to get rid of this. But I would rather to keep this if there is alternative way to go. What is the head file should I include in order to use MatSolverPackage? Thanks, Danyang On 18-03-04 11:15 AM, Smith, Barry F. wrote: See src/vec/is/sf/examples/tutorials/ex1f.F90 in the master branch of the PETSc git repository BTW: git grep -i petscsfgetgraph will show every use of the function in the source code. Very useful tool Barry On Mar 4, 2018, at 1:05 PM, Danyang Su wrote: On 18-03-04 08:08 AM, Matthew Knepley wrote: On Fri, Mar 2, 2018 at 3:22 PM, Danyang Su wrote: Hi Matt, I use the latest Fortran style in PETSc 3.8. Enclosed are the PETSc configuration, code compiling log and the function that causes compiling error. The compiling error happens after I include petscsf.h in the following section. I didn't find petscsf.h in petsc/finclude/ folder so I use the head file in the 'include' folder and this seems not allowed. I apologize for taking so long. The PetscSF definitions are in #include Hi Matt, After including #include use petscis I still get error saying undefined reference to `petscsfgetgraph_' Did I miss any other head file? Thanks, Danyang You are correct that they should be moved out. Thanks, Matt #ifdef PETSC_V3_8_X #include #include #include #include use petscsys use petscdmplex use petscsf #endif Thanks, Danyang On 18-03-02 12:08 PM, Matthew Knepley wrote: On Fri, Mar 2, 2018 at 3:00 PM, Danyang Su wrote: On 18-03-02 10:58 AM, Matthew Knepley wrote: On Fri, Mar 2, 2018 at 1:41 PM, Danyang Su wrote: On 18-02-19 03:30 PM, Matthew Knepley wrote: On Mon, Feb 19, 2018 at 3:11 PM, Danyang Su wrote: Hi Matt, Would you please let me know how to check if a cell is local owned? When overlap is 0 in DMPlexDistribute, all the cells are local owned. How about overlap > 0? It sounds like impossible to check by node because a cell can be local owned even if none of the nodes in this cell is local owned. If a cell is in the PetscSF, then it is not locally owned. The local nodes in the SF are sorted, so I use PetscFindInt (http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscFindInt.html). Hi Matt, Would you please give me a little more about how to mark the ghost cells when overlap > 0? What do you mean a cell is in the PetscSF? I use PetscSFView to export the graph (original mesh file pile.vtk) and it exports all the cells, including the ghost cells (PETScSFView.txt). Yes, I will send you some sample code when I get time. The first problem is that you are looking at a different PetscSF. This looks like the one returned by DMPlexDistribute(). This is mapping the serial mesh to the parallel mesh. You want http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMGetPointSF.html Then you can look at https://bitbucket.org/petsc/petsc/src/1788fc36644e622df8cb1a0de85676ccc5af0239/src/dm/impls/plex/plexsubmesh.c?at=master=file-view-default#plexsubmesh.c-683 I get the pointSF, get out the list of leaves, and find points in it using PetscFindInt() Hi Matt, By using the local dm, I can get the PetscSF I want, as shown below. Now I need to get the number of ghost cells or local cells (here 4944) or number of leaves (here 825) for each processor. I try to use PetscSFGetGraph to get number of leaves in Fortran. After including "petscsf.h", I got compilation error saying "You need a ISO C conforming compiler to use the glibc headers". Is there any alternative way to do this? I do not
Re: [petsc-users] [petsc-maint] how to check if cell is local owned in DMPlex
> MatSolverPackage became MatSolverType > On Mar 5, 2018, at 1:35 PM, Danyang Suwrote: > > Hi Barry and Matt, > > The compiling problem should be caused by the PETSc version installed on my > computer. When updated to PETSc-Dev version, the ex1f example works fine. > However, I cannot compile this example under PETSc-3.8.3 version. > > After updating to PETSc-Dev verison, I encounter another compiling problem in > my code. > > MatSolverPackage :: solver_pkg_flow > 1 > Error: Unclassifiable statement at (1) > > Including petscmat.h or petscpc.h does not help to solve this problem. I can > rewrite this part to get rid of this. But I would rather to keep this if > there is alternative way to go. What is the head file should I include in > order to use MatSolverPackage? > > Thanks, > > Danyang > > > On 18-03-04 11:15 AM, Smith, Barry F. wrote: >> See src/vec/is/sf/examples/tutorials/ex1f.F90 in the master branch of the >> PETSc git repository >> >> BTW: >> >>git grep -i petscsfgetgraph >> >> will show every use of the function in the source code. Very useful tool >> >>Barry >> >> >>> On Mar 4, 2018, at 1:05 PM, Danyang Su wrote: >>> >>> >>> >>> On 18-03-04 08:08 AM, Matthew Knepley wrote: On Fri, Mar 2, 2018 at 3:22 PM, Danyang Su wrote: Hi Matt, I use the latest Fortran style in PETSc 3.8. Enclosed are the PETSc configuration, code compiling log and the function that causes compiling error. The compiling error happens after I include petscsf.h in the following section. I didn't find petscsf.h in petsc/finclude/ folder so I use the head file in the 'include' folder and this seems not allowed. I apologize for taking so long. The PetscSF definitions are in #include >>> Hi Matt, >>> >>> After including >>> #include >>> use petscis >>> >>> I still get error saying undefined reference to `petscsfgetgraph_' >>> >>> Did I miss any other head file? >>> >>> Thanks, >>> >>> Danyang You are correct that they should be moved out. Thanks, Matt #ifdef PETSC_V3_8_X #include #include #include #include use petscsys use petscdmplex use petscsf #endif Thanks, Danyang On 18-03-02 12:08 PM, Matthew Knepley wrote: > On Fri, Mar 2, 2018 at 3:00 PM, Danyang Su wrote: > On 18-03-02 10:58 AM, Matthew Knepley wrote: >> On Fri, Mar 2, 2018 at 1:41 PM, Danyang Su wrote: >> >> On 18-02-19 03:30 PM, Matthew Knepley wrote: >>> On Mon, Feb 19, 2018 at 3:11 PM, Danyang Su >>> wrote: >>> Hi Matt, >>> >>> Would you please let me know how to check if a cell is local owned? >>> When overlap is 0 in DMPlexDistribute, all the cells are local owned. >>> How about overlap > 0? It sounds like impossible to check by node >>> because a cell can be local owned even if none of the nodes in this >>> cell is local owned. >>> >>> If a cell is in the PetscSF, then it is not locally owned. The local >>> nodes in the SF are sorted, so I use >>> PetscFindInt >>> (http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscFindInt.html). >> Hi Matt, >> >> Would you please give me a little more about how to mark the ghost cells >> when overlap > 0? What do you mean a cell is in the PetscSF? I use >> PetscSFView to export the graph (original mesh file pile.vtk) and it >> exports all the cells, including the ghost cells (PETScSFView.txt). >> >> Yes, I will send you some sample code when I get time. The first problem >> is that you are looking at a different PetscSF. This looks like the >> one returned by DMPlexDistribute(). This is mapping the serial mesh to >> the parallel mesh. You want >> >> >> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMGetPointSF.html >> >> Then you can look at >> >> >> https://bitbucket.org/petsc/petsc/src/1788fc36644e622df8cb1a0de85676ccc5af0239/src/dm/impls/plex/plexsubmesh.c?at=master=file-view-default#plexsubmesh.c-683 >> >> I get the pointSF, get out the list of leaves, and find points in it >> using PetscFindInt() > Hi Matt, > By using the local dm, I can get the PetscSF I want, as shown below. Now > I need to get the number of ghost cells or local cells (here 4944) or > number of leaves (here 825) for each processor. I try to use > PetscSFGetGraph to get number of leaves in Fortran. After including > "petscsf.h", I got compilation error saying "You need a ISO C conforming > compiler to use the glibc headers". Is there any alternative way to do > this? I do
Re: [petsc-users] [petsc-maint] how to check if cell is local owned in DMPlex
Hi Barry and Matt, The compiling problem should be caused by the PETSc version installed on my computer. When updated to PETSc-Dev version, the ex1f example works fine. However, I cannot compile this example under PETSc-3.8.3 version. After updating to PETSc-Dev verison, I encounter another compiling problem in my code. MatSolverPackage :: solver_pkg_flow 1 Error: Unclassifiable statement at (1) Including petscmat.h or petscpc.h does not help to solve this problem. I can rewrite this part to get rid of this. But I would rather to keep this if there is alternative way to go. What is the head file should I include in order to use MatSolverPackage? Thanks, Danyang On 18-03-04 11:15 AM, Smith, Barry F. wrote: See src/vec/is/sf/examples/tutorials/ex1f.F90 in the master branch of the PETSc git repository BTW: git grep -i petscsfgetgraph will show every use of the function in the source code. Very useful tool Barry On Mar 4, 2018, at 1:05 PM, Danyang Suwrote: On 18-03-04 08:08 AM, Matthew Knepley wrote: On Fri, Mar 2, 2018 at 3:22 PM, Danyang Su wrote: Hi Matt, I use the latest Fortran style in PETSc 3.8. Enclosed are the PETSc configuration, code compiling log and the function that causes compiling error. The compiling error happens after I include petscsf.h in the following section. I didn't find petscsf.h in petsc/finclude/ folder so I use the head file in the 'include' folder and this seems not allowed. I apologize for taking so long. The PetscSF definitions are in #include Hi Matt, After including #include use petscis I still get error saying undefined reference to `petscsfgetgraph_' Did I miss any other head file? Thanks, Danyang You are correct that they should be moved out. Thanks, Matt #ifdef PETSC_V3_8_X #include #include #include #include use petscsys use petscdmplex use petscsf #endif Thanks, Danyang On 18-03-02 12:08 PM, Matthew Knepley wrote: On Fri, Mar 2, 2018 at 3:00 PM, Danyang Su wrote: On 18-03-02 10:58 AM, Matthew Knepley wrote: On Fri, Mar 2, 2018 at 1:41 PM, Danyang Su wrote: On 18-02-19 03:30 PM, Matthew Knepley wrote: On Mon, Feb 19, 2018 at 3:11 PM, Danyang Su wrote: Hi Matt, Would you please let me know how to check if a cell is local owned? When overlap is 0 in DMPlexDistribute, all the cells are local owned. How about overlap > 0? It sounds like impossible to check by node because a cell can be local owned even if none of the nodes in this cell is local owned. If a cell is in the PetscSF, then it is not locally owned. The local nodes in the SF are sorted, so I use PetscFindInt (http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscFindInt.html). Hi Matt, Would you please give me a little more about how to mark the ghost cells when overlap > 0? What do you mean a cell is in the PetscSF? I use PetscSFView to export the graph (original mesh file pile.vtk) and it exports all the cells, including the ghost cells (PETScSFView.txt). Yes, I will send you some sample code when I get time. The first problem is that you are looking at a different PetscSF. This looks like the one returned by DMPlexDistribute(). This is mapping the serial mesh to the parallel mesh. You want http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMGetPointSF.html Then you can look at https://bitbucket.org/petsc/petsc/src/1788fc36644e622df8cb1a0de85676ccc5af0239/src/dm/impls/plex/plexsubmesh.c?at=master=file-view-default#plexsubmesh.c-683 I get the pointSF, get out the list of leaves, and find points in it using PetscFindInt() Hi Matt, By using the local dm, I can get the PetscSF I want, as shown below. Now I need to get the number of ghost cells or local cells (here 4944) or number of leaves (here 825) for each processor. I try to use PetscSFGetGraph to get number of leaves in Fortran. After including "petscsf.h", I got compilation error saying "You need a ISO C conforming compiler to use the glibc headers". Is there any alternative way to do this? I do not need the ghost-neighbor mapping, but just the number of local owned cells. Also, make sure you are using the latest Fortran style for PETSc: http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/UsingFortran.html [0] Number of roots=11449, leaves=825, remote ranks=1 [0] 4944 <- (1,0) [0] 4945 <- (1,28) [0] 4946 <- (1,56) ... [1] Number of roots=11695, leaves=538, remote ranks=1 [1] 5056 <- (0,21) [1] 5057 <- (0,43) [1] 5058 <- (0,65) [1] 5059 <- (0,87) In file included from /usr/include/features.h:375:0, from /usr/include/stdio.h:28, from /home/dsu/Soft/PETSc/petsc-3.8.3/include/petscsys.h:175, from /home/dsu/Soft/PETSc/petsc-3.8.3/include/petscsf.h:7,
Re: [petsc-users] [petsc-maint] how to check if cell is local owned in DMPlex
See src/vec/is/sf/examples/tutorials/ex1f.F90 in the master branch of the PETSc git repository BTW: git grep -i petscsfgetgraph will show every use of the function in the source code. Very useful tool Barry > On Mar 4, 2018, at 1:05 PM, Danyang Suwrote: > > > > On 18-03-04 08:08 AM, Matthew Knepley wrote: >> On Fri, Mar 2, 2018 at 3:22 PM, Danyang Su wrote: >> Hi Matt, >> I use the latest Fortran style in PETSc 3.8. Enclosed are the PETSc >> configuration, code compiling log and the function that causes compiling >> error. The compiling error happens after I include petscsf.h in the >> following section. I didn't find petscsf.h in petsc/finclude/ folder so I >> use the head file in the 'include' folder and this seems not allowed. >> >> I apologize for taking so long. The PetscSF definitions are in >> >> #include > Hi Matt, > > After including > #include > use petscis > > I still get error saying undefined reference to `petscsfgetgraph_' > > Did I miss any other head file? > > Thanks, > > Danyang >> >> You are correct that they should be moved out. >> >> Thanks, >> >> Matt >> >> #ifdef PETSC_V3_8_X >> >> #include >> #include >> #include >> #include >> use petscsys >> use petscdmplex >> use petscsf >> >> #endif >> >> Thanks, >> >> Danyang >> >> >> On 18-03-02 12:08 PM, Matthew Knepley wrote: >>> On Fri, Mar 2, 2018 at 3:00 PM, Danyang Su wrote: >>> On 18-03-02 10:58 AM, Matthew Knepley wrote: On Fri, Mar 2, 2018 at 1:41 PM, Danyang Su wrote: On 18-02-19 03:30 PM, Matthew Knepley wrote: > On Mon, Feb 19, 2018 at 3:11 PM, Danyang Su wrote: > Hi Matt, > > Would you please let me know how to check if a cell is local owned? When > overlap is 0 in DMPlexDistribute, all the cells are local owned. How > about overlap > 0? It sounds like impossible to check by node because a > cell can be local owned even if none of the nodes in this cell is local > owned. > > If a cell is in the PetscSF, then it is not locally owned. The local > nodes in the SF are sorted, so I use > PetscFindInt > (http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscFindInt.html). Hi Matt, Would you please give me a little more about how to mark the ghost cells when overlap > 0? What do you mean a cell is in the PetscSF? I use PetscSFView to export the graph (original mesh file pile.vtk) and it exports all the cells, including the ghost cells (PETScSFView.txt). Yes, I will send you some sample code when I get time. The first problem is that you are looking at a different PetscSF. This looks like the one returned by DMPlexDistribute(). This is mapping the serial mesh to the parallel mesh. You want http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMGetPointSF.html Then you can look at https://bitbucket.org/petsc/petsc/src/1788fc36644e622df8cb1a0de85676ccc5af0239/src/dm/impls/plex/plexsubmesh.c?at=master=file-view-default#plexsubmesh.c-683 I get the pointSF, get out the list of leaves, and find points in it using PetscFindInt() >>> Hi Matt, >>> By using the local dm, I can get the PetscSF I want, as shown below. Now I >>> need to get the number of ghost cells or local cells (here 4944) or number >>> of leaves (here 825) for each processor. I try to use PetscSFGetGraph to >>> get number of leaves in Fortran. After including "petscsf.h", I got >>> compilation error saying "You need a ISO C conforming compiler to use the >>> glibc headers". Is there any alternative way to do this? I do not need the >>> ghost-neighbor mapping, but just the number of local owned cells. >>> >>> Also, make sure you are using the latest Fortran style for PETSc: >>> >>> >>> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/UsingFortran.html >>> >>> [0] Number of roots=11449, leaves=825, remote ranks=1 >>> [0] 4944 <- (1,0) >>> [0] 4945 <- (1,28) >>> [0] 4946 <- (1,56) >>> ... >>> [1] Number of roots=11695, leaves=538, remote ranks=1 >>> [1] 5056 <- (0,21) >>> [1] 5057 <- (0,43) >>> [1] 5058 <- (0,65) >>> [1] 5059 <- (0,87) >>> >>> In file included from /usr/include/features.h:375:0, >>> from /usr/include/stdio.h:28, >>> from >>> /home/dsu/Soft/PETSc/petsc-3.8.3/include/petscsys.h:175, >>> from /home/dsu/Soft/PETSc/petsc-3.8.3/include/petscsf.h:7, >>> from ../../solver/solver_ddmethod.F90:4837: >>> /usr/include/x86_64-linux-gnu/sys/cdefs.h:30:3: error: #error "You need a >>> ISO C conforming compile\ >>> r to use the glibc headers" >>> # error "You need a ISO C conforming compiler to use the glibc headers" >>> >>> Can you send this to