Actual source code: petscsysmod.F90

  1:         module petscmpi
  2: #include <petscconf.h>
  3: #include "petsc/finclude/petscsys.h"
  4: #if defined(PETSC_HAVE_MPIUNI)
  5:         use mpiuni
  6: #else
  7: #if defined(PETSC_HAVE_MPI_F90MODULE)
  8:         use mpi
  9: #else
 10: #include "mpif.h"
 11: #endif
 12: #endif

 14:         public:: MPIU_REAL, MPIU_SUM, MPIU_SCALAR, MPIU_INTEGER
 15:         public:: PETSC_COMM_WORLD, PETSC_COMM_SELF

 17: !   These values are for __float128 are handled in the common block (below)
 18: !   and transmitted from the C code

 20:       integer4 :: MPIU_REAL
 21:       integer4 :: MPIU_SUM
 22:       integer4 :: MPIU_SCALAR
 23:       integer4 :: MPIU_INTEGER

 25:       MPI_Comm::PETSC_COMM_WORLD = 0
 26:       MPI_Comm::PETSC_COMM_SELF = 0

 28: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
 29: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_REAL
 30: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_SUM
 31: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_SCALAR
 32: !DEC$ ATTRIBUTES DLLEXPORT::MPIU_INTEGER
 33: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMM_SELF
 34: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMM_WORLD
 35: #endif
 36:       end module

 38: ! ------------------------------------------------------------------------

 40:         module petscsysdef
 41: #if defined(PETSC_HAVE_MPI_F90MODULE_VISIBILITY)
 42:         use petscmpi
 43: #else
 44:         use petscmpi, only: MPIU_REAL,MPIU_SUM,MPIU_SCALAR,MPIU_INTEGER,PETSC_COMM_WORLD,PETSC_COMM_SELF
 45: #endif
 46:       PetscReal,Parameter :: PetscReal_Private = 1.0
 47:       Integer,Parameter   :: PETSC_REAL_KIND = Selected_Real_Kind(Precision(PetscReal_Private))

 49:       PetscBool, parameter :: PETSC_TRUE = .true.
 50:       PetscBool, parameter :: PETSC_FALSE = .false.

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

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

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

 79:       PetscInt, parameter :: PETSC_DEFAULT = -2
 80:       PetscInt, parameter :: PETSC_DEFAULT_INTEGER = -2
 81:       PetscReal, parameter :: PETSC_DEFAULT_REAL = -2.0d0
 82: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
 83: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT
 84: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_INTEGER
 85: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_REAL
 86: #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: !
106: #if defined(PETSC_USE_REAL_SINGLE)
107:       PetscComplex, parameter :: PETSC_i = (0.0e0,1.0e0)
108: #else
109:       PetscComplex, parameter :: PETSC_i = (0.0d0,1.0d0)
110: #endif

112: !      A PETSC_NULL_FUNCTION pointer
113: !
114:       external PETSC_NULL_FUNCTION
115: !
116: !     Possible arguments to PetscPushErrorHandler()
117: !
118:       external PETSCTRACEBACKERRORHANDLER
119:       external PETSCABORTERRORHANDLER
120:       external PETSCEMACSCLIENTERRORHANDLER
121:       external PETSCATTACHDEBUGGERERRORHANDLER
122:       external PETSCIGNOREERRORHANDLER
123: !
124:       external  PetscIsInfOrNanScalar
125:       external  PetscIsInfOrNanReal
126:       PetscBool PetscIsInfOrNanScalar
127:       PetscBool PetscIsInfOrNanReal

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

