Actual source code: petscsys.h

  1: !
  2: !
  3: !  Base include file for Fortran use of the PETSc package.
  4: !
  5: #include "petscconf.h"
 6:  #include petscversion.h
 7:  #include 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:       PetscTruth PETSC_TRUE
 19:       PetscTruth PETSC_FALSE
 20:       PetscTruth PETSC_YES
 21:       PetscTruth PETSC_NO
 22: #if defined(PETSC_FORTRAN_PETSCTRUTH_INT)
 23:       parameter (PETSC_TRUE = 1,PETSC_FALSE = 0)
 24:       parameter (PETSC_YES= 1, PETSC_NO = 0)
 25: #else
 26:       parameter (PETSC_TRUE = .true.,PETSC_FALSE = .false.)
 27:       parameter (PETSC_YES=.true., PETSC_NO=.false.)
 28: #endif
 29:       PetscInt   PETSC_DECIDE,PETSC_DETERMINE
 30:       parameter (PETSC_DECIDE=-1,PETSC_DETERMINE=-1)

 32:       PetscInt  PETSC_DEFAULT_INTEGER
 33:       parameter (PETSC_DEFAULT_INTEGER = -2)

 35:       PetscFortranDouble PETSC_DEFAULT_DOUBLE_PRECISION
 36:       parameter (PETSC_DEFAULT_DOUBLE_PRECISION=-2.0d0)

 38:       PetscEnum PETSC_FP_TRAP_OFF
 39:       PetscEnum PETSC_FP_TRAP_ON
 40:       parameter (PETSC_FP_TRAP_OFF = 0,PETSC_FP_TRAP_ON = 1)



 44: !
 45: !     Default PetscViewers.
 46: !
 47:       PetscFortranAddr PETSC_VIEWER_DRAW_WORLD
 48:       PetscFortranAddr PETSC_VIEWER_DRAW_SELF
 49:       PetscFortranAddr PETSC_VIEWER_SOCKET_WORLD
 50:       PetscFortranAddr PETSC_VIEWER_SOCKET_SELF
 51:       PetscFortranAddr PETSC_VIEWER_STDOUT_WORLD
 52:       PetscFortranAddr PETSC_VIEWER_STDOUT_SELF
 53:       PetscFortranAddr PETSC_VIEWER_STDERR_WORLD
 54:       PetscFortranAddr PETSC_VIEWER_STDERR_SELF
 55:       PetscFortranAddr PETSC_VIEWER_BINARY_WORLD
 56:       PetscFortranAddr PETSC_VIEWER_BINARY_SELF
 57:       PetscFortranAddr PETSC_VIEWER_MATLAB_WORLD
 58:       PetscFortranAddr PETSC_VIEWER_MATLAB_SELF

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

 91: #if defined(PETSC_USE_SCALAR_SINGLE)
 92: #define PETSC_REAL PETSC_FLOAT
 93: #elif defined(PETSC_USE_SCALAR_LONG_DOUBLE)
 94: #define PETSC_REAL PETSC_LONG_DOUBLE
 95: #elif defined(PETSC_USE_SCALAR_INT)
 96: #define PETSC_REAL PETSC_INT
 97: #else
 98: #define PETSC_REAL PETSC_DOUBLE
 99: #endif
100: #define PETSC_FORTRANADDR PETSC_LONG

102:       parameter (PETSC_INT=0,PETSC_DOUBLE=1,PETSC_COMPLEX=2)
103:       parameter (PETSC_LONG=3,PETSC_SHORT=4,PETSC_FLOAT=5)
104:       parameter (PETSC_CHAR=6,PETSC_LOGICAL=7,PETSC_ENUM=8)
105:       parameter (PETSC_TRUTH=9,PETSC_LONG_DOUBLE=10)
106: !
107: ! ------------------------------------------------------------------------
108: !     PETSc mathematics include file. Defines certain basic mathematical
109: !    constants and functions for working with single and double precision
110: !    floating point numbers as well as complex and integers.
111: !
112: !     Representation of complex i
113: !
114:       PetscFortranComplex PETSC_i
115:       parameter (PETSC_i = (0.0d0,1.0d0))
116: !
117: !     Basic constants
118: !
119:       PetscFortranDouble PETSC_PI
120:       PetscFortranDouble PETSC_DEGREES_TO_RADIANS
121:       PetscFortranDouble PETSC_MAX
122:       PetscFortranDouble PETSC_MIN

124:       parameter (PETSC_PI = 3.14159265358979323846264d0)
125:       parameter (PETSC_DEGREES_TO_RADIANS = 0.01745329251994d0)
126:       parameter (PETSC_MAX = 1.d300,PETSC_MIN = -1.d300)

128:       PetscFortranDouble PETSC_MACHINE_EPSILON
129:       PetscFortranDouble PETSC_SQRT_MACHINE_EPSILON
130:       PetscFortranDouble PETSC_SMALL

