Actual source code: petscsys.h
petsc-3.7.7 2017-09-25
Report Typos and Errors

      1: !
      2: !
      3: !  Base include file for Fortran use of the PETSc package.
      4: !
      5: #include "petscconf.h"
      6:  #include petscversion.h
      7:  #include petsc/finclude/petscsysdef.h

      9: #if !defined(PETSC_AVOID_MPIF_H)
     10: #include "mpif.h"
     11: #endif

     13: ! ------------------------------------------------------------------------
     14: !     Non Common block Stuff declared first
     15: !
     16: !     Flags
     17: !
     18:       PetscBool  PETSC_TRUE
     19:       PetscBool  PETSC_FALSE
     20: #if defined(PETSC_FORTRAN_PETSCTRUTH_INT)
     21:       parameter (PETSC_TRUE = 1,PETSC_FALSE = 0)
     22: #else
     23:       parameter (PETSC_TRUE = .true.,PETSC_FALSE = .false.)
     24: #endif
     25:       PetscInt   PETSC_DECIDE,PETSC_DETERMINE
     26:       parameter (PETSC_DECIDE=-1,PETSC_DETERMINE=-1)

     28:       PetscInt  PETSC_DEFAULT_INTEGER
     29:       parameter (PETSC_DEFAULT_INTEGER = -2)

     31:       PetscReal PETSC_DEFAULT_REAL
     32:       parameter (PETSC_DEFAULT_REAL=-2.0d0)

     34:       PetscEnum PETSC_FP_TRAP_OFF
     35:       PetscEnum PETSC_FP_TRAP_ON
     36:       parameter (PETSC_FP_TRAP_OFF = 0,PETSC_FP_TRAP_ON = 1)

     40: !
     41: !     Default PetscViewers.
     42: !
     43:       PetscFortranAddr PETSC_VIEWER_DRAW_WORLD
     44:       PetscFortranAddr PETSC_VIEWER_DRAW_SELF
     45:       PetscFortranAddr PETSC_VIEWER_SOCKET_WORLD
     46:       PetscFortranAddr PETSC_VIEWER_SOCKET_SELF
     47:       PetscFortranAddr PETSC_VIEWER_STDOUT_WORLD
     48:       PetscFortranAddr PETSC_VIEWER_STDOUT_SELF
     49:       PetscFortranAddr PETSC_VIEWER_STDERR_WORLD
     50:       PetscFortranAddr PETSC_VIEWER_STDERR_SELF
     51:       PetscFortranAddr PETSC_VIEWER_BINARY_WORLD
     52:       PetscFortranAddr PETSC_VIEWER_BINARY_SELF
     53:       PetscFortranAddr PETSC_VIEWER_MATLAB_WORLD
     54:       PetscFortranAddr PETSC_VIEWER_MATLAB_SELF

     56: !
     57: !     The numbers used below should match those in
     58: !     petsc/private/fortranimpl.h
     59: !
     60:       parameter (PETSC_VIEWER_DRAW_WORLD   = 4)
     61:       parameter (PETSC_VIEWER_DRAW_SELF    = 5)
     62:       parameter (PETSC_VIEWER_SOCKET_WORLD = 6)
     63:       parameter (PETSC_VIEWER_SOCKET_SELF  = 7)
     64:       parameter (PETSC_VIEWER_STDOUT_WORLD = 8)
     65:       parameter (PETSC_VIEWER_STDOUT_SELF  = 9)
     66:       parameter (PETSC_VIEWER_STDERR_WORLD = 10)
     67:       parameter (PETSC_VIEWER_STDERR_SELF  = 11)
     68:       parameter (PETSC_VIEWER_BINARY_WORLD = 12)
     69:       parameter (PETSC_VIEWER_BINARY_SELF  = 13)
     70:       parameter (PETSC_VIEWER_MATLAB_WORLD = 14)
     71:       parameter (PETSC_VIEWER_MATLAB_SELF  = 15)
     72: !
     73: !     PETSc DataTypes
     74: !
     75:       PetscEnum PETSC_INT
     76:       PetscEnum PETSC_DOUBLE
     77:       PetscEnum PETSC_COMPLEX
     78:       PetscEnum PETSC_LONG
     79:       PetscEnum PETSC_SHORT
     80:       PetscEnum PETSC_FLOAT
     81:       PetscEnum PETSC_CHAR
     82:       PetscEnum PETSC_BIT_LOGICAL
     83:       PetscEnum PETSC_ENUM
     84:       PetscEnum PETSC_BOOL
     85:       PetscEnum PETSC___FLOAT128

     87: #if defined(PETSC_USE_REAL_SINGLE)
     88: #define PETSC_REAL PETSC_FLOAT
     89: #elif defined(PETSC_USE_REAL___FLOAT128)
     90: #define PETSC_REAL PETSC___FLOAT128
     91: #else
     92: #define PETSC_REAL PETSC_DOUBLE
     93: #endif
     94: #define PETSC_FORTRANADDR PETSC_LONG

     96:       parameter (PETSC_INT=0,PETSC_DOUBLE=1,PETSC_COMPLEX=2)
     97:       parameter (PETSC_LONG=3,PETSC_SHORT=4,PETSC_FLOAT=5)
     98:       parameter (PETSC_CHAR=6,PETSC_BIT_LOGICAL=7,PETSC_ENUM=8)
     99:       parameter (PETSC_BOOL=9,PETSC___FLOAT128=10)
    100: !
    101: !
    102: !
    103:       PetscEnum PETSC_COPY_VALUES
    104:       PetscEnum PETSC_OWN_POINTER
    105:       PetscEnum PETSC_USE_POINTER

    107:       parameter (PETSC_COPY_VALUES = 0)
    108:       parameter (PETSC_OWN_POINTER = 1)
    109:       parameter (PETSC_USE_POINTER = 2)
    110: !
    111: ! ------------------------------------------------------------------------
    112: !     PETSc mathematics include file. Defines certain basic mathematical
    113: !    constants and functions for working with single and double precision
    114: !    floating point numbers as well as complex and integers.
    115: !
    116: !     Representation of complex i
    117: !
    118:       PetscFortranComplex PETSC_i
    119: #if defined(PETSC_USE_REAL_SINGLE)
    120:       parameter (PETSC_i = (0.0e0,1.0e0))
    121: #else
    122:       parameter (PETSC_i = (0.0d0,1.0d0))
    123: #endif

    125: !
    126: ! ----------------------------------------------------------------------------
    127: !    BEGIN PETSc aliases for MPI_ constants
    128: !
    129: !   These values for __float128 are handled in the common block (below)
    130: !     and transmitted from the C code
    131: !
    132: #if !defined(PETSC_USE_REAL___FLOAT128)
    133:       integer MPIU_REAL
    134: #if defined (PETSC_USE_REAL_SINGLE)
    135:       parameter (MPIU_REAL = MPI_REAL)
    136: #else
    137:       parameter(MPIU_REAL = MPI_DOUBLE_PRECISION)
    138: #endif

    140:       integer MPIU_SUM
    141:       parameter (MPIU_SUM = MPI_SUM)

    143:       integer MPIU_SCALAR
    144: #if defined(PETSC_USE_COMPLEX)
    145: #if defined (PETSC_USE_REAL_SINGLE)
    146:       parameter(MPIU_SCALAR = MPI_COMPLEX)
    147: #else
    148:       parameter(MPIU_SCALAR = MPI_DOUBLE_COMPLEX)
    149: #endif
    150: #else
    151: #if defined (PETSC_USE_REAL_SINGLE)
    152:       parameter (MPIU_SCALAR = MPI_REAL)
    153: #else
    154:       parameter(MPIU_SCALAR = MPI_DOUBLE_PRECISION)
    155: #endif
    156: #endif
    157: #endif

    159:       integer MPIU_INTEGER
    160: #if defined(PETSC_USE_64BIT_INDICES)
    161:       parameter(MPIU_INTEGER = MPI_INTEGER8)
    162: #else
    163:       parameter(MPIU_INTEGER = MPI_INTEGER)
    164: #endif

    166: !
    167: ! ----------------------------------------------------------------------------
    168: !    BEGIN COMMON-BLOCK VARIABLES
    169: !
    170: !
    171: !     PETSc world communicator
    172: !
    173:       MPI_Comm PETSC_COMM_WORLD
    174:       MPI_Comm PETSC_COMM_SELF
    175: !
    176: !     Fortran Null
    177: !
    178:       PetscChar(80)       PETSC_NULL_CHARACTER
    179:       PetscInt            PETSC_NULL_INTEGER
    180:       PetscFortranDouble  PETSC_NULL_DOUBLE
    181:       PetscObject         PETSC_NULL_OBJECT
    182: !
    183: !      A PETSC_NULL_FUNCTION pointer
    184: !
    185:       external PETSC_NULL_FUNCTION
    186:       PetscScalar   PETSC_NULL_SCALAR
    187:       PetscReal     PETSC_NULL_REAL
    188:       PetscBool     PETSC_NULL_BOOL
    189: !
    190: #if defined(PETSC_USE_REAL___FLOAT128)
    191:       integer MPIU_REAL
    192:       integer MPIU_SCALAR
    193:       integer MPIU_SUM
    194: #endif
    195: !
    196: !
    197: !
    198: !     Basic math constants
    199: !
    200:       PetscReal PETSC_PI
    201:       PetscReal PETSC_MAX_REAL
    202:       PetscReal PETSC_MIN_REAL
    203:       PetscReal PETSC_MACHINE_EPSILON
    204:       PetscReal PETSC_SQRT_MACHINE_EPSILON
    205:       PetscReal PETSC_SMALL
    206:       PetscReal PETSC_INFINITY
    207:       PetscReal PETSC_NINFINITY

    209: !
    210: !     Common Block to store some of the PETSc constants.
    211: !     which can be set - only at runtime.
    212: !
    213:       common /petscfortran1/ PETSC_NULL_CHARACTER
    214:       common /petscfortran2/ PETSC_NULL_INTEGER
    215:       common /petscfortran4/ PETSC_NULL_SCALAR
    216:       common /petscfortran5/ PETSC_NULL_DOUBLE
    217:       common /petscfortran6/ PETSC_NULL_REAL
    218:       common /petscfortran7/ PETSC_NULL_BOOL
    219:       common /petscfortran8/ PETSC_NULL_OBJECT
    220:       common /petscfortran9/ PETSC_COMM_WORLD
    221:       common /petscfortran10/ PETSC_COMM_SELF
    222: #if defined(PETSC_USE_REAL___FLOAT128)
    223:       common /petscfortran11/ MPIU_REAL
    224:       common /petscfortran12/ MPIU_SCALAR
    225:       common /petscfortran13/ MPIU_SUM
    226: #endif
    227:       common /petscfortran14/ PETSC_PI
    228:       common /petscfortran15/ PETSC_MAX_REAL
    229:       common /petscfortran16/ PETSC_MIN_REAL
    230:       common /petscfortran17/ PETSC_MACHINE_EPSILON
    231:       common /petscfortran18/ PETSC_SQRT_MACHINE_EPSILON
    232:       common /petscfortran19/ PETSC_SMALL
    233:       common /petscfortran20/ PETSC_INFINITY
    234:       common /petscfortran21/ PETSC_NINFINITY

    236: !
    237: !     Possible arguments to PetscPushErrorHandler()
    238: !
    239:       external PETSCTRACEBACKERRORHANDLER
    240:       external PETSCABORTERRORHANDLER
    241:       external PETSCEMACSCLIENTERRORHANDLER
    242:       external PETSCATTACHDEBUGGERERRORHANDLER
    243:       external PETSCIGNOREERRORHANDLER
    244: !
    245:       external  PetscIsInfOrNanScalar
    246:       external  PetscIsInfOrNanReal
    247:       PetscBool PetscIsInfOrNanScalar
    248:       PetscBool PetscIsInfOrNanReal

    251: !    END COMMON-BLOCK VARIABLES
    252: ! ----------------------------------------------------------------------------
    253: !
    254: !
    255: !     Random numbers
    256: !
    257: #define PETSCRAND 'rand'
    258: #define PETSCRAND48 'rand48'
    259: #define PETSCSPRNG 'sprng'
    260: #define PETSCRANDER48 'rander48'
    261: !
    262: !
    263: !
    264:       PetscEnum PETSC_BINARY_INT_SIZE
    265:       PetscEnum PETSC_BINARY_FLOAT_SIZE
    266:       PetscEnum PETSC_BINARY_CHAR_SIZE
    267:       PetscEnum PETSC_BINARY_SHORT_SIZE
    268:       PetscEnum PETSC_BINARY_DOUBLE_SIZE
    269:       PetscEnum PETSC_BINARY_SCALAR_SIZE

    271:       parameter (PETSC_BINARY_INT_SIZE = 4)
    272:       parameter (PETSC_BINARY_FLOAT_SIZE = 4)
    273:       parameter (PETSC_BINARY_CHAR_SIZE = 1)
    274:       parameter (PETSC_BINARY_SHORT_SIZE = 2)
    275:       parameter (PETSC_BINARY_DOUBLE_SIZE = 8)
    276: #if defined(PETSC_USE_COMPLEX)
    277:       parameter (PETSC_BINARY_SCALAR_SIZE = 16)
    278: #else
    279:       parameter (PETSC_BINARY_SCALAR_SIZE = 8)
    280: #endif

    282:       PetscEnum PETSC_BINARY_SEEK_SET
    283:       PetscEnum PETSC_BINARY_SEEK_CUR
    284:       PetscEnum PETSC_BINARY_SEEK_END

    286:       parameter (PETSC_BINARY_SEEK_SET = 0,PETSC_BINARY_SEEK_CUR = 1)
    287:       parameter (PETSC_BINARY_SEEK_END = 2)

    289:       PetscEnum PETSC_BUILDTWOSIDED_ALLREDUCE
    290:       PetscEnum PETSC_BUILDTWOSIDED_IBARRIER
    291:       PetscEnum PETSC_BUILDTWOSIDED_REDSCATTER
    292:       parameter (PETSC_BUILDTWOSIDED_ALLREDUCE = 0)
    293:       parameter (PETSC_BUILDTWOSIDED_IBARRIER = 1)
    294:       parameter (PETSC_BUILDTWOSIDED_REDSCATTER = 2)
    295: !