131:       PetscViewer, parameter :: PETSC_VIEWER_STDOUT_SELF  = tPetscViewer(9)
132:       PetscViewer, parameter :: PETSC_VIEWER_DRAW_WORLD   = tPetscViewer(4)
133:       PetscViewer, parameter :: PETSC_VIEWER_DRAW_SELF    = tPetscViewer(5)
134:       PetscViewer, parameter :: PETSC_VIEWER_SOCKET_WORLD = tPetscViewer(6)
135:       PetscViewer, parameter :: PETSC_VIEWER_SOCKET_SELF  = tPetscViewer(7)
136:       PetscViewer, parameter :: PETSC_VIEWER_STDOUT_WORLD = tPetscViewer(8)
137:       PetscViewer, parameter :: PETSC_VIEWER_STDERR_WORLD = tPetscViewer(10)
138:       PetscViewer, parameter :: PETSC_VIEWER_STDERR_SELF  = tPetscViewer(11)
139:       PetscViewer, parameter :: PETSC_VIEWER_BINARY_WORLD = tPetscViewer(12)
140:       PetscViewer, parameter :: PETSC_VIEWER_BINARY_SELF  = tPetscViewer(13)
141:       PetscViewer, parameter :: PETSC_VIEWER_MATLAB_WORLD = tPetscViewer(14)
142:       PetscViewer, parameter :: PETSC_VIEWER_MATLAB_SELF  = tPetscViewer(15)

144:       PetscViewer PETSC_VIEWER_STDOUT_
145:       PetscViewer PETSC_VIEWER_DRAW_
146:       external PETSC_VIEWER_STDOUT_
147:       external PETSC_VIEWER_DRAW_
148:       external PetscViewerAndFormatDestroy

150: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
151: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDOUT_SELF
152: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_DRAW_WORLD
153: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_DRAW_SELF
154: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_SOCKET_WORLD
155: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_SOCKET_SELF
156: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDOUT_WORLD
157: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDERR_WORLD
158: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDERR_SELF
159: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_BINARY_WORLD
160: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_BINARY_SELF
161: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_MATLAB_WORLD
162: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_MATLAB_SELF
163: #endif

165:       PetscErrorCode, parameter :: PETSC_ERR_MEM              = 55
166:       PetscErrorCode, parameter :: PETSC_ERR_SUP              = 56
167:       PetscErrorCode, parameter :: PETSC_ERR_SUP_SYS          = 57
168:       PetscErrorCode, parameter :: PETSC_ERR_ORDER            = 58
169:       PetscErrorCode, parameter :: PETSC_ERR_SIG              = 59
170:       PetscErrorCode, parameter :: PETSC_ERR_FP               = 72
171:       PetscErrorCode, parameter :: PETSC_ERR_COR              = 74
172:       PetscErrorCode, parameter :: PETSC_ERR_LIB              = 76
173:       PetscErrorCode, parameter :: PETSC_ERR_PLIB             = 77
174:       PetscErrorCode, parameter :: PETSC_ERR_MEMC             = 78
175:       PetscErrorCode, parameter :: PETSC_ERR_CONV_FAILED      = 82
176:       PetscErrorCode, parameter :: PETSC_ERR_USER             = 83
177:       PetscErrorCode, parameter :: PETSC_ERR_SYS              = 88
178:       PetscErrorCode, parameter :: PETSC_ERR_POINTER          = 70
179:       PetscErrorCode, parameter :: PETSC_ERR_MPI_LIB_INCOMP   = 87

181:       PetscErrorCode, parameter :: PETSC_ERR_ARG_SIZ          = 60
182:       PetscErrorCode, parameter :: PETSC_ERR_ARG_IDN          = 61
183:       PetscErrorCode, parameter :: PETSC_ERR_ARG_WRONG        = 62
184:       PetscErrorCode, parameter :: PETSC_ERR_ARG_CORRUPT      = 64
185:       PetscErrorCode, parameter :: PETSC_ERR_ARG_OUTOFRANGE   = 63
186:       PetscErrorCode, parameter :: PETSC_ERR_ARG_BADPTR       = 68
187:       PetscErrorCode, parameter :: PETSC_ERR_ARG_NOTSAMETYPE  = 69
188:       PetscErrorCode, parameter :: PETSC_ERR_ARG_NOTSAMECOMM  = 80
189:       PetscErrorCode, parameter :: PETSC_ERR_ARG_WRONGSTATE   = 73
190:       PetscErrorCode, parameter :: PETSC_ERR_ARG_TYPENOTSET   = 89
191:       PetscErrorCode, parameter :: PETSC_ERR_ARG_INCOMP       = 75
192:       PetscErrorCode, parameter :: PETSC_ERR_ARG_NULL         = 85
193:       PetscErrorCode, parameter :: PETSC_ERR_ARG_UNKNOWN_TYPE = 86

