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_FTN_MODULE)
  9:   use PETSC_MPI_FTN_MODULE
 10: #else
 11: #include "mpif.h"
 12: #endif
 13: #endif

 15:   MPIU_Datatype :: MPIU_REAL
 16:   MPIU_Datatype :: MPIU_SCALAR
 17:   MPIU_Datatype :: MPIU_INTEGER
 18:   MPIU_Op :: MPIU_SUM

 20:   MPIU_Comm:: PETSC_COMM_WORLD
 21:   MPIU_Comm:: PETSC_COMM_SELF

 23: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
 24: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_REAL
 25: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_SUM
 26: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_SCALAR
 27: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_INTEGER
 28: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMM_SELF
 29: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMM_WORLD
 30: #endif
 31: end module petscmpi

 33: module petscsysdef
 34:   use, intrinsic :: ISO_C_binding
 35:   use petscmpi
 36:   PetscReal, parameter :: PetscReal_Private = 1.0
 37:   integer, parameter   :: PETSC_REAL_KIND = kind(PetscReal_Private)

 39:   PetscScalar, parameter :: PetscScalar_Private = (1.0, 0.0)
 40:   integer, parameter   :: PETSC_SCALAR_KIND = kind(PetscScalar_Private)

 42:   PetscInt, parameter :: PetscInt_Private = 1
 43:   integer, parameter   :: PETSC_INT_KIND = kind(PetscInt_Private)

 45:   PetscMPIInt, parameter :: PetscMPIInt_Private = 1
 46:   integer, parameter   :: PETSC_MPIINT_KIND = kind(PetscMPIInt_Private)

 48:   PetscBool, parameter :: PETSC_TRUE = .true._C_BOOL
 49:   PetscBool, parameter :: PETSC_FALSE = .false._C_BOOL

 51:   PetscInt, parameter :: PETSC_DECIDE = -1
 52:   PetscInt, parameter :: PETSC_DECIDE_INTEGER = -1_PETSC_INT_KIND
 53:   PetscReal, parameter :: PETSC_DECIDE_REAL = -1.0_PETSC_REAL_KIND
 54: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
 55: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE
 56: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE_INTEGER
 57: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE_REAL
 58: #endif

 60:   PetscInt, parameter :: PETSC_DETERMINE = -1
 61:   PetscInt, parameter :: PETSC_DETERMINE_INTEGER = -1
 62:   PetscReal, parameter :: PETSC_DETERMINE_REAL = -1.0_PETSC_REAL_KIND
 63: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
 64: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE
 65: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE_INTEGER
 66: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE_REAL
 67: #endif

 69:   PetscInt, parameter :: PETSC_CURRENT = -2
 70:   PetscInt, parameter :: PETSC_CURRENT_INTEGER = -2
 71:   PetscReal, parameter :: PETSC_CURRENT_REAL = -2.0_PETSC_REAL_KIND
 72: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
 73: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT
 74: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT_INTEGER
 75: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT_REAL
 76: #endif

 78:   PetscInt, parameter :: PETSC_DEFAULT = -2
 79:   PetscInt, parameter :: PETSC_DEFAULT_INTEGER = -2
 80:   PetscReal, parameter :: PETSC_DEFAULT_REAL = -2.0_PETSC_REAL_KIND
 81: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
 82: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT
 83: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_INTEGER
 84: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_REAL
 85: #endif

 87:   PetscFortranAddr, parameter :: PETSC_STDOUT = 0
 88: !
 89: !  PETSc DataTypes
 90: !
 91: #if defined(PETSC_USE_REAL_SINGLE)
 92: #define PETSC_REAL PETSC_FLOAT
 93: #elif defined(PETSC_USE_REAL___FLOAT128)
 94: #define PETSC_REAL PETSC___FLOAT128
 95: #else
 96: #define PETSC_REAL PETSC_DOUBLE
 97: #endif
 98: #define PETSC_FORTRANADDR PETSC_LONG

100: ! PETSc mathematics include file. Defines certain basic mathematical
101: ! constants and functions for working with single and double precision
102: ! floating point numbers as well as complex and integers.
103: !
104: ! Representation of complex i
105:   PetscComplex, parameter :: PETSC_i = (0.0_PETSC_REAL_KIND, 1.0_PETSC_REAL_KIND)

