[petsc-users] Question on DMPlexCreateSection for Fortran

Matthew Knepley knepley at gmail.com
Thu Feb 22 17:16:32 CST 2018


On Thu, Feb 22, 2018 at 6:10 PM, Danyang Su <danyang.su at gmail.com> wrote:

> Hi Matt,
>
> Just to let you know that after updating to PETSc 3.8.3 version, the
> DMPlexCreateSection in my code now works.
>
> One more question, what is the PETSC_NULL_XXX for IS pointer, as shown
> below, in C code, it just pass NULL, but in fortran, what is the name of
> null object for pBcCompIS and pBcPointIS.
>
Fortran does not "use pointers", so we need to pass a real object that we
then convert to a NULL pointer for C.
PETSC_NULL_IS is a real IS object in Fortran that then gets converted to
NULL before calling the C function.

  Thanks,

    Matt

>         call DMPlexCreateSection(dmda_flow%da,dmda_flow%dim,           &
>                                  numFields,pNumComp,pNumDof,           &
>                                  numBC,pBcField,                       &
>                                  pBcCompIS,pBcPointIS,                 &
>                                  PETSC_NULL_IS,section,ierr)
>         CHKERRQ(ierr)
>
> Thanks,
>
> Danyang
>
>
> On 18-02-21 09:22 AM, Danyang Su wrote:
>
> Hi Matt,
>
> To test the Segmentation Violation problem in my code, I modified the
> example ex1f90.F to reproduce the problem I have in my own code.
>
> If use DMPlexCreateBoxMesh to generate the mesh, the code works fine.
> However, if I use DMPlexCreateGmshFromFile, using the same mesh exported
> from "DMPlexCreateBoxMesh", it gives Segmentation Violation error.
>
> Did I miss something in the input mesh file? My first guess is the label
> "marker" used in the code, but I couldn't find any place to set this label.
>
> Would you please let me know how to solve this problem. My code is done in
> a similar way as ex1f90, it reads mesh from external file or creates from
> cell list, distributes the mesh (these already work), and then creates
> sections and sets ndof to the nodes.
>
> Thanks,
>
> Danyang
>
> On 18-02-20 10:07 AM, Danyang Su wrote:
>
> On 18-02-20 09:52 AM, Matthew Knepley wrote:
>
> On Tue, Feb 20, 2018 at 12:30 PM, Danyang Su <danyang.su at gmail.com> wrote:
>
>> Hi All,
>>
>> I tried to compile the DMPlexCreateSection code but got error information
>> as shown below.
>>
>> Error: Symbol 'petsc_null_is' at (1) has no IMPLICIT type
>>
>> I tried to use PETSC_NULL_OBJECT instead of PETSC_NULL_IS, then the code
>> can be compiled but run into Segmentation Violation error in
>> DMPlexCreateSection.
>>
> From the webpage
>
>   http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DMPLEX/
> DMPlexCreateSection.html
>
> The F90 version is DMPlexCreateSectionF90. Doing this with F77 arrays
> would have been too painful.
>
> Hi Matt,
>
> Sorry, I still cannot compile the code if use DMPlexCreateSectionF90
> instead of DMPlexCreateSection. Would you please tell me in more details?
>
> undefined reference to `dmplexcreatesectionf90_'
>
> then I #include <petsc/finclude/petscdmplex.h90>, but this throws more
> error during compilation.
>
>
>     Included at /home/dsu/Soft/PETSc/petsc-3.7.5/include/petsc/finclude/
> petscdmplex.h90:6:
>     Included at ../../solver/solver_ddmethod.F90:62:
>
>           PETSCSECTION_HIDE section
>           1
> Error: Unclassifiable statement at (1)
> /home/dsu/Soft/PETSc/petsc-3.7.5/include/petsc/finclude/
> ftn-custom/petscdmplex.h90:167.10:
>     Included at /home/dsu/Soft/PETSc/petsc-3.7.5/include/petsc/finclude/
> petscdmplex.h90:6:
>     Included at ../../solver/solver_ddmethod.F90:62:
>
>           PETSCSECTION_HIDE section
>           1
> Error: Unclassifiable statement at (1)
> /home/dsu/Soft/PETSc/petsc-3.7.5/include/petsc/finclude/
> ftn-custom/petscdmplex.h90:179.10:
>     Included at /home/dsu/Soft/PETSc/petsc-3.7.5/include/petsc/finclude/
> petscdmplex.h90:6:
>     Included at ../../solver/solver_ddmethod.F90:62:
>
>
>   Thanks,
>
>      Matt
>
>> dmda_flow%da is distributed dm object that works fine.
>>
>> The fortran example I follow is http://www.mcs.anl.gov/petsc/p
>> etsc-dev/src/dm/impls/plex/examples/tutorials/ex1f90.F90.
>>
>> What parameters should I use if passing null to bcField, bcComps,
>> bcPoints and perm.
>>
>> PetscErrorCode <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/Vec/PetscErrorCode.html#PetscErrorCode> DMPlexCreateSection <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/DMPLEX/DMPlexCreateSection.html#DMPlexCreateSection>(DM <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/DM/DM.html#DM> dm, PetscInt <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/Vec/PetscInt.html#PetscInt> dim, PetscInt <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/Vec/PetscInt.html#PetscInt> numFields,const PetscInt <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/Vec/PetscInt.html#PetscInt> numComp[],const PetscInt <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/Vec/PetscInt.html#PetscInt> numDof[], PetscInt <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/Vec/PetscInt.html#PetscInt> numBC,const PetscInt <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/Vec/PetscInt.html#PetscInt> bcField[],
>> const IS <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/IS/IS.html#IS> bcComps[], const IS <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/IS/IS.html#IS> bcPoints[], IS <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/IS/IS.html#IS> perm, PetscSection <https://www.mcs.anl.gov/petsc/petsc-master/docs/manualpages/IS/PetscSection.html#PetscSection> *section)
>>
>>
>> #include <petsc/finclude/petscis.h>
>> #include <petsc/finclude/petscis.h90>
>> #include <petsc/finclude/petscdmplex.h>
>>
>> ...
>>
>> #ifdef USG
>>         numFields = 1
>>         numComp(1) = 1
>>         pNumComp => numComp
>>
>>         do i = 1, numFields*(dmda_flow%dim+1)
>>           numDof(i) = 0
>>         end do
>>         numDof(0*(dmda_flow%dim+1)+1) = dmda_flow%dof
>>         pNumDof => numDof
>>
>>         numBC = 0
>>
>>         call DMPlexCreateSection(dmda_flow%da,dmda_flow%dim,          &
>>                                  numFields,pNumComp,pNumDof,
>> &
>>                                  numBC,PETSC_NULL_INTEGER,
>> &
>>                                  PETSC_NULL_IS,PETSC_NULL_IS,
>> &             !Error here
>>                                  PETSC_NULL_IS,section,ierr)
>>         CHKERRQ(ierr)
>>
>>         call PetscSectionSetFieldName(section,0,'flow',ierr)
>>         CHKERRQ(ierr)
>>
>>         call DMSetDefaultSection(dmda_flow%da,section,ierr)
>>         CHKERRQ(ierr)
>>
>>         call PetscSectionDestroy(section,ierr)
>>         CHKERRQ(ierr)
>> #endif
>>
>> 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.caam.rice.edu/%7Emk51/>
>
>
>
>
>


-- 
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.caam.rice.edu/~mk51/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20180222/06b9bdf2/attachment-0001.html>


More information about the petsc-users mailing list