Actual source code: petscsys.h

petsc-3.14.6 2021-03-30
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/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)