107: ! A PETSC_NULL_FUNCTION pointer
108: !
109:   external PETSC_NULL_FUNCTION
110: !
111:   external PetscIsInfOrNanScalar
112:   external PetscIsInfOrNanReal
113:   PetscBool PetscIsInfOrNanScalar
114:   PetscBool PetscIsInfOrNanReal

116: #include <../ftn/sys/petscall.h>

118:   PetscViewer, parameter :: PETSC_VIEWER_STDOUT_SELF = tPetscViewer(9)
119:   PetscViewer, parameter :: PETSC_VIEWER_DRAW_WORLD = tPetscViewer(4)
120:   PetscViewer, parameter :: PETSC_VIEWER_DRAW_SELF = tPetscViewer(5)
121:   PetscViewer, parameter :: PETSC_VIEWER_SOCKET_WORLD = tPetscViewer(6)
122:   PetscViewer, parameter :: PETSC_VIEWER_SOCKET_SELF = tPetscViewer(7)
123:   PetscViewer, parameter :: PETSC_VIEWER_STDOUT_WORLD = tPetscViewer(8)
124:   PetscViewer, parameter :: PETSC_VIEWER_STDERR_WORLD = tPetscViewer(10)
125:   PetscViewer, parameter :: PETSC_VIEWER_STDERR_SELF = tPetscViewer(11)
126:   PetscViewer, parameter :: PETSC_VIEWER_BINARY_WORLD = tPetscViewer(12)
127:   PetscViewer, parameter :: PETSC_VIEWER_BINARY_SELF = tPetscViewer(13)
128:   PetscViewer, parameter :: PETSC_VIEWER_MATLAB_WORLD = tPetscViewer(14)
129:   PetscViewer, parameter :: PETSC_VIEWER_MATLAB_SELF = tPetscViewer(15)

131:   PetscViewer PETSC_VIEWER_STDOUT_
132:   PetscViewer PETSC_VIEWER_DRAW_
133:   external PETSC_VIEWER_STDOUT_
134:   external PETSC_VIEWER_DRAW_
135:   external PetscViewerAndFormatDestroy

137: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
138: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDOUT_SELF
139: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_DRAW_WORLD
140: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_DRAW_SELF
141: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_SOCKET_WORLD
142: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_SOCKET_SELF
143: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDOUT_WORLD
144: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDERR_WORLD
145: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDERR_SELF
146: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_BINARY_WORLD
147: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_BINARY_SELF
148: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_MATLAB_WORLD
149: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_MATLAB_SELF
150: #endif

152:   PetscErrorCode, parameter :: PETSC_ERR_MEM = 55
153:   PetscErrorCode, parameter :: PETSC_ERR_SUP = 56
154:   PetscErrorCode, parameter :: PETSC_ERR_SUP_SYS = 57
155:   PetscErrorCode, parameter :: PETSC_ERR_ORDER = 58
156:   PetscErrorCode, parameter :: PETSC_ERR_SIG = 59
157:   PetscErrorCode, parameter :: PETSC_ERR_FP = 72
158:   PetscErrorCode, parameter :: PETSC_ERR_COR = 74
159:   PetscErrorCode, parameter :: PETSC_ERR_LIB = 76
160:   PetscErrorCode, parameter :: PETSC_ERR_PLIB = 77
161:   PetscErrorCode, parameter :: PETSC_ERR_MEMC = 78
162:   PetscErrorCode, parameter :: PETSC_ERR_CONV_FAILED = 82
163:   PetscErrorCode, parameter :: PETSC_ERR_USER = 83
164:   PetscErrorCode, parameter :: PETSC_ERR_SYS = 88
165:   PetscErrorCode, parameter :: PETSC_ERR_POINTER = 70
166:   PetscErrorCode, parameter :: PETSC_ERR_MPI_LIB_INCOMP = 87