132: #if defined(PETSC_USE_SCALAR_SINGLE)
133:       parameter (PETSC_MACHINE_EPSILON = 1.e-7)
134:       parameter (PETSC_SQRT_MACHINE_EPSILON = 3.e-4)
135:       parameter (PETSC_SMALL = 1.e-5)
136: #else
137:       parameter (PETSC_MACHINE_EPSILON = 1.d-14)
138:       parameter (PETSC_SQRT_MACHINE_EPSILON = 1.d-7)
139:       parameter (PETSC_SMALL = 1.d-10)
140: #endif
141: !
142: ! ----------------------------------------------------------------------------
143: !    BEGIN PETSc aliases for MPI_ constants
144: !
145:       integer MPIU_SCALAR
146: #if defined(PETSC_USE_COMPLEX)
147: #if defined (PETSC_USE_SCALAR_SINGLE)
148:       parameter(MPIU_SCALAR = MPI_COMPLEX)
149: #else
150:       parameter(MPIU_SCALAR = MPI_DOUBLE_COMPLEX)
151: #endif
152: #else
153: #if defined (PETSC_USE_SCALAR_SINGLE)
154:       parameter (MPIU_SCALAR = MPI_REAL)
155: #elif defined(PETSC_USE_SCALAR_LONG_DOUBLE)
156:       parameter(MPIU_SCALAR = MPI_2DOUBLE_PRECISION)
157: #else
158:       parameter(MPIU_SCALAR = MPI_DOUBLE_PRECISION)
159: #endif
160: #endif

162:       integer MPIU_INTEGER
163: #if defined(PETSC_USE_64BIT_INDICES)
164:       parameter(MPIU_INTEGER = MPI_INTEGER8)
165: #else
166:       parameter(MPIU_INTEGER = MPI_INTEGER)
167: #endif

169: !
170: ! ----------------------------------------------------------------------------
171: !    BEGIN COMMON-BLOCK VARIABLES
172: !
173: !
174: !     PETSc world communicator
175: !
176:       MPI_Comm PETSC_COMM_WORLD
177:       MPI_Comm PETSC_COMM_SELF
178: !
179: !     Fortran Null
180: !
181:       PetscChar(80)       PETSC_NULL_CHARACTER
182:       PetscInt            PETSC_NULL_INTEGER
183:       PetscFortranDouble  PETSC_NULL_DOUBLE
184:       PetscInt            PETSC_NULL
185:       PetscObject         PETSC_NULL_OBJECT
186: !
187: !      A PETSC_NULL_FUNCTION pointer
188: !
189:       external PETSC_NULL_FUNCTION
190:       PetscScalar   PETSC_NULL_SCALAR
191:       PetscReal     PETSC_NULL_REAL
192:       PetscTruth    PETSC_NULL_TRUTH
193: !
194: !     Common Block to store some of the PETSc constants.
195: !     which can be set - only at runtime.
196: !
197: !
198: !     A string should be in a different common block
199: !
200:       common /petscfortran1/ PETSC_NULL_CHARACTER
201:       common /petscfortran2/ PETSC_NULL_INTEGER
202:       common /petscfortran3/ PETSC_NULL
203:       common /petscfortran4/ PETSC_NULL_SCALAR
204:       common /petscfortran5/ PETSC_NULL_DOUBLE
205:       common /petscfortran6/ PETSC_NULL_REAL
206:       common /petscfortran7/ PETSC_NULL_TRUTH
207:       common /petscfortran8/ PETSC_NULL_OBJECT
208:       common /petscfortran9/ PETSC_COMM_WORLD
209:       common /petscfortran10/ PETSC_COMM_SELF
210: !
211: !     Possible arguments to PetscPushErrorHandler()
212: !
213:       external PETSCTRACEBACKERRORHANDLER
214:       external PETSCABORTERRORHANDLER
215:       external PETSCEMACSCLIENTERRORHANDLER
216:       external PETSCATTACHDEBUGGERERRORHANDLER
217:       external PETSCIGNOREERRORHANDLER
218: !
219:       external PetscIsInfOrNanScalar
220:       external PetscIsInfOrNanReal
221:       PetscTruth PetscIsInfOrNanScalar
222:       PetscTruth PetscIsInfOrNanReal

224: 
225: !    END COMMON-BLOCK VARIABLES
226: ! ----------------------------------------------------------------------------
227: !
228: !
229: !     Random numbers
230: !
231: #define PETSCRAND 'rand'
232: #define PETSCRAND48 'rand48'
233: #define PETSCSPRNG 'sprng'          
234: !
235: !
236: !
237:       PetscEnum PETSC_BINARY_INT_SIZE
238:       PetscEnum PETSC_BINARY_FLOAT_SIZE
239:       PetscEnum PETSC_BINARY_CHAR_SIZE
240:       PetscEnum PETSC_BINARY_SHORT_SIZE
241:       PetscEnum PETSC_BINARY_DOUBLE_SIZE
242:       PetscEnum PETSC_BINARY_SCALAR_SIZE

244:       parameter (PETSC_BINARY_INT_SIZE = 4)
245:       parameter (PETSC_BINARY_FLOAT_SIZE = 4)
246:       parameter (PETSC_BINARY_CHAR_SIZE = 1)
247:       parameter (PETSC_BINARY_SHORT_SIZE = 2)
248:       parameter (PETSC_BINARY_DOUBLE_SIZE = 8)
249: #if defined(PETSC_USE_COMPLEX)
250:       parameter (PETSC_BINARY_SCALAR_SIZE = 16)
251: #else
252:       parameter (PETSC_BINARY_SCALAR_SIZE = 8)
253: #endif

255:       PetscEnum PETSC_BINARY_SEEK_SET
256:       PetscEnum PETSC_BINARY_SEEK_CUR
257:       PetscEnum PETSC_BINARY_SEEK_END

259:       parameter (PETSC_BINARY_SEEK_SET = 0,PETSC_BINARY_SEEK_CUR = 1)
260:       parameter (PETSC_BINARY_SEEK_END = 2)

262: !