[petsc-users] petsc with fortran modules

Satish Balay balay at mcs.anl.gov
Fri Nov 3 19:41:56 CDT 2017


On Fri, 3 Nov 2017, Ed D'Azevedo wrote:

> Dear PETSc expert,
> 
> I have a question on the correct way to use  Fortran module in petsc.
> 
> In this url on "UsingFortran"
> 
> 
> http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/UsingFortran.html#UsingFortran
> 
> 
> it mentions including both the "petsc/finclude/petscXXX.h" file and the
> Fortran "use" statement.
> 
> The example show the following:
> 
> 
> #include "petsc/finclude/petscvec.h"
>         use petscvec
> 
>    Vec b
>    type(tVec) x

Just to note: its either of the above 2 statements.

> 
> 
> My understanding of Fortran syntax is there cannot be "parameter" statements
> before the module "use" statement or in other words   "use" statement cannot
> follow "parameter" statement.
> 
> Do I understand correctly then all ".h" include header files under
> "petsc/finclude/" should not have "parameter" statements but just pure  cpp
> macro statements such as "#define" or "#ifdef"?

yes.

balay at asterix /home/balay/petsc ((v3.8))
$ grep parameter include/petsc/finclude/*
include/petsc/finclude/petscsys.h:! F90 uses real(), conjg() when KIND parameter is used.
balay at asterix /home/balay/petsc ((v3.8))
$ 

> 
> One may imagine substituting "parameter" statements with '#define' such as
> instead of
> 
> parameter (NOT_SET_VALUES=0)
> 
> #define NOT_SET_VALUES 0
> 
> #define not_set_values 0
> 
> In the petsc version 3.6.2  under include/petsc/finclude,  there seems to be
> some files such as petscvec.h and  petscmat.h that contain "parameter"
> statements.

The above doc corresponds to petsc-3.8 (with major changes for fortran
module usage) - which is an upgrade we recommend for fortran usage.

> 
> 
> 
> If there should be "parameter" statements in the petsc/finclude header files,
> perhaps the order of the code should be to list  all F90 module "use"
> statements first, then include 'petsc/finclude' header files?

For older releases - we split paramaters and #defines into different
set of includes.  So one would use to get only the #defines

#define "petscdef.h"


Satish

> 
> 
> !
> ------------------------------------------------------------------------------
> 
> ! parameter statements after the module use statement
> 
> !
> ------------------------------------------------------------------------------
> 
>    use petscvec
> 
> #include "petsc/finclude/petscvec.h"
> 
>    Vec b
>    type(tVec) x
> 
> 
> 


More information about the petsc-users mailing list