168:   PetscErrorCode, parameter :: PETSC_ERR_ARG_SIZ = 60
169:   PetscErrorCode, parameter :: PETSC_ERR_ARG_IDN = 61
170:   PetscErrorCode, parameter :: PETSC_ERR_ARG_WRONG = 62
171:   PetscErrorCode, parameter :: PETSC_ERR_ARG_CORRUPT = 64
172:   PetscErrorCode, parameter :: PETSC_ERR_ARG_OUTOFRANGE = 63
173:   PetscErrorCode, parameter :: PETSC_ERR_ARG_BADPTR = 68
174:   PetscErrorCode, parameter :: PETSC_ERR_ARG_NOTSAMETYPE = 69
175:   PetscErrorCode, parameter :: PETSC_ERR_ARG_NOTSAMECOMM = 80
176:   PetscErrorCode, parameter :: PETSC_ERR_ARG_WRONGSTATE = 73
177:   PetscErrorCode, parameter :: PETSC_ERR_ARG_TYPENOTSET = 89
178:   PetscErrorCode, parameter :: PETSC_ERR_ARG_INCOMP = 75
179:   PetscErrorCode, parameter :: PETSC_ERR_ARG_NULL = 85
180:   PetscErrorCode, parameter :: PETSC_ERR_ARG_UNKNOWN_TYPE = 86

182:   PetscErrorCode, parameter :: PETSC_ERR_FILE_OPEN = 65
183:   PetscErrorCode, parameter :: PETSC_ERR_FILE_READ = 66
184:   PetscErrorCode, parameter :: PETSC_ERR_FILE_WRITE = 67
185:   PetscErrorCode, parameter :: PETSC_ERR_FILE_UNEXPECTED = 79

187:   PetscErrorCode, parameter :: PETSC_ERR_MAT_LU_ZRPVT = 71
188:   PetscErrorCode, parameter :: PETSC_ERR_MAT_CH_ZRPVT = 81

190:   PetscErrorCode, parameter :: PETSC_ERR_INT_OVERFLOW = 84

192:   PetscErrorCode, parameter :: PETSC_ERR_FLOP_COUNT = 90
193:   PetscErrorCode, parameter :: PETSC_ERR_NOT_CONVERGED = 91
194:   PetscErrorCode, parameter :: PETSC_ERR_MISSING_FACTOR = 92
195:   PetscErrorCode, parameter :: PETSC_ERR_OPT_OVERWRITE = 93
196:   PetscErrorCode, parameter :: PETSC_ERR_WRONG_MPI_SIZE = 94
197:   PetscErrorCode, parameter :: PETSC_ERR_USER_INPUT = 95
198:   PetscErrorCode, parameter :: PETSC_ERR_GPU_RESOURCE = 96
199:   PetscErrorCode, parameter :: PETSC_ERR_GPU = 97
200:   PetscErrorCode, parameter :: PETSC_ERR_MPI = 98
201:   PetscErrorCode, parameter :: PETSC_ERR_RETURN = 99

203:   character(len=80) :: PETSC_NULL_CHARACTER = ''
204:   PetscInt PETSC_NULL_INTEGER, PETSC_NULL_INTEGER_ARRAY(1)
205:   PetscInt, pointer :: PETSC_NULL_INTEGER_POINTER(:)
206:   PetscScalar, pointer :: PETSC_NULL_SCALAR_POINTER(:)
207:   PetscFortranDouble PETSC_NULL_DOUBLE
208:   PetscScalar PETSC_NULL_SCALAR, PETSC_NULL_SCALAR_ARRAY(1)
209:   PetscReal PETSC_NULL_REAL, PETSC_NULL_REAL_ARRAY(1)
210:   PetscReal, pointer :: PETSC_NULL_REAL_POINTER(:)
211:   PetscBool PETSC_NULL_BOOL
212:   PetscEnum PETSC_NULL_ENUM
213:   MPIU_Comm PETSC_NULL_MPI_COMM
214: !
215: !     Basic math constants
216: !
217:   PetscReal PETSC_PI
218:   PetscReal PETSC_MAX_REAL
219:   PetscReal PETSC_MIN_REAL
220:   PetscReal PETSC_MACHINE_EPSILON
221:   PetscReal PETSC_SQRT_MACHINE_EPSILON
222:   PetscReal PETSC_SMALL
223:   PetscReal PETSC_INFINITY
224:   PetscReal PETSC_NINFINITY

