For Fortran users of the PETSc development (git master branch) version


    I have updated and simplified the Fortran usage of PETSc in the past few 
weeks. I will put the branch barry/fortran-update into the master branch on 
Monday. The usage changes are

A)  for each Fortran function (and main) use the following

       subroutine mysubroutine(.....)
#include <petsc/finclude/petscxxx.h>
       use petscxxx
       implicit none

     For example if you are using SNES in your code you would have 

#include <petsc/finclude/petscsnes.h>
       use petscsnes
       implicit none

B) Instead of PETSC_NULL_OBJECT you must pass PETSC_NULL_XXX (for example 
PETSC_NULL_VEC) using the specific object type XXX that the function call is 
expecting.

C) Objects can be declared either as XXX  a  or  type(iXXX) a, for example Mat 
a or type(iMat) a.  (Note that previously for those who used types it was 
type(Mat) but that can no longer be used.

Notes:

1)   There are no longer any .h90 files that may be included

2)    Like C the include files are now nested so you no longer need to include 
for example

#include <petsc/finclude/petscsys.h>
#include <petsc/finclude/petscvec.h>
#include <petsc/finclude/petscmat.h>
#include <petsc/finclude/petscpc.h>
#include <petsc/finclude/petscksp.h>

you can just include 

#include <petsc/finclude/petscksp.h>

3) there is now type checking of most function calls. This will help eliminate 
bugs due to incorrect calling sequences. Note that Fortran distinguishes 
between a argument that is a scalar (zero dimensional array), a one dimensional 
array and a two dimensional array (etc). So you may get compile warnings 
because you are passing in an array when PETSc expects a scalar or vis-versa. 
If you get these simply fix your declaration of the variable to match what is 
expected. In some routines like MatSetValues() and friends you can pass either 
scalars, one dimensional arrays or two dimensional arrays, if you get errors 
here please send mail to [email protected] and include enough of your 
code so we can see the dimensions of all your variables so we can fix the 
problems.

4) You can continue to use either fixed (.F extension) or free format (.F90 
extension) for your source

5) All the examples in PETSc have been updated so consult them for 
clarifications.


  Please report any problems to [email protected]

   Thanks

   Barry


Reply via email to