[petsc-users] [petsc-maint] Issues linking petsc header files and lib from FORTRAN codes

Jianbo Long longtuteng249 at gmail.com
Mon Nov 7 10:49:06 CST 2022


Hi Satish and Barry,

Thanks very much for the feedback !

It looks like my include file path was not correct !

Bests,
Jianbo


On Fri, Nov 4, 2022 at 6:08 AM Satish Balay <balay at mcs.anl.gov> wrote:

> For ex83f.F90:
>
> >>>>>
> balay at p1 /home/balay/test
> $ ls
> ex83f.F90
> balay at p1 /home/balay/test
> $ ls
> ex83f.F90
> balay at p1 /home/balay/test
> $ export PETSC_DIR=$HOME/petsc
> balay at p1 /home/balay/test
> $ cp $PETSC_DIR/src/ksp/ksp/tests/makefile .
> balay at p1 /home/balay/test
> $ make ex83f
> mpif90 -fPIC -Wall -ffree-line-length-none -ffree-line-length-0
> -Wno-lto-type-mismatch -Wno-unused-dummy-argument -g -O0
>  -I/home/balay/petsc/include
> -I/home/balay/petsc/arch-linux-c-debug/include     ex83f.F90
> -Wl,-rpath,/home/balay/petsc/arch-linux-c-debug/lib
> -L/home/balay/petsc/arch-linux-c-debug/lib
> -Wl,-rpath,/home/balay/soft/mpich-4.0.1/lib
> -L/home/balay/soft/mpich-4.0.1/lib
> -Wl,-rpath,/usr/lib/gcc/x86_64-redhat-linux/12
> -L/usr/lib/gcc/x86_64-redhat-linux/12 -lpetsc -llapack -lblas -lm -lX11
> -lstdc++ -ldl -lmpifort -lmpi -lgfortran -lm -lgfortran -lm -lgcc_s
> -lquadmath -lstdc++ -ldl -o ex83f
> balay at p1 /home/balay/test
> $
> <<<<<<
>
> Also when you are adding PETSc to your current project - are you using
> source files with .f or .f90 suffix? If so rename them to .F or .F90 suffix.
>
> If you still have issues send more details - As Barry indicated - the
> makefile [with the sources compiled by this makefile] - and the compile log
> when you attempt to build these sources with this makefile.
>
> Satish
>
> On Thu, 3 Nov 2022, Barry Smith wrote:
>
> >
> >  Please send your attempted makefile and we'll see if we can get it
> working.
> >
> >   I am not sure if we can organize the include files as Fortran compiler
> include files easily. We've always used the preprocessor approach. The
> Intel compiler docs indicate the procedure for finding the Fortran compiler
> include files
> https://www.intel.com/content/www/us/en/develop/documentation/fortran-compiler-oneapi-dev-guide-and-reference/top/program-structure/use-include-files.html
> is the same as for the preprocessor include files so I don't understand how
> the using the Fortran compiler include file approach would make the
> makefiles any simpler for users?
> >
> >
> >   Barry
> >
> >
> > > On Nov 3, 2022, at 8:58 PM, Jianbo Long <longtuteng249 at gmail.com>
> wrote:
> > >
> > > Hello,
> > >
> > > I'm struggling to make my FORTRAN code work with petsc as I cannot
> link the required header files (e.g., petscksp.h) and compiled library
> files to my FORTRAN code.
> > >
> > > Compiling petsc was not a problem. However, even with the fortran
> examples (see those on https://petsc.org/main/docs/manual/fortran/) and
> the guide on using petsc in c++ and fortran codes (see Section "Writing
> C/C++ or Fortran Applications" at
> https://petsc.org/main/docs/manual/getting_started/), I still cannot make
> my FORTRAN code work.
> > >
> > > The Fortran test code is exactly the example code ex83f.F90 (see
> attached files). Aftering following the 2nd method in the Guide (see the
> picture below), I still get errors:
> > >
> > > petsc/finclude/petscksp.h: No such file or directory
> > >
> > > Even if I set up the path of the header file correctly in my own
> makefile without using environment variables, I still can only find the
> file "petscksp.h" for my code. Of course, the trouble is that all other
> headers files required by KSP are recursively included in this petscksp.h
> file, and I have no way to link them together for my Fortran code.
> > >
> > > So, here are my questions:
> > > 1) in the Guide, how exactly are we supposed to set up the environment
> variables  PETSC_DIR  and PETSC_ARCH ? More details and examples would be
> extremely helpful !
> > > 2) Is there a way to get rid of the preprocessor statement
> > >  #include <petsc/finclude/petscvec.h>
> > > when using c++/Fortran codes ?
> > >
> > > For example, when using MUMPS package in a Fortran code, we can simply
> use compiler 'include', rather than a preprocessor, to extract all required
> variables for the user's codes :
> > >   INCLUDE 'zmumps_struc.h'
> > > where the header file zmumps_struc.h is already provided in the
> package. Similarly, I think it's much more portable and easier when using
> petsc in other codes if we can make it work to use petsc.
> > >
> > > (Note: similar issues were discussed before, see
> https://lists.mcs.anl.gov/mailman/htdig/petsc-users/2019-January/037499.html.
> Unfortunately, I have no clue about the solution archived there ...)
> > >
> > > Any thoughts and solutions would be much appreciated !
> > >
> > > Thanks,
> > > Jianbo Long
> > >
> > > <image.png>
> > > <ex83f.F90>
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20221107/27dc1f1a/attachment-0001.html>


More information about the petsc-users mailing list