226: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
227: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_CHARACTER
228: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER
229: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER_ARRAY
230: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER_POINTER
231: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR_POINTER
232: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL_POINTER
233: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_DOUBLE
234: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR
235: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR_ARRAY
236: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL
237: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL_ARRAY
238: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_BOOL
239: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_ENUM
240: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_MPI_COMM
241: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_PI
242: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_MAX_REAL
243: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_MIN_REAL
244: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_MACHINE_EPSILON
245: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_SQRT_MACHINE_EPSILON
246: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_SMALL
247: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_INFINITY
248: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NINFINITY
249: #endif

251:   type tPetscReal2d
252:     sequence
253:     PetscReal, dimension(:), pointer :: ptr
254:   end type tPetscReal2D

256: end module petscsysdef

258: module petscsys
259:   use, intrinsic :: ISO_C_binding
260:   use petscsysdef
261:   type(c_ptr) :: petscFtnCtx  ! used by automatically generated XXXGetContext() macros

263: #include <../src/sys/ftn-mod/petscsys.h90>
264: #include <../src/sys/ftn-mod/petscviewer.h90>
265: #include <../ftn/sys/petscall.h90>

267:   interface PetscInitialize
268:     module procedure PetscInitializeWithHelp, PetscInitializeNoHelp, PetscInitializeNoArguments
269:   end interface PetscInitialize

271:   interface
272:     subroutine PetscSetFortranBasePointers( &
273:       PETSC_NULL_CHARACTER, &
274:       PETSC_NULL_INTEGER, PETSC_NULL_SCALAR, &
275:       PETSC_NULL_DOUBLE, PETSC_NULL_REAL, &
276:       PETSC_NULL_BOOL, PETSC_NULL_ENUM, PETSC_NULL_FUNCTION, &
277:       PETSC_NULL_MPI_COMM, &
278:       PETSC_NULL_INTEGER_ARRAY, PETSC_NULL_SCALAR_ARRAY, &
279:       PETSC_NULL_REAL_ARRAY, APETSC_NULL_INTEGER_POINTER, &
280:       PETSC_NULL_SCALAR_POINTER, PETSC_NULL_REAL_POINTER)
281:       use, intrinsic :: ISO_C_binding
282:       use petscmpi
283:       character(*) PETSC_NULL_CHARACTER
284:       PetscInt PETSC_NULL_INTEGER
285:       PetscScalar PETSC_NULL_SCALAR
286:       PetscFortranDouble PETSC_NULL_DOUBLE
287:       PetscReal PETSC_NULL_REAL
288:       PetscBool PETSC_NULL_BOOL
289:       PetscEnum PETSC_NULL_ENUM
290:       external PETSC_NULL_FUNCTION
291:       MPIU_Comm PETSC_NULL_MPI_COMM
292:       PetscInt PETSC_NULL_INTEGER_ARRAY(*)
293:       PetscScalar PETSC_NULL_SCALAR_ARRAY(*)
294:       PetscReal PETSC_NULL_REAL_ARRAY(*)
295:       PetscInt, pointer :: APETSC_NULL_INTEGER_POINTER(:)
296:       PetscScalar, pointer :: PETSC_NULL_SCALAR_POINTER(:)
297:       PetscReal, pointer :: PETSC_NULL_REAL_POINTER(:)
298:     end subroutine PetscSetFortranBasePointers

300:     subroutine PetscOptionsString(string, text, man, default, value, flg, ierr)
301:       use, intrinsic :: ISO_C_binding
302:       character(*) string, text, man, default, value
303:       PetscBool flg
304:       PetscErrorCode ierr
305:     end subroutine PetscOptionsString
306:   end interface

