[petsc-users] Fortran: undefined reference to petscsfdistributesection

Danyang Su danyang.su at gmail.com
Mon Dec 3 14:40:21 CST 2018


On 2018-12-03 12:03 p.m., Matthew Knepley wrote:
> On Mon, Dec 3, 2018 at 2:27 PM Danyang Su <danyang.su at gmail.com 
> <mailto:danyang.su at gmail.com>> wrote:
>
>     Hi Matt,
>
>     Thanks.
>
>     BTW: DmPlexGetVertexNumbering now can work using the latest
>     develop version. But the index is not in natural ordering when
>     DMSetUseNatural is called. That's why I want to use
>     PetscSFDistributeSection to check if I miss anything in the code.
>
> Can you explain that a little more? Maybe you can just push forward 
> what you want using the migrationSF.

Hi Matt,

Since I cannot figure what is wrong or missing in my code, I followed an 
old ex26.c example in src/dm/impls/plex/examples/tests to create similar 
code as shown below to test global to natural ordering. The code may be 
ugly with unnecessary functions in it. Using DmPlexGetVertexNumbering, I 
can get the value but it is not in natural order, instead, it is still 
in default PETSc order without calling DMSetUseNatural(dm,PETSC_TRUE,ierr).

           if (rank == 0) then
             call 
DMPlexCreateFromCellList(Petsc_Comm_World,ndim,num_cells, 
num_nodes,num_nodes_per_cell,    &
Petsc_False,dmplex_cells,ndim, dmplex_verts,dm,ierr)
             CHKERRQ(ierr)
           else
             call DMPlexCreateFromCellList(Petsc_Comm_World,ndim,0, 
0,num_nodes_per_cell,    &
Petsc_False,dmplex_cells,ndim,dmplex_verts,dm,ierr)
             CHKERRQ(ierr)
           end if

           if (nprocs > 1) then
             call DMSetUseNatural(dm,PETSC_TRUE,ierr)
             CHKERRQ(ierr)
           end if

           call DMPlexDistribute(dm,stencil_width, &
migrationsf,distributedMesh,ierr)
           CHKERRQ(ierr)

           if (distributedMesh /= PETSC_NULL_DM) then
             call PetscSFCreateInverseSF(migrationsf,migrationsf_inv,ierr)
             CHKERRQ(ierr)

             call 
DMCreateGlobalToNatural(distributedMesh,migrationsf,migrationsf_inv,ierr)
             CHKERRQ(ierr)

             call DMGetSection(distributedMesh,section,ierr)
             CHKERRQ(ierr)

             call PetscSectionCreate(Petsc_Comm_World,section_seq,ierr)
             CHKERRQ(ierr)

             call PetscSFDistributeSection(migrationsf_inv,section,       &
                         PETSC_NULL_INTEGER,section_seq,ierr)
             CHKERRQ(ierr)

             call DMPlexCreateGlobalToNaturalSF(distributedMesh,          &
                        section_seq,migrationsf,sf_natural,ierr)
             CHKERRQ(ierr)

             call DMSetUseNatural(distributedMesh,PETSC_TRUE,ierr)
             CHKERRQ(ierr)

             call PetscSFDestroy(migrationsf,ierr)
             CHKERRQ(ierr)

             call PetscSFDestroy(migrationsf_inv,ierr)
             CHKERRQ(ierr)

           end if

Thanks,

Danyang

>
>   Thanks,
>
>      Matt
>
>     Regards,
>
>     Danyang
>
>     On 2018-12-03 5:22 a.m., Matthew Knepley wrote:
>>     I need to write a custom Fortran stub for this one. I will get it
>>     done as soon as possible.
>>
>>       Thanks,
>>
>>         Matt
>>
>>     On Sat, Dec 1, 2018 at 7:16 PM Danyang Su via petsc-users
>>     <petsc-users at mcs.anl.gov <mailto:petsc-users at mcs.anl.gov>> wrote:
>>
>>         Hi All,
>>
>>         I got a simple compilation error when use
>>         PetscSFDistributeSection in
>>         Fortran. It looks like the required head files are included
>>         and the
>>         parameters are correctly defined. However, when compile the
>>         code, I got
>>         error undefined reference to `petscsfdistributesection_'. The
>>         code is
>>         shown below. Did I miss anything here?
>>
>>         #include <petsc/finclude/petscsys.h>
>>         #include <petsc/finclude/petscvec.h>
>>         #include <petsc/finclude/petscdm.h>
>>         #include <petsc/finclude/petscdmplex.h>
>>                use petscsys
>>                use petscvec
>>                use petscdm
>>                use petscdmplex
>>
>>                implicit none
>>
>>                PetscSection ::  section, section_seq
>>                PetscSF :: migrationsf_inv, sf_natural
>>                Vec :: vec_global, vec_natural
>>                PetscErrorCode :: ierr
>>
>>                ...
>>
>>                call PetscSFDistributeSection(migrationsf_inv,section,
>>                &
>>         PETSC_NULL_INTEGER,section_seq,ierr)
>>                CHKERRQ(ierr)
>>
>>
>>                    call
>>         PetscSFDistributeSection(migrationsf_inv,section,    &
>>          PETSC_NULL_INTEGER,section_seq,ierr)
>>                    CHKERRQ(ierr)
>>
>>         Thanks,
>>
>>         Danyang
>>
>>
>>
>>     -- 
>>     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/>
>
>
>
> -- 
> 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/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20181203/c074fd93/attachment.html>


More information about the petsc-users mailing list