[petsc-users] Fortran interface of some petsc routines seem to be missing

Natacha BEREUX natacha.bereux at gmail.com
Thu Nov 29 07:41:41 CST 2018


Dear Barry
thank you very much for this very detailed answer. It's perfectly clear now.
I'll start writing the missing interfaces
I need to wait until I have made progress on writing the interfaces before
deciding whether to create a pull request or send part of the interface
definitions.
In any case, thank you again for your help,
Best regards
Natacha


On Tue, Nov 27, 2018 at 10:49 PM Smith, Barry F. <bsmith at mcs.anl.gov> wrote:

>
>     PETSc uses the Sowing packages bfort tool for automatically generating
> "Fortran stub functions" and interface definitions.  There are certain C
> functions that bfort cannot handling including (at least)
>
> 1) functions with character string arguments
> 2) functions with function pointer arguments (such as SNESSetFunction())
> 3) functions that support polymorphism between array and non-array
> arguments (for example VecSetValues() where the ix and y arguments can be
> either scalars or arrays).
> 4) functions that can take a NULL argument.
>
>     Functions that bfort can automatically generate the stub and the
> interface definition are marked with /*@ at the beginning of the comment
> above the function (see for example src/ksp/ksp/interface/itcreate.c
> KSPCreate()). If bfort cannot work then the comment begins with /*@C (see
> for example src/sys/objects/pinit.c PetscInitiialize()).
>
>     It is our intention to provide manual Fortran stubs and interface for
> functions that bfort cannot handle.
>
>     As you note we do not currently provide all the interface definitions,
> many even basic ones are missing. This is because we wrote the manual stub
> functions many, many years ago when we wrote the C functions but only in
> the past couple of years have we been providing interfaces and no one went
> back and added all the required manual interface definitions.
>
>    I did not know about the gfortran option -Wimplicit-interface; this is
> a great tool for finding missing interfaces. Thanks for letting us know
> about it.
>
>    The manually generated stub functions are stored in files in the
> subdirectories ftn-custom from where the C function is defined. The
> filename is the C file name prepended with a Z and appended with an f. For
> example snes.c   becomes ftn-custom/zsnesf.c   The manually generated
> interface definitions should go into the file src/XXX/f90-mod/petscYYY.h90
> for example the interfaces for VecSetValues are in
> src/vec/f90-mod/petscvec.h90
>
>    If you are ambitious and know about pull requests we'd be very happy to
> accept a pull request that provided the missing manual interface
> definitions. If you are less ambitious you could send us the interface
> definitions that you create and we'll add them ourselves to the PETSc
> repository. Or eventually we'll provide more and more of the interface
> definitions as time permits.
>
>
>    Barry
>
>
>
>
>
>
>
> > On Nov 27, 2018, at 9:28 AM, Natacha BEREUX via petsc-users <
> petsc-users at mcs.anl.gov> wrote:
> >
> > Hello,
> > I work on a Fortran software that uses PETSc for linear solvers.
> Therefore, we have a PETSc interface to convert our matrices to PETSc Mat.
> > I have noticed several compiler warnings ( I use gfortran with
> -Wimplicit-interface)  during compilation. The warnings point out that some
> (but not all) fortran interfaces are missing.
> >
> > The behaviour is the same when I compile a PETSC example. Below is
> src/vec/vec/examples/tutorials/ex9f.F compiled with gfortran.
> >
> > mpif90 -c -fPIC -Wall -ffree-line-length-0 -Wno-unused-dummy-argument
> -Wimplicit-interface  -g -O
> -I/home/H03755/Librairies/petsc-3.10.1/include
> -I/home/H03755/Librairies/petsc-3.10.1/linux-opt-mumps-ml-hypre-superlu/include
> -I/home/H03755/dev/codeaster-prerequisites/v14/prerequisites/Mumps-512_consortium_aster3/MPI/include
> -I/home/H03755/local/petsc/petsc-3.10.1/include    -o ex9f.o ex9f.F90
> > ex9f.F90:34.53:
> >
> >       call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
> >                                                      1
> > Warning: Procedure 'petscinitialize' called with an implicit interface
> at (1)
> > ex9f.F90:42.91:
> >
> >       if (size .ne. 2) then; call
> PetscError(PETSC_COMM_WORLD,1,0,'Requires 2 processors'); call
> MPIU_Abort(PETSC_COMM_WORLD,1); endif
> >
>                   1
> > Warning: Procedure 'petscerror' called with an implicit interface at (1)
> > ex9f.F90:42.128:
> >
> >       if (size .ne. 2) then; call
> PetscError(PETSC_COMM_WORLD,1,0,'Requires 2 processors'); call
> MPIU_Abort(PETSC_COMM_WORLD,1); endif
> >
>                                                        1
> > Warning: Procedure 'mpiu_abort' called with an implicit interface at (1)
> > ex9f.F90:81.56:
> >
> >      &        PETSC_DECIDE,nghost,ifrom,tarray,gxs,ierr)
> >                                                         1
> > Warning: Procedure 'veccreateghostwitharray' called with an implicit
> interface at (1)
> > ex9f.F90:99.53:
> >
> >        call VecGetOwnershipRange(gx,rstart,rend,ierr)
> >                                                      1
> > Warning: Procedure 'vecgetownershiprange' called with an implicit
> interface at (1)
> > ex9f.F90:115.93:
> >
> >        call
> PetscViewerGetSubViewer(PETSC_VIEWER_STDOUT_WORLD,PETSC_COMM_SELF,subviewer,ierr)
> >
>                     1
> > Warning: Procedure 'petscviewergetsubviewer' called with an implicit
> interface at (1)
> > ex9f.F90:117.97:
> >
> >        call
> PetscViewerRestoreSubViewer(PETSC_VIEWER_STDOUT_WORLD,PETSC_COMM_SELF,subviewer,ierr)
> >
>                         1
> > Warning: Procedure 'petscviewerrestoresubviewer' called with an implicit
> interface at (1)
> > ex9f.F90:121.31:
> >
> >        call PetscFinalize(ierr)
> >                                1
> > Warning: Procedure 'petscfinalize' called with an implicit interface at
> (1)
> >
> >
> > Why does the compiler complain  ?
> > Did I miss something when I compiled PETSc library ? Is there a way to
> properly generate all the Fortran interfaces in the compiled library ?
> > Or is it normal that PETSc only generates some interfaces but not all ?
> > In this case, is there a way to know which interfaces are explicitly and
> automatically  defined  in PETSc library ?  So that I can provide manually
> the missing ones in my code ?
> >
> > Thanks a lot for your help !
> > Best regards,
> > Natacha
> >
> >
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20181129/4fb2460e/attachment-0001.html>


More information about the petsc-users mailing list