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. <[email protected]> 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 < > [email protected]> 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 > > > > > > > > > >
