Actual source code: petscsys.h
petsc-3.14.1 2020-11-03
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/petscsys.h"
9: !
10: ! The following block allows one to write constants that match the
11: ! precision of PetscReal as, for example, x = .7_PETSC_REAL_KIND
12: !
13: PetscReal,Parameter :: PetscReal_Private = 1.0
14: Integer,Parameter :: PETSC_REAL_KIND = Selected_Real_Kind(Precision(PetscReal_Private))
17: #if !defined(PETSC_AVOID_MPIF_H)
18: #if defined(PETSC_HAVE_MPIUNI)
19: #include "petsc/mpiuni/mpif.h"
20: #else
21: !
22: ! This code is extremely fragile; it assumes the format of the mpif.h file has
23: ! a particular structure that does not change with MPI implementation versions. But since
24: ! mpif.h is a bit of a deadwater and PETSC_PROMOTE_FORTRAN_INTEGER is
25: ! rarely used it is maybe ok to include fragile code
26: !
27: #if defined(PETSC_HAVE_MPICH_NUMVERSION) && defined(PETSC_PROMOTE_FORTRAN_INTEGER)
28: #define INTEGER integer4
29: #define MPI_STATUS_IGNORE(A) mpi_status_ignore(5)
30: #define MPI_STATUSES_IGNORE(B,C) mpi_statuses_ignore(5,1)
31: #elif defined(PETSC_HAVE_OMPI_MAJOR_VERSION) && defined(PETSC_PROMOTE_FORTRAN_INTEGER)
32: #define integer integer4
33: #define INTEGER integer4
34: #endif
35: #include "mpif.h"
36: #if defined(PETSC_HAVE_MPICH_NUMVERSION) && defined(PETSC_PROMOTE_FORTRAN_INTEGER)
37: #undef INTEGER
38: #undef MPI_STATUS_IGNORE
39: #undef MPI_STATUSES_IGNORE
40: #elif defined(PETSC_HAVE_OMPI_MAJOR_VERSION) && defined(PETSC_PROMOTE_FORTRAN_INTEGER)
41: #undef integer
42: #undef INTEGER
43: #endif
44: #endif
45: #endif
47: type tPetscOptions
48: PetscFortranAddr:: v PETSC_FORTRAN_TYPE_INITIALIZE
49: end type tPetscOptions
51: PetscOptions, parameter :: PETSC_NULL_OPTIONS = tPetscOptions(0)
53: ! ------------------------------------------------------------------------
54: ! Non Common block Stuff declared first
55: !
56: ! Flags
57: !
58: PetscBool, parameter :: PETSC_TRUE = .true.
59: PetscBool, parameter :: PETSC_FALSE = .false.
61: PetscInt, parameter :: PETSC_DECIDE = -1
62: PetscInt, parameter :: PETSC_DETERMINE = -1
63: PetscInt, parameter :: PETSC_DEFAULT_INTEGER = -2
65: PetscReal, parameter :: PETSC_DEFAULT_REAL = -2.0d0
67: PetscEnum, parameter :: PETSC_FP_TRAP_OFF = 0
68: PetscEnum, parameter :: PETSC_FP_TRAP_ON = 1
70: PetscFortranAddr, parameter :: PETSC_STDOUT = 0
71: !
72: ! PETSc DataTypes
73: !
74: #if defined(PETSC_USE_REAL_SINGLE)
75: #define PETSC_REAL PETSC_FLOAT
76: #elif defined(PETSC_USE_REAL___FLOAT128)
77: #define PETSC_REAL PETSC___FLOAT128
78: #else
79: #define PETSC_REAL PETSC_DOUBLE
80: #endif
81: #define PETSC_FORTRANADDR PETSC_LONG
83: PetscEnum, parameter :: PETSC_DATATYPE_UNKNOWN = 0
84: PetscEnum, parameter :: PETSC_DOUBLE = 1
85: PetscEnum, parameter :: PETSC_COMPLEX = 2
86: PetscEnum, parameter :: PETSC_LONG = 3
87: PetscEnum, parameter :: PETSC_SHORT = 4
88: PetscEnum, parameter :: PETSC_FLOAT = 5
89: PetscEnum, parameter :: PETSC_CHAR = 6
90: PetscEnum, parameter :: PETSC_BIT_LOGICAL = 7
91: PetscEnum, parameter :: PETSC_ENUM = 8
92: PetscEnum, parameter :: PETSC_BOOL = 9
93: PetscEnum, parameter :: PETSC___FLOAT128 = 10
94: PetscEnum, parameter :: PETSC_OBJECT = 11
95: PetscEnum, parameter :: PETSC_FUNCTION = 12
96: PetscEnum, parameter :: PETSC_STRING = 13
97: PetscEnum, parameter :: PETSC___FP16 = 14
98: PetscEnum, parameter :: PETSC_STRUCT = 15
99: PetscEnum, parameter :: PETSC_INT = 16
100: !
101: !
102: !
103: PetscEnum, parameter :: PETSC_COPY_VALUES = 0
104: PetscEnum, parameter :: PETSC_OWN_POINTER = 1
105: PetscEnum, parameter :: PETSC_USE_POINTER = 2
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: #if defined(PETSC_USE_REAL_SINGLE)
115: PetscFortranComplex, parameter :: PETSC_i = (0.0e0,1.0e0)
116: #else
117: PetscFortranComplex, parameter :: PETSC_i = (0.0d0,1.0d0)
118: #endif
119: !
120: ! ----------------------------------------------------------------------------
121: ! BEGIN PETSc aliases for MPI_ constants
122: !
123: ! These values for __float128 are handled in the common block (below)
124: ! and transmitted from the C code
125: !
126: #if !defined(PETSC_USE_REAL___FLOAT128)
127: #if defined (PETSC_USE_REAL_SINGLE)
128: integer4, parameter :: MPIU_REAL = MPI_REAL
129: #else
130: integer4, parameter :: MPIU_REAL = MPI_DOUBLE_PRECISION
131: #endif
133: integer4, parameter :: MPIU_SUM = MPI_SUM
135: #if defined(PETSC_USE_COMPLEX)
136: #if defined (PETSC_USE_REAL_SINGLE)
137: integer4, parameter :: MPIU_SCALAR = MPI_COMPLEX
138: #else
139: integer4, parameter :: MPIU_SCALAR = MPI_DOUBLE_COMPLEX
140: #endif
141: #else
142: #if defined (PETSC_USE_REAL_SINGLE)
143: parameter (MPIU_SCALAR = MPI_REAL)
144: #else
145: parameter(MPIU_SCALAR = MPI_DOUBLE_PRECISION)
146: #endif
147: #endif
148: #endif
150: #if defined(PETSC_USE_64BIT_INDICES)
151: integer4, parameter :: MPIU_INTEGER = MPI_INTEGER8
152: #else
153: integer4, parameter :: MPIU_INTEGER = MPI_INTEGER
154: #endif
156: ! A PETSC_NULL_FUNCTION pointer
157: !
158: external PETSC_NULL_FUNCTION
159: !
160: ! Possible arguments to PetscPushErrorHandler()
161: !
162: external PETSCTRACEBACKERRORHANDLER
163: external PETSCABORTERRORHANDLER
164: external PETSCEMACSCLIENTERRORHANDLER
165: external PETSCATTACHDEBUGGERERRORHANDLER
166: external PETSCIGNOREERRORHANDLER
167: !
168: external PetscIsInfOrNanScalar
169: external PetscIsInfOrNanReal
170: PetscBool PetscIsInfOrNanScalar
171: PetscBool PetscIsInfOrNanReal
174: ! ----------------------------------------------------------------------------
175: !
176: ! Random numbers
177: !
178: type tPetscRandom
179: sequence
180: PetscFortranAddr:: v PETSC_FORTRAN_TYPE_INITIALIZE
181: end type tPetscRandom
183: PetscRandom, parameter :: PETSC_NULL_RANDOM = tPetscRandom(0)
184: !
185: #define PETSCRAND 'rand'
186: #define PETSCRAND48 'rand48'
187: #define PETSCSPRNG 'sprng'
188: #define PETSCRANDER48 'rander48'
189: !
190: !
191: !
192: PetscEnum, parameter :: PETSC_BINARY_INT_SIZE = 4
193: PetscEnum, parameter :: PETSC_BINARY_FLOAT_SIZE = 4
194: PetscEnum, parameter :: PETSC_BINARY_CHAR_SIZE = 1
195: PetscEnum, parameter :: PETSC_BINARY_SHORT_SIZE = 2
196: PetscEnum, parameter :: PETSC_BINARY_DOUBLE_SIZE = 8
197: #if defined(PETSC_USE_COMPLEX)
198: PetscEnum, parameter :: PETSC_BINARY_SCALAR_SIZE = 16
199: #else
200: PetscEnum, parameter :: PETSC_BINARY_SCALAR_SIZE = 8
201: #endif
203: PetscEnum, parameter :: PETSC_BINARY_SEEK_SET = 0
204: PetscEnum, parameter :: PETSC_BINARY_SEEK_CUR = 1
205: PetscEnum, parameter :: PETSC_BINARY_SEEK_END = 2
207: PetscEnum, parameter :: PETSC_BUILDTWOSIDED_ALLREDUCE = 0
208: PetscEnum, parameter :: PETSC_BUILDTWOSIDED_IBARRIER = 1
209: PetscEnum, parameter :: PETSC_BUILDTWOSIDED_REDSCATTER = 2
211: type tPetscSubcomm
212: sequence
213: PetscFortranAddr:: v PETSC_FORTRAN_TYPE_INITIALIZE
214: end type tPetscSubcomm
216: PetscSubcomm, parameter :: PETSC_NULL_SUBCOMM = tPetscSubcomm(0)
218: !
219: ! PetscSubcommType
220: !
221: PetscEnum, parameter :: PETSC_SUBCOMM_GENERAL = 0
222: PetscEnum, parameter :: PETSC_SUBCOMM_CONTIGUOUS = 1
223: PetscEnum, parameter :: PETSC_SUBCOMM_INTERLACED = 2
225: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
226: !DEC$ ATTRIBUTES DLLEXPORT::PetscReal_Private
227: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_REAL_KIND
228: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_OPTIONS
229: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_TRUE
230: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_FALSE
231: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE
232: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE
233: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_INTEGER
234: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_REAL
235: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_FP_TRAP_OFF
236: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_FP_TRAP_ON
237: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_STDOUT
238: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_INT
239: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DOUBLE
240: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMPLEX
241: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_LONG
242: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_SHORT
243: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_FLOAT
244: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_CHAR
245: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BIT_LOGICAL
246: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_ENUM
247: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BOOL
248: !DEC$ ATTRIBUTES DLLEXPORT::PETSC___FLOAT128
249: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_OBJECT
250: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_FUNCTION
251: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_STRING
252: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_STRUC
253: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DATATYPE_UNKNOWN
254: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_COPY_VALUES
255: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_OWN_POINTER
256: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_USE_POINTER
257: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_i
258: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_REAL
259: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_SUM
260: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_SCALAR
261: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_INTEGER
262: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_RANDOM
263: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BINARY_INT_SIZE
264: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BINARY_FLOAT_SIZE
265: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BINARY_CHAR_SIZE
266: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BINARY_SHORT_SIZE
267: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BINARY_DOUBLE_SIZE
268: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BINARY_SCALAR_SIZE
269: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BINARY_SEEK_SET
270: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BINARY_SEEK_CUR
271: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BINARY_SEEK_END
272: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BUILDTWOSIDED_ALLREDUCE
273: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BUILDTWOSIDED_IBARRIER
274: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_BUILDTWOSIDED_REDSCATTER
275: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_SUBCOMM_GENERAL
276: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_SUBCOMM_CONTIGUOUS
277: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_SUBCOMM_INTERLACED
278: #endif
280: ! ----------------------------------------------------------------------------
281: !
282: ! PetscInfoCommFlag Enum
283: !
284: !
285: ! PetscInfoCommFlag
286: !
287: PetscEnum PETSC_INFO_COMM_ALL
288: PetscEnum PETSC_INFO_COMM_NO_SELF
289: PetscEnum PETSC_INFO_COMM_ONLY_SELF
290: parameter(PETSC_INFO_COMM_ALL=-1)
291: parameter(PETSC_INFO_COMM_NO_SELF=0)
292: parameter(PETSC_INFO_COMM_ONLY_SELF=1)