308:   interface petscbinaryread
309:     subroutine petscbinaryreadcomplex(fd, data, num, count, type, z)
310:       use, intrinsic :: ISO_C_binding
311:       import ePetscDataType
312:       integer4 fd
313:       PetscComplex data(*)
314:       PetscInt num
315:       PetscInt count
316:       PetscDataType type
317:       PetscErrorCode z
318:     end subroutine petscbinaryreadcomplex
319:     subroutine petscbinaryreadreal(fd, data, num, count, type, z)
320:       use, intrinsic :: ISO_C_binding
321:       import ePetscDataType
322:       integer4 fd
323:       PetscReal data(*)
324:       PetscInt num
325:       PetscInt count
326:       PetscDataType type
327:       PetscErrorCode z
328:     end subroutine petscbinaryreadreal
329:     subroutine petscbinaryreadint(fd, data, num, count, type, z)
330:       use, intrinsic :: ISO_C_binding
331:       import ePetscDataType
332:       integer4 fd
333:       PetscInt data(*)
334:       PetscInt num
335:       PetscInt count
336:       PetscDataType type
337:       PetscErrorCode z
338:     end subroutine petscbinaryreadint
339:     subroutine petscbinaryreadcomplex1(fd, data, num, count, type, z)
340:       use, intrinsic :: ISO_C_binding
341:       import ePetscDataType
342:       integer4 fd
343:       PetscComplex data
344:       PetscInt num
345:       PetscInt count
346:       PetscDataType type
347:       PetscErrorCode z
348:     end subroutine petscbinaryreadcomplex1
349:     subroutine petscbinaryreadreal1(fd, data, num, count, type, z)
350:       use, intrinsic :: ISO_C_binding
351:       import ePetscDataType
352:       integer4 fd
353:       PetscReal data
354:       PetscInt num
355:       PetscInt count
356:       PetscDataType type
357:       PetscErrorCode z
358:     end subroutine petscbinaryreadreal1
359:     subroutine petscbinaryreadint1(fd, data, num, count, type, z)
360:       use, intrinsic :: ISO_C_binding
361:       import ePetscDataType
362:       integer4 fd
363:       PetscInt data
364:       PetscInt num
365:       PetscInt count
366:       PetscDataType type
367:       PetscErrorCode z
368:     end subroutine petscbinaryreadint1
369:     subroutine petscbinaryreadcomplexcnt(fd, data, num, count, type, z)
370:       use, intrinsic :: ISO_C_binding
371:       import ePetscDataType
372:       integer4 fd
373:       PetscComplex data(*)
374:       PetscInt num
375:       PetscInt count(1)
376:       PetscDataType type
377:       PetscErrorCode z
378:     end subroutine petscbinaryreadcomplexcnt
379:     subroutine petscbinaryreadrealcnt(fd, data, num, count, type, z)
380:       use, intrinsic :: ISO_C_binding
381:       import ePetscDataType
382:       integer4 fd
383:       PetscReal data(*)
384:       PetscInt num
385:       PetscInt count(1)
386:       PetscDataType type
387:       PetscErrorCode z
388:     end subroutine petscbinaryreadrealcnt
389:     subroutine petscbinaryreadintcnt(fd, data, num, count, type, z)
390:       use, intrinsic :: ISO_C_binding
391:       import ePetscDataType
392:       integer4 fd
393:       PetscInt data(*)
394:       PetscInt num
395:       PetscInt count(1)
396:       PetscDataType type
397:       PetscErrorCode z
398:     end subroutine petscbinaryreadintcnt
399:     subroutine petscbinaryreadcomplex1cnt(fd, data, num, count, type, z)
400:       use, intrinsic :: ISO_C_binding
401:       import ePetscDataType
402:       integer4 fd
403:       PetscComplex data
404:       PetscInt num
405:       PetscInt count(1)
406:       PetscDataType type
407:       PetscErrorCode z
408:     end subroutine petscbinaryreadcomplex1cnt
409:     subroutine petscbinaryreadreal1cnt(fd, data, num, count, type, z)
410:       use, intrinsic :: ISO_C_binding
411:       import ePetscDataType
412:       integer4 fd
413:       PetscReal data
414:       PetscInt num
415:       PetscInt count(1)
416:       PetscDataType type
417:       PetscErrorCode z
418:     end subroutine petscbinaryreadreal1cnt
419:     subroutine petscbinaryreadint1cnt(fd, data, num, count, type, z)
420:       use, intrinsic :: ISO_C_binding
421:       import ePetscDataType
422:       integer4 fd
423:       PetscInt data
424:       PetscInt num
425:       PetscInt count(1)
426:       PetscDataType type
427:       PetscErrorCode z
428:     end subroutine petscbinaryreadint1cnt
429:   end interface petscbinaryread

