Actual source code: ex5f.h

      1: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      2: !             Include file for program ex5f.F
      3: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      4: !
      5: !  This program uses CPP for preprocessing, as indicated by the use of
      6: !  PETSc include files in the directory petsc/include/finclude.  This
      7: !  convention enables use of the CPP preprocessor, which allows the use
      8: !  of the #include statements that define PETSc objects and variables.
      9: !
     10: !  Use of the conventional Fortran include statements is also supported
     11: !  In this case, the PETsc include files are located in the directory
     12: !  petsc/include/foldinclude.
     13: !
     14: !  Since one must be very careful to include each file no more than once
     15: !  in a Fortran routine, application programmers must explicitly list
     16: !  each file needed for the various PETSc components within their
     17: !  program (unlike the C/C++ interface).
     18: !
     19: !  See the Fortran section of the PETSc users manual for details.
     20: !
     21: !  The following include statements are generally used in SNES Fortran
     22: !  programs:
     23: !     petsc.h  - base PETSc routines
     24: !     petscvec.h    - vectors
     25: !     petscmat.h    - matrices
     26: !     petscksp.h    - Krylov subspace methods
     27: !     petscpc.h     - preconditioners
     28: !     petscsnes.h   - SNES interface
     29: !  In addition, we need the following for use of distributed arrays
     30: !     petscda.h     - distributed arrays (DAs)

     32:  #include include/finclude/petsc.h
     33:  #include include/finclude/petscvec.h
     34:  #include include/finclude/petscda.h
     35:  #include include/finclude/petscis.h
     36:  #include include/finclude/petscmat.h
     37:  #include include/finclude/petscksp.h
     38:  #include include/finclude/petscpc.h
     39:  #include include/finclude/petscsnes.h

     41: !  Common blocks:
     42: !  In this example we use common blocks to store data needed by the
     43: !  application-provided call-back routines, FormJacobian() and
     44: !  FormFunction().  Note that we can store (pointers to)
     45: !  PETSc objects within these common blocks.
     46: !
     47: !  common /params/ - contains parameters for the global application
     48: !     mx, my   - global discretization in x- and y-directions
     49: !     lambda   - nonlinearity parameter
     50: !
     51: !  common /pdata/  - contains some parallel data
     52: !     da       - distributed array
     53: !     rank     - processor rank within communicator
     54: !     size     - number of processors
     55: !     xs, ys   - local starting grid indices (no ghost points)
     56: !     xm, ym   - widths of local grid (no ghost points)
     57: !     gxs, gys - local starting grid indices (including ghost points)
     58: !     gxm, gym - widths of local grid (including ghost points)

     60:       DA      da
     61:       PetscInt xs,xe,xm,gxs,gxe,gxm
     62:       PetscInt ys,ye,ym,gys,gye,gym
     63:       PetscInt mx,my
     64:       PetscMPIInt rank,size
     65:       double precision lambda

     67:       common /params/ lambda,mx,my
     68:       common /pdata/  xs,xe,xm,gxs,gxe,gxm
     69:       common /pdata/  ys,ye,ym,gys,gye,gym
     70:       common /pdata/  da,rank,size

     72: ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -