[petsc-users] Fortran: undefined reference to petscsfdistributesection
Danyang Su
danyang.su at gmail.com
Mon Dec 3 15:12:03 CST 2018
On 2018-12-03 12:56 p.m., Matthew Knepley wrote:
> On Mon, Dec 3, 2018 at 3:40 PM Danyang Su <danyang.su at gmail.com
> <mailto:danyang.su at gmail.com>> wrote:
>
>
> 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).
>
> I do not understand what you are doing below. You just need to call
>
> ierr = DMSetUseNatural(dm,PETSC_TRUE);CHKERRQ(ierr);
> ierr = DMPlexDistribute(dm,0,&migrationSF,&pdm);CHKERRQ(ierr);
> if (pdm) {
> ierr = DMPlexSetMigrationSF(pdm,migrationSF);CHKERRQ(ierr);
> }
> and the DMGlobalToNaturalBegin/End() should work.
You mean to use DMPlexGlobalToNaturalBegin/End(), right? That's what I
tried at first, but without success.
I will create a test example to make further check if I can reproduce
the problem.
Thanks,
Danyang
>
> Thanks,
>
> Matt
>
> 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/>
>
>
>
> --
> 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/5175c89b/attachment.html>
More information about the petsc-users
mailing list