431:   interface petscbinarywrite
432:     subroutine petscbinarywritecomplex(fd, data, num, type, z)
433:       use, intrinsic :: ISO_C_binding
434:       import ePetscDataType
435:       integer4 fd
436:       PetscComplex data(*)
437:       PetscInt num
438:       PetscDataType type
439:       PetscErrorCode z
440:     end subroutine petscbinarywritecomplex
441:     subroutine petscbinarywritereal(fd, data, num, type, z)
442:       use, intrinsic :: ISO_C_binding
443:       import ePetscDataType
444:       integer4 fd
445:       PetscReal data(*)
446:       PetscInt num
447:       PetscDataType type
448:       PetscErrorCode z
449:     end subroutine petscbinarywritereal
450:     subroutine petscbinarywriteint(fd, data, num, type, z)
451:       use, intrinsic :: ISO_C_binding
452:       import ePetscDataType
453:       integer4 fd
454:       PetscInt data(*)
455:       PetscInt num
456:       PetscDataType type
457:       PetscErrorCode z
458:     end subroutine petscbinarywriteint
459:     subroutine petscbinarywritecomplex1(fd, data, num, type, z)
460:       use, intrinsic :: ISO_C_binding
461:       import ePetscDataType
462:       integer4 fd
463:       PetscComplex data
464:       PetscInt num
465:       PetscDataType type
466:       PetscErrorCode z
467:     end subroutine petscbinarywritecomplex1
468:     subroutine petscbinarywritereal1(fd, data, num, type, z)
469:       use, intrinsic :: ISO_C_binding
470:       import ePetscDataType
471:       integer4 fd
472:       PetscReal data
473:       PetscInt num
474:       PetscDataType type
475:       PetscErrorCode z
476:     end subroutine petscbinarywritereal1
477:     subroutine petscbinarywriteint1(fd, data, num, type, z)
478:       use, intrinsic :: ISO_C_binding
479:       import ePetscDataType
480:       integer4 fd
481:       PetscInt data
482:       PetscInt num
483:       PetscDataType type
484:       PetscErrorCode z
485:     end subroutine petscbinarywriteint1
486:   end interface petscbinarywrite

488: contains
489: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
490: !DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeWithHelp
491: #endif
492:   subroutine PetscInitializeWithHelp(filename, help, ierr)
493:     character(len=*) :: filename
494:     character(len=*) :: help
495:     PetscErrorCode   :: ierr

497:     if (filename /= PETSC_NULL_CHARACTER) then
498:       call PetscInitializeF(trim(filename), help, ierr)
499:       CHKERRQ(ierr)
500:     else
501:       call PetscInitializeF(filename, help, ierr)
502:       CHKERRQ(ierr)
503:     end if
504:   end subroutine PetscInitializeWithHelp

506: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
507: !DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeNoHelp
508: #endif
509:   subroutine PetscInitializeNoHelp(filename, ierr)
510:     character(len=*) :: filename
511:     PetscErrorCode   :: ierr

513:     if (filename /= PETSC_NULL_CHARACTER) then
514:       call PetscInitializeF(trim(filename), PETSC_NULL_CHARACTER, ierr)
515:       CHKERRQ(ierr)
516:     else
517:       call PetscInitializeF(filename, PETSC_NULL_CHARACTER, ierr)
518:       CHKERRQ(ierr)
519:     end if
520:   end subroutine PetscInitializeNoHelp

522: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
523: !DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeNoArguments
524: #endif
525:   subroutine PetscInitializeNoArguments(ierr)
526:     PetscErrorCode :: ierr

528:     call PetscInitializeF(PETSC_NULL_CHARACTER, PETSC_NULL_CHARACTER, ierr)
529:     CHKERRQ(ierr)
530:   end subroutine PetscInitializeNoArguments

532: #include <../ftn/sys/petscall.hf90>
533: end module petscsys

535: subroutine F90ArraySetRealPointer(array, sz, j, T)
536:   use petscsysdef
537:   PetscInt :: j, sz
538:   PetscReal, target    :: array(1:sz)
539:   PetscReal2d, pointer :: T(:)

