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: !