195:       PetscErrorCode, parameter :: PETSC_ERR_FILE_OPEN        = 65
196:       PetscErrorCode, parameter :: PETSC_ERR_FILE_READ        = 66
197:       PetscErrorCode, parameter :: PETSC_ERR_FILE_WRITE       = 67
198:       PetscErrorCode, parameter :: PETSC_ERR_FILE_UNEXPECTED  = 79

200:       PetscErrorCode, parameter :: PETSC_ERR_MAT_LU_ZRPVT     = 71
201:       PetscErrorCode, parameter :: PETSC_ERR_MAT_CH_ZRPVT     = 81

203:       PetscErrorCode, parameter :: PETSC_ERR_INT_OVERFLOW     = 84

205:       PetscErrorCode, parameter :: PETSC_ERR_FLOP_COUNT       = 90
206:       PetscErrorCode, parameter :: PETSC_ERR_NOT_CONVERGED    = 91
207:       PetscErrorCode, parameter :: PETSC_ERR_MISSING_FACTOR   = 92
208:       PetscErrorCode, parameter :: PETSC_ERR_OPT_OVERWRITE    = 93
209:       PetscErrorCode, parameter :: PETSC_ERR_WRONG_MPI_SIZE   = 94
210:       PetscErrorCode, parameter :: PETSC_ERR_USER_INPUT       = 95
211:       PetscErrorCode, parameter :: PETSC_ERR_GPU_RESOURCE     = 96
212:       PetscErrorCode, parameter :: PETSC_ERR_GPU              = 97
213:       PetscErrorCode, parameter :: PETSC_ERR_MPI              = 98
214:       PetscErrorCode, parameter :: PETSC_ERR_RETURN           = 99

216:         character(len = 80) :: PETSC_NULL_CHARACTER = ''
217:         PetscInt PETSC_NULL_INTEGER, PETSC_NULL_INTEGER_ARRAY(1)
218:         PetscInt, pointer :: PETSC_NULL_INTEGER_POINTER(:)
219:         PetscScalar, pointer :: PETSC_NULL_SCALAR_POINTER(:)
220:         PetscFortranDouble PETSC_NULL_DOUBLE
221:         PetscScalar PETSC_NULL_SCALAR, PETSC_NULL_SCALAR_ARRAY(1)
222:         PetscReal PETSC_NULL_REAL, PETSC_NULL_REAL_ARRAY(1)
223:         PetscReal, pointer :: PETSC_NULL_REAL_POINTER(:)
224:         PetscBool PETSC_NULL_BOOL
225:         PetscEnum PETSC_NULL_ENUM
226:         MPI_Comm  PETSC_NULL_MPI_COMM
227: !
228: !     Basic math constants
229: !
230:         PetscReal PETSC_PI
231:         PetscReal PETSC_MAX_REAL
232:         PetscReal PETSC_MIN_REAL
233:         PetscReal PETSC_MACHINE_EPSILON
234:         PetscReal PETSC_SQRT_MACHINE_EPSILON
235:         PetscReal PETSC_SMALL
236:         PetscReal PETSC_INFINITY
237:         PetscReal PETSC_NINFINITY

