Actual source code: petscsysmod.F90
1: module petscmpi
2: use, intrinsic :: ISO_C_binding
3: #include <petscconf.h>
4: #include "petsc/finclude/petscsys.h"
5: #if defined(PETSC_HAVE_MPIUNI)
6: use mpiuni
7: #else
8: #if defined(PETSC_HAVE_MPI_F90MODULE)
9: use mpi
10: #else
11: #include "mpif.h"
12: #endif
13: #endif
15: public:: MPIU_REAL, MPIU_SUM, MPIU_SCALAR, MPIU_INTEGER
16: public:: PETSC_COMM_WORLD, PETSC_COMM_SELF
18: integer4 :: MPIU_REAL
19: integer4 :: MPIU_SUM
20: integer4 :: MPIU_SCALAR
21: integer4 :: MPIU_INTEGER
23: MPI_Comm::PETSC_COMM_WORLD = 0
24: MPI_Comm::PETSC_COMM_SELF = 0
26: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
27: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_REAL
28: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_SUM
29: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_SCALAR
30: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_INTEGER
31: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMM_SELF
32: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMM_WORLD
33: #endif
34: end module petscmpi
36: ! ------------------------------------------------------------------------
37: module petscsysdef
38: use, intrinsic :: ISO_C_binding
39: #if defined(PETSC_HAVE_MPI_F90MODULE_VISIBILITY)
40: use petscmpi
41: #else
42: use petscmpi, only: MPIU_REAL, MPIU_SUM, MPIU_SCALAR, MPIU_INTEGER, PETSC_COMM_WORLD, PETSC_COMM_SELF
43: #endif
44: PetscReal, parameter :: PetscReal_Private = 1.0
45: Integer, parameter :: PETSC_REAL_KIND = kind(PetscReal_Private)
47: PetscBool, parameter :: PETSC_TRUE = .true._C_BOOL
48: PetscBool, parameter :: PETSC_FALSE = .false._C_BOOL
50: PetscInt, parameter :: PETSC_DECIDE = -1
51: PetscInt, parameter :: PETSC_DECIDE_INTEGER = -1
52: PetscReal, parameter :: PETSC_DECIDE_REAL = -1.0_PETSC_REAL_KIND
53: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
54: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE
55: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE_INTEGER
56: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE_REAL
57: #endif
59: PetscInt, parameter :: PETSC_DETERMINE = -1
60: PetscInt, parameter :: PETSC_DETERMINE_INTEGER = -1
61: PetscReal, parameter :: PETSC_DETERMINE_REAL = -1.0_PETSC_REAL_KIND
62: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
63: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE
64: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE_INTEGER
65: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE_REAL
66: #endif
68: PetscInt, parameter :: PETSC_CURRENT = -2
69: PetscInt, parameter :: PETSC_CURRENT_INTEGER = -2
70: PetscReal, parameter :: PETSC_CURRENT_REAL = -2.0_PETSC_REAL_KIND
71: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
72: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT
73: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT_INTEGER
74: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT_REAL
75: #endif
77: PetscInt, parameter :: PETSC_DEFAULT = -2
78: PetscInt, parameter :: PETSC_DEFAULT_INTEGER = -2
79: PetscReal, parameter :: PETSC_DEFAULT_REAL = -2.0_PETSC_REAL_KIND
80: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
81: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT
82: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_INTEGER
83: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_REAL
84: #endif
86: PetscFortranAddr, parameter :: PETSC_STDOUT = 0
87: !
88: ! PETSc DataTypes
89: !
90: #if defined(PETSC_USE_REAL_SINGLE)
91: #define PETSC_REAL PETSC_FLOAT
92: #elif defined(PETSC_USE_REAL___FLOAT128)
93: #define PETSC_REAL PETSC___FLOAT128
94: #else
95: #define PETSC_REAL PETSC_DOUBLE
96: #endif
97: #define PETSC_FORTRANADDR PETSC_LONG
99: ! PETSc mathematics include file. Defines certain basic mathematical
100: ! constants and functions for working with single and double precision
101: ! floating point numbers as well as complex and integers.
102: !
103: ! Representation of complex i
104: PetscComplex, parameter :: PETSC_i = (0.0_PETSC_REAL_KIND, 1.0_PETSC_REAL_KIND)
106: ! A PETSC_NULL_FUNCTION pointer
107: !
108: external PETSC_NULL_FUNCTION
109: !
110: ! Possible arguments to PetscPushErrorHandler()
111: !
112: external PETSCTRACEBACKERRORHANDLER
113: external PETSCABORTERRORHANDLER
114: external PETSCEMACSCLIENTERRORHANDLER
115: external PETSCATTACHDEBUGGERERRORHANDLER
116: external PETSCIGNOREERRORHANDLER
117: !
118: external PetscIsInfOrNanScalar
119: external PetscIsInfOrNanReal
120: PetscBool PetscIsInfOrNanScalar
121: PetscBool PetscIsInfOrNanReal
123: #include <../ftn/sys/petscall.h>
125: PetscViewer, parameter :: PETSC_VIEWER_STDOUT_SELF = tPetscViewer(9)
126: PetscViewer, parameter :: PETSC_VIEWER_DRAW_WORLD = tPetscViewer(4)
127: PetscViewer, parameter :: PETSC_VIEWER_DRAW_SELF = tPetscViewer(5)
128: PetscViewer, parameter :: PETSC_VIEWER_SOCKET_WORLD = tPetscViewer(6)
129: PetscViewer, parameter :: PETSC_VIEWER_SOCKET_SELF = tPetscViewer(7)
130: PetscViewer, parameter :: PETSC_VIEWER_STDOUT_WORLD = tPetscViewer(8)
131: PetscViewer, parameter :: PETSC_VIEWER_STDERR_WORLD = tPetscViewer(10)
132: PetscViewer, parameter :: PETSC_VIEWER_STDERR_SELF = tPetscViewer(11)
133: PetscViewer, parameter :: PETSC_VIEWER_BINARY_WORLD = tPetscViewer(12)
134: PetscViewer, parameter :: PETSC_VIEWER_BINARY_SELF = tPetscViewer(13)
135: PetscViewer, parameter :: PETSC_VIEWER_MATLAB_WORLD = tPetscViewer(14)
136: PetscViewer, parameter :: PETSC_VIEWER_MATLAB_SELF = tPetscViewer(15)
138: PetscViewer PETSC_VIEWER_STDOUT_
139: PetscViewer PETSC_VIEWER_DRAW_
140: external PETSC_VIEWER_STDOUT_
141: external PETSC_VIEWER_DRAW_
142: external PetscViewerAndFormatDestroy
144: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
145: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDOUT_SELF
146: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_DRAW_WORLD
147: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_DRAW_SELF
148: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_SOCKET_WORLD
149: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_SOCKET_SELF
150: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDOUT_WORLD
151: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDERR_WORLD
152: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDERR_SELF
153: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_BINARY_WORLD
154: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_BINARY_SELF
155: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_MATLAB_WORLD
156: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_MATLAB_SELF
157: #endif
159: PetscErrorCode, parameter :: PETSC_ERR_MEM = 55
160: PetscErrorCode, parameter :: PETSC_ERR_SUP = 56
161: PetscErrorCode, parameter :: PETSC_ERR_SUP_SYS = 57
162: PetscErrorCode, parameter :: PETSC_ERR_ORDER = 58
163: PetscErrorCode, parameter :: PETSC_ERR_SIG = 59
164: PetscErrorCode, parameter :: PETSC_ERR_FP = 72
165: PetscErrorCode, parameter :: PETSC_ERR_COR = 74
166: PetscErrorCode, parameter :: PETSC_ERR_LIB = 76
167: PetscErrorCode, parameter :: PETSC_ERR_PLIB = 77
168: PetscErrorCode, parameter :: PETSC_ERR_MEMC = 78
169: PetscErrorCode, parameter :: PETSC_ERR_CONV_FAILED = 82
170: PetscErrorCode, parameter :: PETSC_ERR_USER = 83
171: PetscErrorCode, parameter :: PETSC_ERR_SYS = 88
172: PetscErrorCode, parameter :: PETSC_ERR_POINTER = 70
173: PetscErrorCode, parameter :: PETSC_ERR_MPI_LIB_INCOMP = 87
175: PetscErrorCode, parameter :: PETSC_ERR_ARG_SIZ = 60
176: PetscErrorCode, parameter :: PETSC_ERR_ARG_IDN = 61
177: PetscErrorCode, parameter :: PETSC_ERR_ARG_WRONG = 62
178: PetscErrorCode, parameter :: PETSC_ERR_ARG_CORRUPT = 64
179: PetscErrorCode, parameter :: PETSC_ERR_ARG_OUTOFRANGE = 63
180: PetscErrorCode, parameter :: PETSC_ERR_ARG_BADPTR = 68
181: PetscErrorCode, parameter :: PETSC_ERR_ARG_NOTSAMETYPE = 69
182: PetscErrorCode, parameter :: PETSC_ERR_ARG_NOTSAMECOMM = 80
183: PetscErrorCode, parameter :: PETSC_ERR_ARG_WRONGSTATE = 73
184: PetscErrorCode, parameter :: PETSC_ERR_ARG_TYPENOTSET = 89
185: PetscErrorCode, parameter :: PETSC_ERR_ARG_INCOMP = 75
186: PetscErrorCode, parameter :: PETSC_ERR_ARG_NULL = 85
187: PetscErrorCode, parameter :: PETSC_ERR_ARG_UNKNOWN_TYPE = 86
189: PetscErrorCode, parameter :: PETSC_ERR_FILE_OPEN = 65
190: PetscErrorCode, parameter :: PETSC_ERR_FILE_READ = 66
191: PetscErrorCode, parameter :: PETSC_ERR_FILE_WRITE = 67
192: PetscErrorCode, parameter :: PETSC_ERR_FILE_UNEXPECTED = 79
194: PetscErrorCode, parameter :: PETSC_ERR_MAT_LU_ZRPVT = 71
195: PetscErrorCode, parameter :: PETSC_ERR_MAT_CH_ZRPVT = 81
197: PetscErrorCode, parameter :: PETSC_ERR_INT_OVERFLOW = 84
199: PetscErrorCode, parameter :: PETSC_ERR_FLOP_COUNT = 90
200: PetscErrorCode, parameter :: PETSC_ERR_NOT_CONVERGED = 91
201: PetscErrorCode, parameter :: PETSC_ERR_MISSING_FACTOR = 92
202: PetscErrorCode, parameter :: PETSC_ERR_OPT_OVERWRITE = 93
203: PetscErrorCode, parameter :: PETSC_ERR_WRONG_MPI_SIZE = 94
204: PetscErrorCode, parameter :: PETSC_ERR_USER_INPUT = 95
205: PetscErrorCode, parameter :: PETSC_ERR_GPU_RESOURCE = 96
206: PetscErrorCode, parameter :: PETSC_ERR_GPU = 97
207: PetscErrorCode, parameter :: PETSC_ERR_MPI = 98
208: PetscErrorCode, parameter :: PETSC_ERR_RETURN = 99
210: character(len=80) :: PETSC_NULL_CHARACTER = ''
211: PetscInt PETSC_NULL_INTEGER, PETSC_NULL_INTEGER_ARRAY(1)
212: PetscInt, pointer :: PETSC_NULL_INTEGER_POINTER(:)
213: PetscScalar, pointer :: PETSC_NULL_SCALAR_POINTER(:)
214: PetscFortranDouble PETSC_NULL_DOUBLE
215: PetscScalar PETSC_NULL_SCALAR, PETSC_NULL_SCALAR_ARRAY(1)
216: PetscReal PETSC_NULL_REAL, PETSC_NULL_REAL_ARRAY(1)
217: PetscReal, pointer :: PETSC_NULL_REAL_POINTER(:)
218: PetscBool PETSC_NULL_BOOL
219: PetscEnum PETSC_NULL_ENUM
220: MPI_Comm PETSC_NULL_MPI_COMM
221: !
222: ! Basic math constants
223: !
224: PetscReal PETSC_PI
225: PetscReal PETSC_MAX_REAL
226: PetscReal PETSC_MIN_REAL
227: PetscReal PETSC_MACHINE_EPSILON
228: PetscReal PETSC_SQRT_MACHINE_EPSILON
229: PetscReal PETSC_SMALL
230: PetscReal PETSC_INFINITY
231: PetscReal PETSC_NINFINITY
233: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
234: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_CHARACTER
235: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER
236: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER_ARRAY
237: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER_POINTER
238: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR_POINTER
239: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL_POINTER
240: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_DOUBLE
241: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR
242: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR_ARRAY
243: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL
244: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL_ARRAY
245: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_BOOL
246: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_ENUM
247: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_MPI_COMM
248: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_PI
249: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_MAX_REAL
250: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_MIN_REAL
251: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_MACHINE_EPSILON
252: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_SQRT_MACHINE_EPSILON
253: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_SMALL
254: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_INFINITY
255: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NINFINITY
256: #endif
258: type tPetscReal2d
259: sequence
260: PetscReal, dimension(:), pointer :: ptr
261: end type tPetscReal2D
263: end module petscsysdef
265: ! ------------------------------------------------------------------------
267: module petscsys
268: use, intrinsic :: ISO_C_binding
269: use petscsysdef
271: #include <../src/sys/ftn-mod/petscsys.h90>
272: #include <../src/sys/ftn-mod/petscviewer.h90>
273: #include <../ftn/sys/petscall.h90>
275: interface PetscInitialize
276: module procedure PetscInitializeWithHelp, PetscInitializeNoHelp, PetscInitializeNoArguments
277: end interface PetscInitialize
279: interface
280: subroutine PetscSetFortranBasePointers( &
281: PETSC_NULL_CHARACTER, &
282: PETSC_NULL_INTEGER, PETSC_NULL_SCALAR, &
283: PETSC_NULL_DOUBLE, PETSC_NULL_REAL, &
284: PETSC_NULL_BOOL, PETSC_NULL_ENUM, PETSC_NULL_FUNCTION, &
285: PETSC_NULL_MPI_COMM, &
286: PETSC_NULL_INTEGER_ARRAY, PETSC_NULL_SCALAR_ARRAY, &
287: PETSC_NULL_REAL_ARRAY, APETSC_NULL_INTEGER_POINTER, &
288: PETSC_NULL_SCALAR_POINTER, PETSC_NULL_REAL_POINTER)
289: use, intrinsic :: ISO_C_binding
290: character(*) PETSC_NULL_CHARACTER
291: PetscInt PETSC_NULL_INTEGER
292: PetscScalar PETSC_NULL_SCALAR
293: PetscFortranDouble PETSC_NULL_DOUBLE
294: PetscReal PETSC_NULL_REAL
295: PetscBool PETSC_NULL_BOOL
296: PetscEnum PETSC_NULL_ENUM
297: external PETSC_NULL_FUNCTION
298: MPI_Comm PETSC_NULL_MPI_COMM
299: PetscInt PETSC_NULL_INTEGER_ARRAY(*)
300: PetscScalar PETSC_NULL_SCALAR_ARRAY(*)
301: PetscReal PETSC_NULL_REAL_ARRAY(*)
302: PetscInt, pointer :: APETSC_NULL_INTEGER_POINTER(:)
303: PetscScalar, pointer :: PETSC_NULL_SCALAR_POINTER(:)
304: PetscReal, pointer :: PETSC_NULL_REAL_POINTER(:)
305: end subroutine PetscSetFortranBasePointers
307: subroutine PetscOptionsString(string, text, man, default, value, flg, ierr)
308: use, intrinsic :: ISO_C_binding
309: character(*) string, text, man, default, value
310: PetscBool flg
311: PetscErrorCode ierr
312: end subroutine PetscOptionsString
313: end interface
315: interface petscbinaryread
316: subroutine petscbinaryreadcomplex(fd, data, num, count, type, z)
317: use, intrinsic :: ISO_C_binding
318: import ePetscDataType
319: integer4 fd
320: PetscComplex data(*)
321: PetscInt num
322: PetscInt count
323: PetscDataType type
324: PetscErrorCode z
325: end subroutine petscbinaryreadcomplex
326: subroutine petscbinaryreadreal(fd, data, num, count, type, z)
327: use, intrinsic :: ISO_C_binding
328: import ePetscDataType
329: integer4 fd
330: PetscReal data(*)
331: PetscInt num
332: PetscInt count
333: PetscDataType type
334: PetscErrorCode z
335: end subroutine petscbinaryreadreal
336: subroutine petscbinaryreadint(fd, data, num, count, type, z)
337: use, intrinsic :: ISO_C_binding
338: import ePetscDataType
339: integer4 fd
340: PetscInt data(*)
341: PetscInt num
342: PetscInt count
343: PetscDataType type
344: PetscErrorCode z
345: end subroutine petscbinaryreadint
346: subroutine petscbinaryreadcomplex1(fd, data, num, count, type, z)
347: use, intrinsic :: ISO_C_binding
348: import ePetscDataType
349: integer4 fd
350: PetscComplex data
351: PetscInt num
352: PetscInt count
353: PetscDataType type
354: PetscErrorCode z
355: end subroutine petscbinaryreadcomplex1
356: subroutine petscbinaryreadreal1(fd, data, num, count, type, z)
357: use, intrinsic :: ISO_C_binding
358: import ePetscDataType
359: integer4 fd
360: PetscReal data
361: PetscInt num
362: PetscInt count
363: PetscDataType type
364: PetscErrorCode z
365: end subroutine petscbinaryreadreal1
366: subroutine petscbinaryreadint1(fd, data, num, count, type, z)
367: use, intrinsic :: ISO_C_binding
368: import ePetscDataType
369: integer4 fd
370: PetscInt data
371: PetscInt num
372: PetscInt count
373: PetscDataType type
374: PetscErrorCode z
375: end subroutine petscbinaryreadint1
376: subroutine petscbinaryreadcomplexcnt(fd, data, num, count, type, z)
377: use, intrinsic :: ISO_C_binding
378: import ePetscDataType
379: integer4 fd
380: PetscComplex data(*)
381: PetscInt num
382: PetscInt count(1)
383: PetscDataType type
384: PetscErrorCode z
385: end subroutine petscbinaryreadcomplexcnt
386: subroutine petscbinaryreadrealcnt(fd, data, num, count, type, z)
387: use, intrinsic :: ISO_C_binding
388: import ePetscDataType
389: integer4 fd
390: PetscReal data(*)
391: PetscInt num
392: PetscInt count(1)
393: PetscDataType type
394: PetscErrorCode z
395: end subroutine petscbinaryreadrealcnt
396: subroutine petscbinaryreadintcnt(fd, data, num, count, type, z)
397: use, intrinsic :: ISO_C_binding
398: import ePetscDataType
399: integer4 fd
400: PetscInt data(*)
401: PetscInt num
402: PetscInt count(1)
403: PetscDataType type
404: PetscErrorCode z
405: end subroutine petscbinaryreadintcnt
406: subroutine petscbinaryreadcomplex1cnt(fd, data, num, count, type, z)
407: use, intrinsic :: ISO_C_binding
408: import ePetscDataType
409: integer4 fd
410: PetscComplex data
411: PetscInt num
412: PetscInt count(1)
413: PetscDataType type
414: PetscErrorCode z
415: end subroutine petscbinaryreadcomplex1cnt
416: subroutine petscbinaryreadreal1cnt(fd, data, num, count, type, z)
417: use, intrinsic :: ISO_C_binding
418: import ePetscDataType
419: integer4 fd
420: PetscReal data
421: PetscInt num
422: PetscInt count(1)
423: PetscDataType type
424: PetscErrorCode z
425: end subroutine petscbinaryreadreal1cnt
426: subroutine petscbinaryreadint1cnt(fd, data, num, count, type, z)
427: use, intrinsic :: ISO_C_binding
428: import ePetscDataType
429: integer4 fd
430: PetscInt data
431: PetscInt num
432: PetscInt count(1)
433: PetscDataType type
434: PetscErrorCode z
435: end subroutine petscbinaryreadint1cnt
436: end interface petscbinaryread
438: interface petscbinarywrite
439: subroutine petscbinarywritecomplex(fd, data, num, type, z)
440: use, intrinsic :: ISO_C_binding
441: import ePetscDataType
442: integer4 fd
443: PetscComplex data(*)
444: PetscInt num
445: PetscDataType type
446: PetscErrorCode z
447: end subroutine petscbinarywritecomplex
448: subroutine petscbinarywritereal(fd, data, num, type, z)
449: use, intrinsic :: ISO_C_binding
450: import ePetscDataType
451: integer4 fd
452: PetscReal data(*)
453: PetscInt num
454: PetscDataType type
455: PetscErrorCode z
456: end subroutine petscbinarywritereal
457: subroutine petscbinarywriteint(fd, data, num, type, z)
458: use, intrinsic :: ISO_C_binding
459: import ePetscDataType
460: integer4 fd
461: PetscInt data(*)
462: PetscInt num
463: PetscDataType type
464: PetscErrorCode z
465: end subroutine petscbinarywriteint
466: subroutine petscbinarywritecomplex1(fd, data, num, type, z)
467: use, intrinsic :: ISO_C_binding
468: import ePetscDataType
469: integer4 fd
470: PetscComplex data
471: PetscInt num
472: PetscDataType type
473: PetscErrorCode z
474: end subroutine petscbinarywritecomplex1
475: subroutine petscbinarywritereal1(fd, data, num, type, z)
476: use, intrinsic :: ISO_C_binding
477: import ePetscDataType
478: integer4 fd
479: PetscReal data
480: PetscInt num
481: PetscDataType type
482: PetscErrorCode z
483: end subroutine petscbinarywritereal1
484: subroutine petscbinarywriteint1(fd, data, num, type, z)
485: use, intrinsic :: ISO_C_binding
486: import ePetscDataType
487: integer4 fd
488: PetscInt data
489: PetscInt num
490: PetscDataType type
491: PetscErrorCode z
492: end subroutine petscbinarywriteint1
493: end interface petscbinarywrite
495: contains
496: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
497: !DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeWithHelp
498: #endif
499: subroutine PetscInitializeWithHelp(filename, help, ierr)
500: character(len=*) :: filename
501: character(len=*) :: help
502: PetscErrorCode :: ierr
504: if (filename /= PETSC_NULL_CHARACTER) then
505: call PetscInitializeF(trim(filename), help, ierr)
506: CHKERRQ(ierr)
507: else
508: call PetscInitializeF(filename, help, ierr)
509: CHKERRQ(ierr)
510: end if
511: end subroutine PetscInitializeWithHelp
513: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
514: !DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeNoHelp
515: #endif
516: subroutine PetscInitializeNoHelp(filename, ierr)
517: character(len=*) :: filename
518: PetscErrorCode :: ierr
520: if (filename /= PETSC_NULL_CHARACTER) then
521: call PetscInitializeF(trim(filename), PETSC_NULL_CHARACTER, ierr)
522: CHKERRQ(ierr)
523: else
524: call PetscInitializeF(filename, PETSC_NULL_CHARACTER, ierr)
525: CHKERRQ(ierr)
526: end if
527: end subroutine PetscInitializeNoHelp
529: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
530: !DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeNoArguments
531: #endif
532: subroutine PetscInitializeNoArguments(ierr)
533: PetscErrorCode :: ierr
535: call PetscInitializeF(PETSC_NULL_CHARACTER, PETSC_NULL_CHARACTER, ierr)
536: CHKERRQ(ierr)
537: end subroutine PetscInitializeNoArguments
539: #include <../ftn/sys/petscall.hf90>
540: end module petscsys
542: subroutine F90ArraySetRealPointer(array, sz, j, T)
543: use petscsysdef
544: PetscInt :: j, sz
545: PetscReal, target :: array(1:sz)
546: PetscReal2d, pointer :: T(:)
548: T(j + 1)%ptr => array
549: end subroutine F90ArraySetRealPointer
550: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
551: !DEC$ ATTRIBUTES DLLEXPORT:: F90ArraySetRealPointer
552: #endif
554: !------------------------------------------------------------------------
555: !TODO: generate the modules below by looping over
556: ! ftn/sys/XXX.h90
557: ! and skipping those in petscall.h
559: module petscbag
560: use petscsys
561: #include <../include/petsc/finclude/petscbag.h>
562: #include <../ftn/sys/petscbag.h>
563: #include <../ftn/sys/petscbag.h90>
564: contains
565: #include <../ftn/sys/petscbag.hf90>
566: end module petscbag
568: !------------------------------------------------------------------------
569: module petscbm
570: use petscsys
571: #include <../include/petsc/finclude/petscbm.h>
572: #include <../ftn/sys/petscbm.h>
573: #include <../ftn/sys/petscbm.h90>
574: contains
576: #include <../ftn/sys/petscbm.hf90>
577: end module petscbm
579: !------------------------------------------------------------------------
580: module petscmatlab
581: use petscsys
582: #include <../include/petsc/finclude/petscmatlab.h>
583: #include <../ftn/sys/petscmatlab.h>
584: #include <../ftn/sys/petscmatlab.h90>
586: contains
588: #include <../ftn/sys/petscmatlab.hf90>
589: end module petscmatlab
591: !------------------------------------------------------------------------
592: module petscdraw
593: use petscsys
594: #include <../include/petsc/finclude/petscdraw.h>
595: #include <../ftn/sys/petscdraw.h>
596: #include <../ftn/sys/petscdraw.h90>
598: PetscEnum, parameter :: PETSC_DRAW_BASIC_COLORS = 33
599: PetscEnum, parameter :: PETSC_DRAW_ROTATE = -1
600: PetscEnum, parameter :: PETSC_DRAW_WHITE = 0
601: PetscEnum, parameter :: PETSC_DRAW_BLACK = 1
602: PetscEnum, parameter :: PETSC_DRAW_RED = 2
603: PetscEnum, parameter :: PETSC_DRAW_GREEN = 3
604: PetscEnum, parameter :: PETSC_DRAW_CYAN = 4
605: PetscEnum, parameter :: PETSC_DRAW_BLUE = 5
606: PetscEnum, parameter :: PETSC_DRAW_MAGENTA = 6
607: PetscEnum, parameter :: PETSC_DRAW_AQUAMARINE = 7
608: PetscEnum, parameter :: PETSC_DRAW_FORESTGREEN = 8
609: PetscEnum, parameter :: PETSC_DRAW_ORANGE = 9
610: PetscEnum, parameter :: PETSC_DRAW_VIOLET = 10
611: PetscEnum, parameter :: PETSC_DRAW_BROWN = 11
612: PetscEnum, parameter :: PETSC_DRAW_PINK = 12
613: PetscEnum, parameter :: PETSC_DRAW_CORAL = 13
614: PetscEnum, parameter :: PETSC_DRAW_GRAY = 14
615: PetscEnum, parameter :: PETSC_DRAW_YELLOW = 15
616: PetscEnum, parameter :: PETSC_DRAW_GOLD = 16
617: PetscEnum, parameter :: PETSC_DRAW_LIGHTPINK = 17
618: PetscEnum, parameter :: PETSC_DRAW_MEDIUMTURQUOISE = 18
619: PetscEnum, parameter :: PETSC_DRAW_KHAKI = 19
620: PetscEnum, parameter :: PETSC_DRAW_DIMGRAY = 20
621: PetscEnum, parameter :: PETSC_DRAW_YELLOWGREEN = 21
622: PetscEnum, parameter :: PETSC_DRAW_SKYBLUE = 22
623: PetscEnum, parameter :: PETSC_DRAW_DARKGREEN = 23
624: PetscEnum, parameter :: PETSC_DRAW_NAVYBLUE = 24
625: PetscEnum, parameter :: PETSC_DRAW_SANDYBROWN = 25
626: PetscEnum, parameter :: PETSC_DRAW_CADETBLUE = 26
627: PetscEnum, parameter :: PETSC_DRAW_POWDERBLUE = 27
628: PetscEnum, parameter :: PETSC_DRAW_DEEPPINK = 28
629: PetscEnum, parameter :: PETSC_DRAW_THISTLE = 29
630: PetscEnum, parameter :: PETSC_DRAW_LIMEGREEN = 30
631: PetscEnum, parameter :: PETSC_DRAW_LAVENDERBLUSH = 31
632: PetscEnum, parameter :: PETSC_DRAW_PLUM = 32
634: contains
636: #include <../ftn/sys/petscdraw.hf90>
637: end module petscdraw
639: !------------------------------------------------------------------------
640: subroutine PetscSetCOMM(c1, c2)
641: use, intrinsic :: ISO_C_binding
642: use petscmpi, only: PETSC_COMM_WORLD, PETSC_COMM_SELF
644: implicit none
645: MPI_Comm c1, c2
647: PETSC_COMM_WORLD = c1
648: PETSC_COMM_SELF = c2
649: end
651: subroutine PetscGetCOMM(c1)
652: use, intrinsic :: ISO_C_binding
653: use petscmpi, only: PETSC_COMM_WORLD
654: implicit none
655: MPI_Comm c1
657: c1 = PETSC_COMM_WORLD
658: end subroutine PetscGetCOMM
660: subroutine PetscSetModuleBlock()
661: use, intrinsic :: ISO_C_binding
662: use petscsys!, only: PETSC_NULL_CHARACTER,PETSC_NULL_INTEGER,&
663: ! PETSC_NULL_SCALAR,PETSC_NULL_DOUBLE,PETSC_NULL_REAL,&
664: ! PETSC_NULL_BOOL,PETSC_NULL_FUNCTION,PETSC_NULL_MPI_COMM
665: implicit none
667: call PetscSetFortranBasePointers(PETSC_NULL_CHARACTER, &
668: PETSC_NULL_INTEGER, PETSC_NULL_SCALAR, &
669: PETSC_NULL_DOUBLE, PETSC_NULL_REAL, &
670: PETSC_NULL_BOOL, PETSC_NULL_ENUM, PETSC_NULL_FUNCTION, &
671: PETSC_NULL_MPI_COMM, &
672: PETSC_NULL_INTEGER_ARRAY, PETSC_NULL_SCALAR_ARRAY, &
673: PETSC_NULL_REAL_ARRAY, PETSC_NULL_INTEGER_POINTER, &
674: PETSC_NULL_SCALAR_POINTER, PETSC_NULL_REAL_POINTER)
675: end subroutine PetscSetModuleBlock
677: subroutine PetscSetModuleBlockMPI(freal, fscalar, fsum, finteger)
678: use, intrinsic :: ISO_C_binding
679: use petscmpi, only: MPIU_REAL, MPIU_SUM, MPIU_SCALAR, MPIU_INTEGER
680: implicit none
682: integer4 freal, fscalar, fsum, finteger
684: MPIU_REAL = freal
685: MPIU_SCALAR = fscalar
686: MPIU_SUM = fsum
687: MPIU_INTEGER = finteger
688: end subroutine PetscSetModuleBlockMPI
690: subroutine PetscSetModuleBlockNumeric(pi, maxreal, minreal, eps, seps, small, pinf, pninf)
691: use petscsys, only: PETSC_PI, PETSC_MAX_REAL, PETSC_MIN_REAL, &
692: PETSC_MACHINE_EPSILON, PETSC_SQRT_MACHINE_EPSILON, &
693: PETSC_SMALL, PETSC_INFINITY, PETSC_NINFINITY
694: use, intrinsic :: ISO_C_binding
695: implicit none
697: PetscReal pi, maxreal, minreal, eps, seps
698: PetscReal small, pinf, pninf
700: PETSC_PI = pi
701: PETSC_MAX_REAL = maxreal
702: PETSC_MIN_REAL = minreal
703: PETSC_MACHINE_EPSILON = eps
704: PETSC_SQRT_MACHINE_EPSILON = seps
705: PETSC_SMALL = small
706: PETSC_INFINITY = pinf
707: PETSC_NINFINITY = pninf
708: end subroutine PetscSetModuleBlockNumeric