541:   T(j + 1)%ptr => array
542: end subroutine F90ArraySetRealPointer
543: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
544: !DEC$ ATTRIBUTES DLLEXPORT:: F90ArraySetRealPointer
545: #endif

547: !TODO: generate the modules below by looping over
548: !      ftn/sys/XXX.h90
549: !      and skipping those in petscall.h

551: module petscbag
552:   use petscsys
553: #include <../include/petsc/finclude/petscbag.h>
554: #include <../ftn/sys/petscbag.h>
555: #include <../ftn/sys/petscbag.h90>
556: contains
557: #include <../ftn/sys/petscbag.hf90>
558: end module petscbag

560: module petscbm
561:   use petscsys
562: #include <../include/petsc/finclude/petscbm.h>
563: #include <../ftn/sys/petscbm.h>
564: #include <../ftn/sys/petscbm.h90>
565: contains

567: #include <../ftn/sys/petscbm.hf90>
568: end module petscbm

570: module petscmatlab
571:   use petscsys
572: #include <../include/petsc/finclude/petscmatlab.h>
573: #include <../ftn/sys/petscmatlab.h>
574: #include <../ftn/sys/petscmatlab.h90>

576: contains

578: #include <../ftn/sys/petscmatlab.hf90>
579: end module petscmatlab

581: module petscdraw
582:   use petscsys
583: #include <../include/petsc/finclude/petscdraw.h>
584: #include <../ftn/sys/petscdraw.h>
585: #include <../ftn/sys/petscdraw.h90>

587:   PetscEnum, parameter :: PETSC_DRAW_BASIC_COLORS = 33
588:   PetscEnum, parameter :: PETSC_DRAW_ROTATE = -1
589:   PetscEnum, parameter :: PETSC_DRAW_WHITE = 0
590:   PetscEnum, parameter :: PETSC_DRAW_BLACK = 1
591:   PetscEnum, parameter :: PETSC_DRAW_RED = 2
592:   PetscEnum, parameter :: PETSC_DRAW_GREEN = 3
593:   PetscEnum, parameter :: PETSC_DRAW_CYAN = 4
594:   PetscEnum, parameter :: PETSC_DRAW_BLUE = 5
595:   PetscEnum, parameter :: PETSC_DRAW_MAGENTA = 6
596:   PetscEnum, parameter :: PETSC_DRAW_AQUAMARINE = 7
597:   PetscEnum, parameter :: PETSC_DRAW_FORESTGREEN = 8
598:   PetscEnum, parameter :: PETSC_DRAW_ORANGE = 9
599:   PetscEnum, parameter :: PETSC_DRAW_VIOLET = 10
600:   PetscEnum, parameter :: PETSC_DRAW_BROWN = 11
601:   PetscEnum, parameter :: PETSC_DRAW_PINK = 12
602:   PetscEnum, parameter :: PETSC_DRAW_CORAL = 13
603:   PetscEnum, parameter :: PETSC_DRAW_GRAY = 14
604:   PetscEnum, parameter :: PETSC_DRAW_YELLOW = 15
605:   PetscEnum, parameter :: PETSC_DRAW_GOLD = 16
606:   PetscEnum, parameter :: PETSC_DRAW_LIGHTPINK = 17
607:   PetscEnum, parameter :: PETSC_DRAW_MEDIUMTURQUOISE = 18
608:   PetscEnum, parameter :: PETSC_DRAW_KHAKI = 19
609:   PetscEnum, parameter :: PETSC_DRAW_DIMGRAY = 20
610:   PetscEnum, parameter :: PETSC_DRAW_YELLOWGREEN = 21
611:   PetscEnum, parameter :: PETSC_DRAW_SKYBLUE = 22
612:   PetscEnum, parameter :: PETSC_DRAW_DARKGREEN = 23
613:   PetscEnum, parameter :: PETSC_DRAW_NAVYBLUE = 24
614:   PetscEnum, parameter :: PETSC_DRAW_SANDYBROWN = 25
615:   PetscEnum, parameter :: PETSC_DRAW_CADETBLUE = 26
616:   PetscEnum, parameter :: PETSC_DRAW_POWDERBLUE = 27
617:   PetscEnum, parameter :: PETSC_DRAW_DEEPPINK = 28
618:   PetscEnum, parameter :: PETSC_DRAW_THISTLE = 29
619:   PetscEnum, parameter :: PETSC_DRAW_LIMEGREEN = 30
620:   PetscEnum, parameter :: PETSC_DRAW_LAVENDERBLUSH = 31
621:   PetscEnum, parameter :: PETSC_DRAW_PLUM = 32

