Thank you for the comments. I have these errors when I call PetscSFView() after DMGetNaturalSF()
[2]PETSC ERROR: --------------------- Error Message -------------------------------------------------------------- [2]PETSC ERROR: Null argument, when expecting valid pointer [2]PETSC ERROR: Null Pointer: Parameter # 1 [2]PETSC ERROR: See https://petsc.org/release/faq/ for trouble shooting. [2]PETSC ERROR: Petsc Release Version 3.17.0, unknown [2]PETSC ERROR: #1 PetscSFView() at [2]PETSC ERROR: #2 User provided function() at User file:0 Abort(85) on node 2 (rank 0 in comm 16): application called MPI_Abort(MPI_COMM_SELF, 85) - process 0 Below is the structure to load a mesh file from gmsh; call DMCreate(PETSC_COMM_WORLD, dm, ierr);CHKERRA(ierr) call DMSetType(dm, plex, ierr);CHKERRA(ierr) call DMSetUseNatural(dm, PETSC_TRUE, ierr);CHKERRA(ierr) call DMSetFromOptions(dm, ierr);CHKERRA(ierr) call DMGetNaturalSF(dm, sf_nat, ierr);CHKERRA(ierr) call PetscSFView(sf_nat, PETSC_VIEWER_STDOUT_WORLD, ierr);CHKERRA(ierr) Best On Thu, Jul 14, 2022 at 10:49 AM Matthew Knepley <[email protected]> wrote: > On Wed, Jul 13, 2022 at 10:17 PM Bora Jeong <[email protected]> wrote: > >> Dear petsc team, >> >> I am a user of DMPlex for a finite volume code and there is a necessity >> to know global index of each cell. Here the global index means the indexing >> that can be found from a mesh file itself without distribution over >> processors. It seems petsc community denotes this indexing term as >> "natural". >> >> What I want to do is to create a local array (not petsc vector but just >> an array variable in the program) to map distributed cell ID to natual cell >> ID, for example, an array "A"; >> A(distributed_node_ID) = natural_node_ID >> >> There are some petsc functions to support mapping between global and >> natural vectors. However, I just need to define the array "A" as above >> example. To achieve this, what is a proper/smart way? In other words, how >> can I extract the natural_cell_ID from a distributed local_cell_ID? >> >> I turned on DMSetUseNatural(DM, PETSC_TRUE) before distribution, but >> after this, defining all the required section and star forest objects to >> get natural and global vectors seems not that direct way for my purpose, >> which is just to extract the above mapping array "A". Can I get any >> comments about it? >> > > There is only one thing created, the sfNatural PetscSF object, which you > can get with DMGetNaturalSF(). The roots of this SF are > the global numbers of dofs stored in PETSc vectors, and the leaves are > natural numbers for these dofs. Thus, when we map global > vectors to natural vectors in DMPlexGlobalToNaturalBegin/End(), we > call PetscSFBcastBegin/End(). Mapping natural to global we call > PetscSFReduceBegin/End(). You could pull the information out of the SF > using PetscSFGetGraph() if you want. > > Thanks, > > Matt > > >> Regards >> Mo >> > > > -- > 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/> >