239: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
240: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_CHARACTER
241: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER
242: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER_ARRAY
243: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER_POINTER
244: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR_POINTER
245: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL_POINTER
246: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_DOUBLE
247: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR
248: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR_ARRAY
249: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL
250: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL_ARRAY
251: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_BOOL
252: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_ENUM
253: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_MPI_COMM
254: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_PI
255: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_MAX_REAL
256: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_MIN_REAL
257: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_MACHINE_EPSILON
258: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_SQRT_MACHINE_EPSILON
259: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_SMALL
260: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_INFINITY
261: !DEC$ ATTRIBUTES DLLEXPORT::PETSC_NINFINITY
262: #endif

264:       type tPetscReal2d
265:         sequence
266:         PetscReal, dimension(:), pointer :: ptr
267:       end type tPetscReal2D

269:        end module

271: !     ------------------------------------------------------------------------

273:         module petscsys
274:         use,intrinsic :: iso_c_binding
275:         use petscsysdef

277: #include <../src/sys/ftn-mod/petscsys.h90>
278: #include <../src/sys/ftn-mod/petscviewer.h90>
279: #include <../ftn/sys/petscall.h90>

281:         interface PetscInitialize
282:           module procedure PetscInitializeWithHelp, PetscInitializeNoHelp, PetscInitializeNoArguments
283:         end interface

285:       interface PetscSetFortranBasePointers
286:          subroutine PetscSetFortranBasePointers(                        &
287:      &     PETSC_NULL_CHARACTER,          &
288:      &     PETSC_NULL_INTEGER,PETSC_NULL_SCALAR,                        &
289:      &     PETSC_NULL_DOUBLE,PETSC_NULL_REAL,                           &
290:      &     PETSC_NULL_BOOL,PETSC_NULL_ENUM,PETSC_NULL_FUNCTION,         &
291:      &     PETSC_NULL_MPI_COMM,                                         &
292:      &     PETSC_NULL_INTEGER_ARRAY,PETSC_NULL_SCALAR_ARRAY,            &
293:      &     PETSC_NULL_REAL_ARRAY, APETSC_NULL_INTEGER_POINTER,           &
294:      &     PETSC_NULL_SCALAR_POINTER, PETSC_NULL_REAL_POINTER)
295:           character(*) PETSC_NULL_CHARACTER
296:           PetscInt PETSC_NULL_INTEGER
297:           PetscScalar PETSC_NULL_SCALAR
298:           PetscFortranDouble PETSC_NULL_DOUBLE
299:           PetscReal PETSC_NULL_REAL
300:           PetscBool PETSC_NULL_BOOL
301:           PetscEnum PETSC_NULL_ENUM
302:           external PETSC_NULL_FUNCTION
303:           MPI_Comm PETSC_NULL_MPI_COMM
304:           PetscInt PETSC_NULL_INTEGER_ARRAY(*)
305:           PetscScalar PETSC_NULL_SCALAR_ARRAY(*)
306:           PetscReal PETSC_NULL_REAL_ARRAY(*)
307:           PetscInt, pointer :: APETSC_NULL_INTEGER_POINTER(:)
308:           PetscScalar, pointer :: PETSC_NULL_SCALAR_POINTER(:)
309:           PetscReal, pointer :: PETSC_NULL_REAL_POINTER(:)
310:          end subroutine PetscSetFortranBasePointers
311:       end interface

313:       interface PetscOptionsString
314:       subroutine PetscOptionsString(string, text, man, default, value, flg, ierr)
315:         character(*) string, text, man, default, value
316:         PetscBool flg
317:         PetscErrorCode ierr
318:       end subroutine PetscOptionsString
319:       end interface

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

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

483:       contains
484: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
485: !DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeWithHelp
486: #endif
487:       subroutine PetscInitializeWithHelp(filename,help,ierr)
488:           character(len=*)           :: filename
489:           character(len=*)           :: help
490:           PetscErrorCode             :: ierr

492:           if (filename .ne. PETSC_NULL_CHARACTER) then
493:              call PetscInitializeF(trim(filename),help,ierr)
494:              CHKERRQ(ierr)
495:           else
496:              call PetscInitializeF(filename,help,ierr)
497:              CHKERRQ(ierr)
498:           endif
499:         end subroutine PetscInitializeWithHelp