623: contains

625: #include <../ftn/sys/petscdraw.hf90>
626: end module petscdraw

628: subroutine PetscSetCOMM(c1, c2)
629:   use, intrinsic :: ISO_C_binding
630:   use petscmpi

632:   implicit none
633:   MPIU_Comm c1, c2

635:   PETSC_COMM_WORLD = c1
636:   PETSC_COMM_SELF = c2
637: end

639: subroutine PetscGetCOMM(c1)
640:   use, intrinsic :: ISO_C_binding
641:   use petscmpi
642:   implicit none
643:   MPIU_Comm c1

645:   c1 = PETSC_COMM_WORLD
646: end subroutine PetscGetCOMM

648: subroutine PetscSetModuleBlock()
649:   use, intrinsic :: ISO_C_binding
650:   use petscsys!, only: PETSC_NULL_CHARACTER,PETSC_NULL_INTEGER,&
651:   !  PETSC_NULL_SCALAR,PETSC_NULL_DOUBLE,PETSC_NULL_REAL,&
652:   !  PETSC_NULL_BOOL,PETSC_NULL_FUNCTION,PETSC_NULL_MPI_COMM
653:   implicit none

655:   call PetscSetFortranBasePointers(PETSC_NULL_CHARACTER, &
656:                                    PETSC_NULL_INTEGER, PETSC_NULL_SCALAR, &
657:                                    PETSC_NULL_DOUBLE, PETSC_NULL_REAL, &
658:                                    PETSC_NULL_BOOL, PETSC_NULL_ENUM, PETSC_NULL_FUNCTION, &
659:                                    PETSC_NULL_MPI_COMM, &
660:                                    PETSC_NULL_INTEGER_ARRAY, PETSC_NULL_SCALAR_ARRAY, &
661:                                    PETSC_NULL_REAL_ARRAY, PETSC_NULL_INTEGER_POINTER, &
662:                                    PETSC_NULL_SCALAR_POINTER, PETSC_NULL_REAL_POINTER)
663: end subroutine PetscSetModuleBlock

665: subroutine PetscSetModuleBlockMPI(freal, fscalar, fsum, finteger)
666:   use, intrinsic :: ISO_C_binding
667:   use petscmpi
668:   implicit none

670:   MPIU_Datatype freal, fscalar, finteger
671:   MPIU_Op fsum

673:   MPIU_REAL = freal
674:   MPIU_SCALAR = fscalar
675:   MPIU_SUM = fsum
676:   MPIU_INTEGER = finteger
677: end subroutine PetscSetModuleBlockMPI

679: subroutine PetscSetModuleBlockNumeric(pi, maxreal, minreal, eps, seps, small, pinf, pninf)
680:   use petscsys, only: PETSC_PI, PETSC_MAX_REAL, PETSC_MIN_REAL, &
681:                       PETSC_MACHINE_EPSILON, PETSC_SQRT_MACHINE_EPSILON, &
682:                       PETSC_SMALL, PETSC_INFINITY, PETSC_NINFINITY
683:   use, intrinsic :: ISO_C_binding
684:   implicit none

686:   PetscReal pi, maxreal, minreal, eps, seps
687:   PetscReal small, pinf, pninf

689:   PETSC_PI = pi
690:   PETSC_MAX_REAL = maxreal
691:   PETSC_MIN_REAL = minreal
692:   PETSC_MACHINE_EPSILON = eps
693:   PETSC_SQRT_MACHINE_EPSILON = seps
694:   PETSC_SMALL = small
695:   PETSC_INFINITY = pinf
696:   PETSC_NINFINITY = pninf
697: end subroutine PetscSetModuleBlockNumeric