501: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
502: !DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeNoHelp
503: #endif
504:         subroutine PetscInitializeNoHelp(filename,ierr)
505:           character(len=*)           :: filename
506:           PetscErrorCode             :: ierr

508:           if (filename .ne. PETSC_NULL_CHARACTER) then
509:              call PetscInitializeF(trim(filename),PETSC_NULL_CHARACTER,ierr)
510:              CHKERRQ(ierr)
511:           else
512:              call PetscInitializeF(filename,PETSC_NULL_CHARACTER,ierr)
513:              CHKERRQ(ierr)
514:           endif
515:         end subroutine PetscInitializeNoHelp

517: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
518: !DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeNoArguments
519: #endif
520:         subroutine PetscInitializeNoArguments(ierr)
521:           PetscErrorCode             :: ierr

523:           call PetscInitializeF(PETSC_NULL_CHARACTER,PETSC_NULL_CHARACTER,ierr)
524:           CHKERRQ(ierr)
525:           end subroutine PetscInitializeNoArguments

527: #include <../ftn/sys/petscall.hf90>
528:         end module

530:         Subroutine F90ArraySetRealPointer(array, sz, j, T)
531:           use petscsysdef
532:           PetscInt                j,sz
533:           PetscReal, target    :: array(1:sz)
534:           PetscReal2d, pointer :: T(:)
535:           T(j+1)%ptr=>array
536:         End Subroutine
537: #if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
538: !DEC$ ATTRIBUTES DLLEXPORT:: F90ArraySetRealPointer
539: #endif

541: !      ------------------------------------------------------------------------
542: !      TODO: generate the modules below by looping over
543: !            ftn/sys/XXX.h90
544: !            and skiping those in petscall.h

546:         module petscbag
547:         use petscsys
548: #include <../include/petsc/finclude/petscbag.h>
549: #include <../ftn/sys/petscbag.h>
550: #include <../ftn/sys/petscbag.h90>
551:         contains

553: #include <../ftn/sys/petscbag.hf90>
554:         end module

556: !     ------------------------------------------------------------------------

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

565: #include <../ftn/sys/petscbm.hf90>
566:        end module

568: !     ------------------------------------------------------------------------

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

581: !     ------------------------------------------------------------------------

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

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

625:       contains

627: #include <../ftn/sys/petscdraw.hf90>
628:       end module

630: !     ------------------------------------------------------------------------

632:         subroutine PetscSetCOMM(c1,c2)
633:         use petscmpi, only: PETSC_COMM_WORLD,PETSC_COMM_SELF

635:         implicit none
636:         MPI_Comm c1,c2

638:         PETSC_COMM_WORLD    = c1
639:         PETSC_COMM_SELF     = c2
640:         end

642:         subroutine PetscGetCOMM(c1)
643:         use petscmpi, only: PETSC_COMM_WORLD
644:         implicit none
645:         MPI_Comm c1

647:         c1 = PETSC_COMM_WORLD
648:         end

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

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

666:         subroutine PetscSetModuleBlockMPI(freal,fscalar,fsum,finteger)
667:         use petscmpi, only: MPIU_REAL,MPIU_SUM,MPIU_SCALAR,MPIU_INTEGER
668:         implicit none

670:         integer4 freal,fscalar,fsum,finteger

672:         MPIU_REAL    = freal
673:         MPIU_SCALAR  = fscalar
674:         MPIU_SUM     = fsum
675:         MPIU_INTEGER = finteger

677:         end

679:         subroutine PetscSetModuleBlockNumeric(pi,maxreal,minreal,eps,       &
680:      &     seps,small,pinf,pninf)
681:         use petscsys, only: PETSC_PI,PETSC_MAX_REAL,PETSC_MIN_REAL,&
682:              PETSC_MACHINE_EPSILON,PETSC_SQRT_MACHINE_EPSILON,&
683:              PETSC_SMALL,PETSC_INFINITY,PETSC_NINFINITY
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

698:         end