xref: /petsc/src/sys/ftn-mod/petscsysmod.F90 (revision 03047865b8d8757cf1cf9cda45785c1537b01dc1)
16dd63270SBarry Smithmodule petscmpi
2fe66ebccSMartin Diehl  use, intrinsic :: ISO_C_binding
36dd63270SBarry Smith#include <petscconf.h>
46dd63270SBarry Smith#include "petsc/finclude/petscsys.h"
56dd63270SBarry Smith#if defined(PETSC_HAVE_MPIUNI)
66dd63270SBarry Smith  use mpiuni
76dd63270SBarry Smith#else
8b06eb4cdSBarry Smith#if defined(PETSC_HAVE_MPI_FTN_MODULE)
9b06eb4cdSBarry Smith  use PETSC_MPI_FTN_MODULE
106dd63270SBarry Smith#else
116dd63270SBarry Smith#include "mpif.h"
126dd63270SBarry Smith#endif
136dd63270SBarry Smith#endif
146dd63270SBarry Smith
15b06eb4cdSBarry Smith  MPIU_Datatype :: MPIU_REAL
16b06eb4cdSBarry Smith  MPIU_Datatype :: MPIU_SCALAR
17b06eb4cdSBarry Smith  MPIU_Datatype :: MPIU_INTEGER
18b06eb4cdSBarry Smith  MPIU_Op :: MPIU_SUM
196dd63270SBarry Smith
20b06eb4cdSBarry Smith  MPIU_Comm:: PETSC_COMM_WORLD
21b06eb4cdSBarry Smith  MPIU_Comm:: PETSC_COMM_SELF
226dd63270SBarry Smith
236dd63270SBarry Smith#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
246dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::MPIU_REAL
256dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::MPIU_SUM
266dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::MPIU_SCALAR
276dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::MPIU_INTEGER
286dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMM_SELF
296dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_COMM_WORLD
306dd63270SBarry Smith#endif
310f7a542fSMartin Diehlend module petscmpi
326dd63270SBarry Smith
336dd63270SBarry Smithmodule petscsysdef
34fe66ebccSMartin Diehl  use, intrinsic :: ISO_C_binding
356dd63270SBarry Smith  use petscmpi
360f7a542fSMartin Diehl  PetscReal, parameter :: PetscReal_Private = 1.0
3702c639afSMartin Diehl  integer, parameter   :: PETSC_REAL_KIND = kind(PetscReal_Private)
386dd63270SBarry Smith
39b06eb4cdSBarry Smith  PetscScalar, parameter :: PetscScalar_Private = (1.0, 0.0)
40b06eb4cdSBarry Smith  integer, parameter   :: PETSC_SCALAR_KIND = kind(PetscScalar_Private)
41b06eb4cdSBarry Smith
42b06eb4cdSBarry Smith  PetscInt, parameter :: PetscInt_Private = 1
43b06eb4cdSBarry Smith  integer, parameter   :: PETSC_INT_KIND = kind(PetscInt_Private)
44b06eb4cdSBarry Smith
45b06eb4cdSBarry Smith  PetscMPIInt, parameter :: PetscMPIInt_Private = 1
46b06eb4cdSBarry Smith  integer, parameter   :: PETSC_MPIINT_KIND = kind(PetscMPIInt_Private)
47b06eb4cdSBarry Smith
481dc74096SMartin Diehl  PetscBool, parameter :: PETSC_TRUE = .true._C_BOOL
491dc74096SMartin Diehl  PetscBool, parameter :: PETSC_FALSE = .false._C_BOOL
506dd63270SBarry Smith
516dd63270SBarry Smith  PetscInt, parameter :: PETSC_DECIDE = -1
52b06eb4cdSBarry Smith  PetscInt, parameter :: PETSC_DECIDE_INTEGER = -1_PETSC_INT_KIND
530f7a542fSMartin Diehl  PetscReal, parameter :: PETSC_DECIDE_REAL = -1.0_PETSC_REAL_KIND
546dd63270SBarry Smith#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
556dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE
566dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE_INTEGER
576dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DECIDE_REAL
586dd63270SBarry Smith#endif
596dd63270SBarry Smith
606dd63270SBarry Smith  PetscInt, parameter :: PETSC_DETERMINE = -1
616dd63270SBarry Smith  PetscInt, parameter :: PETSC_DETERMINE_INTEGER = -1
620f7a542fSMartin Diehl  PetscReal, parameter :: PETSC_DETERMINE_REAL = -1.0_PETSC_REAL_KIND
636dd63270SBarry Smith#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
646dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE
656dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE_INTEGER
666dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DETERMINE_REAL
676dd63270SBarry Smith#endif
686dd63270SBarry Smith
696dd63270SBarry Smith  PetscInt, parameter :: PETSC_CURRENT = -2
706dd63270SBarry Smith  PetscInt, parameter :: PETSC_CURRENT_INTEGER = -2
710f7a542fSMartin Diehl  PetscReal, parameter :: PETSC_CURRENT_REAL = -2.0_PETSC_REAL_KIND
726dd63270SBarry Smith#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
736dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT
746dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT_INTEGER
756dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_CURRENT_REAL
766dd63270SBarry Smith#endif
776dd63270SBarry Smith
786dd63270SBarry Smith  PetscInt, parameter :: PETSC_DEFAULT = -2
796dd63270SBarry Smith  PetscInt, parameter :: PETSC_DEFAULT_INTEGER = -2
800f7a542fSMartin Diehl  PetscReal, parameter :: PETSC_DEFAULT_REAL = -2.0_PETSC_REAL_KIND
816dd63270SBarry Smith#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
826dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT
836dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_INTEGER
846dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_DEFAULT_REAL
856dd63270SBarry Smith#endif
860f7a542fSMartin Diehl
876dd63270SBarry Smith  PetscFortranAddr, parameter :: PETSC_STDOUT = 0
886dd63270SBarry Smith!
896dd63270SBarry Smith!  PETSc DataTypes
906dd63270SBarry Smith!
916dd63270SBarry Smith#if defined(PETSC_USE_REAL_SINGLE)
926dd63270SBarry Smith#define PETSC_REAL PETSC_FLOAT
936dd63270SBarry Smith#elif defined(PETSC_USE_REAL___FLOAT128)
946dd63270SBarry Smith#define PETSC_REAL PETSC___FLOAT128
956dd63270SBarry Smith#else
966dd63270SBarry Smith#define PETSC_REAL PETSC_DOUBLE
976dd63270SBarry Smith#endif
986dd63270SBarry Smith#define PETSC_FORTRANADDR PETSC_LONG
996dd63270SBarry Smith
1006dd63270SBarry Smith! PETSc mathematics include file. Defines certain basic mathematical
1016dd63270SBarry Smith! constants and functions for working with single and double precision
1026dd63270SBarry Smith! floating point numbers as well as complex and integers.
1036dd63270SBarry Smith!
1046dd63270SBarry Smith! Representation of complex i
1050f7a542fSMartin Diehl  PetscComplex, parameter :: PETSC_i = (0.0_PETSC_REAL_KIND, 1.0_PETSC_REAL_KIND)
1066dd63270SBarry Smith
1076dd63270SBarry Smith! A PETSC_NULL_FUNCTION pointer
1086dd63270SBarry Smith!
1096dd63270SBarry Smith  external PETSC_NULL_FUNCTION
1106dd63270SBarry Smith!
1116dd63270SBarry Smith! Possible arguments to PetscPushErrorHandler()
1126dd63270SBarry Smith!
1136dd63270SBarry Smith  external PETSCTRACEBACKERRORHANDLER
1146dd63270SBarry Smith  external PETSCABORTERRORHANDLER
1156dd63270SBarry Smith  external PETSCEMACSCLIENTERRORHANDLER
1166dd63270SBarry Smith  external PETSCATTACHDEBUGGERERRORHANDLER
1176dd63270SBarry Smith  external PETSCIGNOREERRORHANDLER
1186dd63270SBarry Smith!
1196dd63270SBarry Smith  external PetscIsInfOrNanScalar
1206dd63270SBarry Smith  external PetscIsInfOrNanReal
1216dd63270SBarry Smith  PetscBool PetscIsInfOrNanScalar
1226dd63270SBarry Smith  PetscBool PetscIsInfOrNanReal
1236dd63270SBarry Smith
1246dd63270SBarry Smith#include <../ftn/sys/petscall.h>
1256dd63270SBarry Smith
1266dd63270SBarry Smith  PetscViewer, parameter :: PETSC_VIEWER_STDOUT_SELF = tPetscViewer(9)
1276dd63270SBarry Smith  PetscViewer, parameter :: PETSC_VIEWER_DRAW_WORLD = tPetscViewer(4)
1286dd63270SBarry Smith  PetscViewer, parameter :: PETSC_VIEWER_DRAW_SELF = tPetscViewer(5)
1296dd63270SBarry Smith  PetscViewer, parameter :: PETSC_VIEWER_SOCKET_WORLD = tPetscViewer(6)
1306dd63270SBarry Smith  PetscViewer, parameter :: PETSC_VIEWER_SOCKET_SELF = tPetscViewer(7)
1316dd63270SBarry Smith  PetscViewer, parameter :: PETSC_VIEWER_STDOUT_WORLD = tPetscViewer(8)
1326dd63270SBarry Smith  PetscViewer, parameter :: PETSC_VIEWER_STDERR_WORLD = tPetscViewer(10)
1336dd63270SBarry Smith  PetscViewer, parameter :: PETSC_VIEWER_STDERR_SELF = tPetscViewer(11)
1346dd63270SBarry Smith  PetscViewer, parameter :: PETSC_VIEWER_BINARY_WORLD = tPetscViewer(12)
1356dd63270SBarry Smith  PetscViewer, parameter :: PETSC_VIEWER_BINARY_SELF = tPetscViewer(13)
1366dd63270SBarry Smith  PetscViewer, parameter :: PETSC_VIEWER_MATLAB_WORLD = tPetscViewer(14)
1376dd63270SBarry Smith  PetscViewer, parameter :: PETSC_VIEWER_MATLAB_SELF = tPetscViewer(15)
1386dd63270SBarry Smith
1396dd63270SBarry Smith  PetscViewer PETSC_VIEWER_STDOUT_
1406dd63270SBarry Smith  PetscViewer PETSC_VIEWER_DRAW_
1416dd63270SBarry Smith  external PETSC_VIEWER_STDOUT_
1426dd63270SBarry Smith  external PETSC_VIEWER_DRAW_
1436dd63270SBarry Smith  external PetscViewerAndFormatDestroy
1446dd63270SBarry Smith
1456dd63270SBarry Smith#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
1466dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDOUT_SELF
1476dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_DRAW_WORLD
1486dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_DRAW_SELF
1496dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_SOCKET_WORLD
1506dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_SOCKET_SELF
1516dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDOUT_WORLD
1526dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDERR_WORLD
1536dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_STDERR_SELF
1546dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_BINARY_WORLD
1556dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_BINARY_SELF
1566dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_MATLAB_WORLD
1576dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_VIEWER_MATLAB_SELF
1586dd63270SBarry Smith#endif
1596dd63270SBarry Smith
1606dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_MEM = 55
1616dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_SUP = 56
1626dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_SUP_SYS = 57
1636dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ORDER = 58
1646dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_SIG = 59
1656dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_FP = 72
1666dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_COR = 74
1676dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_LIB = 76
1686dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_PLIB = 77
1696dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_MEMC = 78
1706dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_CONV_FAILED = 82
1716dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_USER = 83
1726dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_SYS = 88
1736dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_POINTER = 70
1746dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_MPI_LIB_INCOMP = 87
1756dd63270SBarry Smith
1766dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_SIZ = 60
1776dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_IDN = 61
1786dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_WRONG = 62
1796dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_CORRUPT = 64
1806dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_OUTOFRANGE = 63
1816dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_BADPTR = 68
1826dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_NOTSAMETYPE = 69
1836dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_NOTSAMECOMM = 80
1846dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_WRONGSTATE = 73
1856dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_TYPENOTSET = 89
1866dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_INCOMP = 75
1876dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_NULL = 85
1886dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_ARG_UNKNOWN_TYPE = 86
1896dd63270SBarry Smith
1906dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_FILE_OPEN = 65
1916dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_FILE_READ = 66
1926dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_FILE_WRITE = 67
1936dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_FILE_UNEXPECTED = 79
1946dd63270SBarry Smith
1956dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_MAT_LU_ZRPVT = 71
1966dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_MAT_CH_ZRPVT = 81
1976dd63270SBarry Smith
1986dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_INT_OVERFLOW = 84
1996dd63270SBarry Smith
2006dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_FLOP_COUNT = 90
2016dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_NOT_CONVERGED = 91
2026dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_MISSING_FACTOR = 92
2036dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_OPT_OVERWRITE = 93
2046dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_WRONG_MPI_SIZE = 94
2056dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_USER_INPUT = 95
2066dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_GPU_RESOURCE = 96
2076dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_GPU = 97
2086dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_MPI = 98
2096dd63270SBarry Smith  PetscErrorCode, parameter :: PETSC_ERR_RETURN = 99
2106dd63270SBarry Smith
2116dd63270SBarry Smith  character(len=80) :: PETSC_NULL_CHARACTER = ''
2126dd63270SBarry Smith  PetscInt PETSC_NULL_INTEGER, PETSC_NULL_INTEGER_ARRAY(1)
2136dd63270SBarry Smith  PetscInt, pointer :: PETSC_NULL_INTEGER_POINTER(:)
2146dd63270SBarry Smith  PetscScalar, pointer :: PETSC_NULL_SCALAR_POINTER(:)
2156dd63270SBarry Smith  PetscFortranDouble PETSC_NULL_DOUBLE
2166dd63270SBarry Smith  PetscScalar PETSC_NULL_SCALAR, PETSC_NULL_SCALAR_ARRAY(1)
2176dd63270SBarry Smith  PetscReal PETSC_NULL_REAL, PETSC_NULL_REAL_ARRAY(1)
2186dd63270SBarry Smith  PetscReal, pointer :: PETSC_NULL_REAL_POINTER(:)
2196dd63270SBarry Smith  PetscBool PETSC_NULL_BOOL
2206dd63270SBarry Smith  PetscEnum PETSC_NULL_ENUM
221b06eb4cdSBarry Smith  MPIU_Comm PETSC_NULL_MPI_COMM
2226dd63270SBarry Smith!
2236dd63270SBarry Smith!     Basic math constants
2246dd63270SBarry Smith!
2256dd63270SBarry Smith  PetscReal PETSC_PI
2266dd63270SBarry Smith  PetscReal PETSC_MAX_REAL
2276dd63270SBarry Smith  PetscReal PETSC_MIN_REAL
2286dd63270SBarry Smith  PetscReal PETSC_MACHINE_EPSILON
2296dd63270SBarry Smith  PetscReal PETSC_SQRT_MACHINE_EPSILON
2306dd63270SBarry Smith  PetscReal PETSC_SMALL
2316dd63270SBarry Smith  PetscReal PETSC_INFINITY
2326dd63270SBarry Smith  PetscReal PETSC_NINFINITY
2336dd63270SBarry Smith
2346dd63270SBarry Smith#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
2356dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_CHARACTER
2366dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER
2376dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER_ARRAY
2386dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_INTEGER_POINTER
2396dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR_POINTER
2406dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL_POINTER
2416dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_DOUBLE
2426dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR
2436dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_SCALAR_ARRAY
2446dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL
2456dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_REAL_ARRAY
2466dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_BOOL
2476dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_ENUM
2486dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NULL_MPI_COMM
2496dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_PI
2506dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_MAX_REAL
2516dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_MIN_REAL
2526dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_MACHINE_EPSILON
2536dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_SQRT_MACHINE_EPSILON
2546dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_SMALL
2556dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_INFINITY
2566dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PETSC_NINFINITY
2576dd63270SBarry Smith#endif
2586dd63270SBarry Smith
2596dd63270SBarry Smith  type tPetscReal2d
2606dd63270SBarry Smith    sequence
2616dd63270SBarry Smith    PetscReal, dimension(:), pointer :: ptr
2626dd63270SBarry Smith  end type tPetscReal2D
2636dd63270SBarry Smith
2640f7a542fSMartin Diehlend module petscsysdef
2656dd63270SBarry Smith
2666dd63270SBarry Smithmodule petscsys
2670f7a542fSMartin Diehl  use, intrinsic :: ISO_C_binding
2686dd63270SBarry Smith  use petscsysdef
269*2a8381b2SBarry Smith  type(c_ptr) :: petscFtnCtx  ! used by automatically generated XXXGetContext() macros
2706dd63270SBarry Smith
2716dd63270SBarry Smith#include <../src/sys/ftn-mod/petscsys.h90>
2726dd63270SBarry Smith#include <../src/sys/ftn-mod/petscviewer.h90>
2736dd63270SBarry Smith#include <../ftn/sys/petscall.h90>
2746dd63270SBarry Smith
2756dd63270SBarry Smith  interface PetscInitialize
2766dd63270SBarry Smith    module procedure PetscInitializeWithHelp, PetscInitializeNoHelp, PetscInitializeNoArguments
2770f7a542fSMartin Diehl  end interface PetscInitialize
2786dd63270SBarry Smith
2790f7a542fSMartin Diehl  interface
2806dd63270SBarry Smith    subroutine PetscSetFortranBasePointers( &
2810f7a542fSMartin Diehl      PETSC_NULL_CHARACTER, &
2820f7a542fSMartin Diehl      PETSC_NULL_INTEGER, PETSC_NULL_SCALAR, &
2830f7a542fSMartin Diehl      PETSC_NULL_DOUBLE, PETSC_NULL_REAL, &
2840f7a542fSMartin Diehl      PETSC_NULL_BOOL, PETSC_NULL_ENUM, PETSC_NULL_FUNCTION, &
2850f7a542fSMartin Diehl      PETSC_NULL_MPI_COMM, &
2860f7a542fSMartin Diehl      PETSC_NULL_INTEGER_ARRAY, PETSC_NULL_SCALAR_ARRAY, &
2870f7a542fSMartin Diehl      PETSC_NULL_REAL_ARRAY, APETSC_NULL_INTEGER_POINTER, &
2880f7a542fSMartin Diehl      PETSC_NULL_SCALAR_POINTER, PETSC_NULL_REAL_POINTER)
289fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
290b06eb4cdSBarry Smith      use petscmpi
2916dd63270SBarry Smith      character(*) PETSC_NULL_CHARACTER
2926dd63270SBarry Smith      PetscInt PETSC_NULL_INTEGER
2936dd63270SBarry Smith      PetscScalar PETSC_NULL_SCALAR
2946dd63270SBarry Smith      PetscFortranDouble PETSC_NULL_DOUBLE
2956dd63270SBarry Smith      PetscReal PETSC_NULL_REAL
2966dd63270SBarry Smith      PetscBool PETSC_NULL_BOOL
2976dd63270SBarry Smith      PetscEnum PETSC_NULL_ENUM
2986dd63270SBarry Smith      external PETSC_NULL_FUNCTION
299b06eb4cdSBarry Smith      MPIU_Comm PETSC_NULL_MPI_COMM
3006dd63270SBarry Smith      PetscInt PETSC_NULL_INTEGER_ARRAY(*)
3016dd63270SBarry Smith      PetscScalar PETSC_NULL_SCALAR_ARRAY(*)
3026dd63270SBarry Smith      PetscReal PETSC_NULL_REAL_ARRAY(*)
3036dd63270SBarry Smith      PetscInt, pointer :: APETSC_NULL_INTEGER_POINTER(:)
3046dd63270SBarry Smith      PetscScalar, pointer :: PETSC_NULL_SCALAR_POINTER(:)
3056dd63270SBarry Smith      PetscReal, pointer :: PETSC_NULL_REAL_POINTER(:)
3066dd63270SBarry Smith    end subroutine PetscSetFortranBasePointers
3076dd63270SBarry Smith
3086dd63270SBarry Smith    subroutine PetscOptionsString(string, text, man, default, value, flg, ierr)
309fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
3106dd63270SBarry Smith      character(*) string, text, man, default, value
3116dd63270SBarry Smith      PetscBool flg
3126dd63270SBarry Smith      PetscErrorCode ierr
3136dd63270SBarry Smith    end subroutine PetscOptionsString
3146dd63270SBarry Smith  end interface
3156dd63270SBarry Smith
3160f7a542fSMartin Diehl  interface petscbinaryread
3176dd63270SBarry Smith    subroutine petscbinaryreadcomplex(fd, data, num, count, type, z)
318fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
3196dd63270SBarry Smith      import ePetscDataType
3206dd63270SBarry Smith      integer4 fd
3216dd63270SBarry Smith      PetscComplex data(*)
3226dd63270SBarry Smith      PetscInt num
3236dd63270SBarry Smith      PetscInt count
3246dd63270SBarry Smith      PetscDataType type
3256dd63270SBarry Smith      PetscErrorCode z
3260f7a542fSMartin Diehl    end subroutine petscbinaryreadcomplex
3276dd63270SBarry Smith    subroutine petscbinaryreadreal(fd, data, num, count, type, z)
328fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
3296dd63270SBarry Smith      import ePetscDataType
3306dd63270SBarry Smith      integer4 fd
3316dd63270SBarry Smith      PetscReal data(*)
3326dd63270SBarry Smith      PetscInt num
3336dd63270SBarry Smith      PetscInt count
3346dd63270SBarry Smith      PetscDataType type
3356dd63270SBarry Smith      PetscErrorCode z
3360f7a542fSMartin Diehl    end subroutine petscbinaryreadreal
3376dd63270SBarry Smith    subroutine petscbinaryreadint(fd, data, num, count, type, z)
338fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
3396dd63270SBarry Smith      import ePetscDataType
3406dd63270SBarry Smith      integer4 fd
3416dd63270SBarry Smith      PetscInt data(*)
3426dd63270SBarry Smith      PetscInt num
3436dd63270SBarry Smith      PetscInt count
3446dd63270SBarry Smith      PetscDataType type
3456dd63270SBarry Smith      PetscErrorCode z
3460f7a542fSMartin Diehl    end subroutine petscbinaryreadint
3476dd63270SBarry Smith    subroutine petscbinaryreadcomplex1(fd, data, num, count, type, z)
348fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
3496dd63270SBarry Smith      import ePetscDataType
3506dd63270SBarry Smith      integer4 fd
3516dd63270SBarry Smith      PetscComplex data
3526dd63270SBarry Smith      PetscInt num
3536dd63270SBarry Smith      PetscInt count
3546dd63270SBarry Smith      PetscDataType type
3556dd63270SBarry Smith      PetscErrorCode z
3560f7a542fSMartin Diehl    end subroutine petscbinaryreadcomplex1
3576dd63270SBarry Smith    subroutine petscbinaryreadreal1(fd, data, num, count, type, z)
358fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
3596dd63270SBarry Smith      import ePetscDataType
3606dd63270SBarry Smith      integer4 fd
3616dd63270SBarry Smith      PetscReal data
3626dd63270SBarry Smith      PetscInt num
3636dd63270SBarry Smith      PetscInt count
3646dd63270SBarry Smith      PetscDataType type
3656dd63270SBarry Smith      PetscErrorCode z
3660f7a542fSMartin Diehl    end subroutine petscbinaryreadreal1
3676dd63270SBarry Smith    subroutine petscbinaryreadint1(fd, data, num, count, type, z)
368fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
3696dd63270SBarry Smith      import ePetscDataType
3706dd63270SBarry Smith      integer4 fd
3716dd63270SBarry Smith      PetscInt data
3726dd63270SBarry Smith      PetscInt num
3736dd63270SBarry Smith      PetscInt count
3746dd63270SBarry Smith      PetscDataType type
3756dd63270SBarry Smith      PetscErrorCode z
3760f7a542fSMartin Diehl    end subroutine petscbinaryreadint1
3776dd63270SBarry Smith    subroutine petscbinaryreadcomplexcnt(fd, data, num, count, type, z)
378fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
3796dd63270SBarry Smith      import ePetscDataType
3806dd63270SBarry Smith      integer4 fd
3816dd63270SBarry Smith      PetscComplex data(*)
3826dd63270SBarry Smith      PetscInt num
3836dd63270SBarry Smith      PetscInt count(1)
3846dd63270SBarry Smith      PetscDataType type
3856dd63270SBarry Smith      PetscErrorCode z
3860f7a542fSMartin Diehl    end subroutine petscbinaryreadcomplexcnt
3876dd63270SBarry Smith    subroutine petscbinaryreadrealcnt(fd, data, num, count, type, z)
388fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
3896dd63270SBarry Smith      import ePetscDataType
3906dd63270SBarry Smith      integer4 fd
3916dd63270SBarry Smith      PetscReal data(*)
3926dd63270SBarry Smith      PetscInt num
3936dd63270SBarry Smith      PetscInt count(1)
3946dd63270SBarry Smith      PetscDataType type
3956dd63270SBarry Smith      PetscErrorCode z
3960f7a542fSMartin Diehl    end subroutine petscbinaryreadrealcnt
3976dd63270SBarry Smith    subroutine petscbinaryreadintcnt(fd, data, num, count, type, z)
398fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
3996dd63270SBarry Smith      import ePetscDataType
4006dd63270SBarry Smith      integer4 fd
4016dd63270SBarry Smith      PetscInt data(*)
4026dd63270SBarry Smith      PetscInt num
4036dd63270SBarry Smith      PetscInt count(1)
4046dd63270SBarry Smith      PetscDataType type
4056dd63270SBarry Smith      PetscErrorCode z
4060f7a542fSMartin Diehl    end subroutine petscbinaryreadintcnt
4076dd63270SBarry Smith    subroutine petscbinaryreadcomplex1cnt(fd, data, num, count, type, z)
408fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
4096dd63270SBarry Smith      import ePetscDataType
4106dd63270SBarry Smith      integer4 fd
4116dd63270SBarry Smith      PetscComplex data
4126dd63270SBarry Smith      PetscInt num
4136dd63270SBarry Smith      PetscInt count(1)
4146dd63270SBarry Smith      PetscDataType type
4156dd63270SBarry Smith      PetscErrorCode z
4160f7a542fSMartin Diehl    end subroutine petscbinaryreadcomplex1cnt
4176dd63270SBarry Smith    subroutine petscbinaryreadreal1cnt(fd, data, num, count, type, z)
418fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
4196dd63270SBarry Smith      import ePetscDataType
4206dd63270SBarry Smith      integer4 fd
4216dd63270SBarry Smith      PetscReal data
4226dd63270SBarry Smith      PetscInt num
4236dd63270SBarry Smith      PetscInt count(1)
4246dd63270SBarry Smith      PetscDataType type
4256dd63270SBarry Smith      PetscErrorCode z
4260f7a542fSMartin Diehl    end subroutine petscbinaryreadreal1cnt
4276dd63270SBarry Smith    subroutine petscbinaryreadint1cnt(fd, data, num, count, type, z)
428fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
4296dd63270SBarry Smith      import ePetscDataType
4306dd63270SBarry Smith      integer4 fd
4316dd63270SBarry Smith      PetscInt data
4326dd63270SBarry Smith      PetscInt num
4336dd63270SBarry Smith      PetscInt count(1)
4346dd63270SBarry Smith      PetscDataType type
4356dd63270SBarry Smith      PetscErrorCode z
4360f7a542fSMartin Diehl    end subroutine petscbinaryreadint1cnt
4370f7a542fSMartin Diehl  end interface petscbinaryread
4386dd63270SBarry Smith
4390f7a542fSMartin Diehl  interface petscbinarywrite
4406dd63270SBarry Smith    subroutine petscbinarywritecomplex(fd, data, num, type, z)
441fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
4426dd63270SBarry Smith      import ePetscDataType
4436dd63270SBarry Smith      integer4 fd
4446dd63270SBarry Smith      PetscComplex data(*)
4456dd63270SBarry Smith      PetscInt num
4466dd63270SBarry Smith      PetscDataType type
4476dd63270SBarry Smith      PetscErrorCode z
4480f7a542fSMartin Diehl    end subroutine petscbinarywritecomplex
4496dd63270SBarry Smith    subroutine petscbinarywritereal(fd, data, num, type, z)
450fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
4516dd63270SBarry Smith      import ePetscDataType
4526dd63270SBarry Smith      integer4 fd
4536dd63270SBarry Smith      PetscReal data(*)
4546dd63270SBarry Smith      PetscInt num
4556dd63270SBarry Smith      PetscDataType type
4566dd63270SBarry Smith      PetscErrorCode z
4570f7a542fSMartin Diehl    end subroutine petscbinarywritereal
4586dd63270SBarry Smith    subroutine petscbinarywriteint(fd, data, num, type, z)
459fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
4606dd63270SBarry Smith      import ePetscDataType
4616dd63270SBarry Smith      integer4 fd
4626dd63270SBarry Smith      PetscInt data(*)
4636dd63270SBarry Smith      PetscInt num
4646dd63270SBarry Smith      PetscDataType type
4656dd63270SBarry Smith      PetscErrorCode z
4660f7a542fSMartin Diehl    end subroutine petscbinarywriteint
4676dd63270SBarry Smith    subroutine petscbinarywritecomplex1(fd, data, num, type, z)
468fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
4696dd63270SBarry Smith      import ePetscDataType
4706dd63270SBarry Smith      integer4 fd
4716dd63270SBarry Smith      PetscComplex data
4726dd63270SBarry Smith      PetscInt num
4736dd63270SBarry Smith      PetscDataType type
4746dd63270SBarry Smith      PetscErrorCode z
4750f7a542fSMartin Diehl    end subroutine petscbinarywritecomplex1
4766dd63270SBarry Smith    subroutine petscbinarywritereal1(fd, data, num, type, z)
477fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
4786dd63270SBarry Smith      import ePetscDataType
4796dd63270SBarry Smith      integer4 fd
4806dd63270SBarry Smith      PetscReal data
4816dd63270SBarry Smith      PetscInt num
4826dd63270SBarry Smith      PetscDataType type
4836dd63270SBarry Smith      PetscErrorCode z
4840f7a542fSMartin Diehl    end subroutine petscbinarywritereal1
4856dd63270SBarry Smith    subroutine petscbinarywriteint1(fd, data, num, type, z)
486fe66ebccSMartin Diehl      use, intrinsic :: ISO_C_binding
4876dd63270SBarry Smith      import ePetscDataType
4886dd63270SBarry Smith      integer4 fd
4896dd63270SBarry Smith      PetscInt data
4906dd63270SBarry Smith      PetscInt num
4916dd63270SBarry Smith      PetscDataType type
4926dd63270SBarry Smith      PetscErrorCode z
4930f7a542fSMartin Diehl    end subroutine petscbinarywriteint1
4940f7a542fSMartin Diehl  end interface petscbinarywrite
4956dd63270SBarry Smith
4966dd63270SBarry Smithcontains
4976dd63270SBarry Smith#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
4986dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeWithHelp
4996dd63270SBarry Smith#endif
5006dd63270SBarry Smith  subroutine PetscInitializeWithHelp(filename, help, ierr)
5016dd63270SBarry Smith    character(len=*) :: filename
5026dd63270SBarry Smith    character(len=*) :: help
5036dd63270SBarry Smith    PetscErrorCode   :: ierr
5046dd63270SBarry Smith
5054820e4eaSBarry Smith    if (filename /= PETSC_NULL_CHARACTER) then
5066dd63270SBarry Smith      call PetscInitializeF(trim(filename), help, ierr)
5076dd63270SBarry Smith      CHKERRQ(ierr)
5086dd63270SBarry Smith    else
5096dd63270SBarry Smith      call PetscInitializeF(filename, help, ierr)
5106dd63270SBarry Smith      CHKERRQ(ierr)
5116dd63270SBarry Smith    end if
5126dd63270SBarry Smith  end subroutine PetscInitializeWithHelp
5136dd63270SBarry Smith
5146dd63270SBarry Smith#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
5156dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeNoHelp
5166dd63270SBarry Smith#endif
5176dd63270SBarry Smith  subroutine PetscInitializeNoHelp(filename, ierr)
5186dd63270SBarry Smith    character(len=*) :: filename
5196dd63270SBarry Smith    PetscErrorCode   :: ierr
5206dd63270SBarry Smith
5214820e4eaSBarry Smith    if (filename /= PETSC_NULL_CHARACTER) then
5226dd63270SBarry Smith      call PetscInitializeF(trim(filename), PETSC_NULL_CHARACTER, ierr)
5236dd63270SBarry Smith      CHKERRQ(ierr)
5246dd63270SBarry Smith    else
5256dd63270SBarry Smith      call PetscInitializeF(filename, PETSC_NULL_CHARACTER, ierr)
5266dd63270SBarry Smith      CHKERRQ(ierr)
5276dd63270SBarry Smith    end if
5286dd63270SBarry Smith  end subroutine PetscInitializeNoHelp
5296dd63270SBarry Smith
5306dd63270SBarry Smith#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
5316dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT::PetscInitializeNoArguments
5326dd63270SBarry Smith#endif
5336dd63270SBarry Smith  subroutine PetscInitializeNoArguments(ierr)
5346dd63270SBarry Smith    PetscErrorCode :: ierr
5356dd63270SBarry Smith
5366dd63270SBarry Smith    call PetscInitializeF(PETSC_NULL_CHARACTER, PETSC_NULL_CHARACTER, ierr)
5376dd63270SBarry Smith    CHKERRQ(ierr)
5386dd63270SBarry Smith  end subroutine PetscInitializeNoArguments
5396dd63270SBarry Smith
5406dd63270SBarry Smith#include <../ftn/sys/petscall.hf90>
5410f7a542fSMartin Diehlend module petscsys
5426dd63270SBarry Smith
5430f7a542fSMartin Diehlsubroutine F90ArraySetRealPointer(array, sz, j, T)
5446dd63270SBarry Smith  use petscsysdef
5450f7a542fSMartin Diehl  PetscInt :: j, sz
5466dd63270SBarry Smith  PetscReal, target    :: array(1:sz)
5476dd63270SBarry Smith  PetscReal2d, pointer :: T(:)
5480f7a542fSMartin Diehl
5496dd63270SBarry Smith  T(j + 1)%ptr => array
5500f7a542fSMartin Diehlend subroutine F90ArraySetRealPointer
5516dd63270SBarry Smith#if defined(_WIN32) && defined(PETSC_USE_SHARED_LIBRARIES)
5526dd63270SBarry Smith!DEC$ ATTRIBUTES DLLEXPORT:: F90ArraySetRealPointer
5536dd63270SBarry Smith#endif
5546dd63270SBarry Smith
5556dd63270SBarry Smith!TODO: generate the modules below by looping over
5566dd63270SBarry Smith!      ftn/sys/XXX.h90
557bfe80ac4SPierre Jolivet!      and skipping those in petscall.h
5586dd63270SBarry Smith
5596dd63270SBarry Smithmodule petscbag
5606dd63270SBarry Smith  use petscsys
5616dd63270SBarry Smith#include <../include/petsc/finclude/petscbag.h>
5626dd63270SBarry Smith#include <../ftn/sys/petscbag.h>
5636dd63270SBarry Smith#include <../ftn/sys/petscbag.h90>
5646dd63270SBarry Smithcontains
5656dd63270SBarry Smith#include <../ftn/sys/petscbag.hf90>
5660f7a542fSMartin Diehlend module petscbag
5676dd63270SBarry Smith
5686dd63270SBarry Smithmodule petscbm
5696dd63270SBarry Smith  use petscsys
5706dd63270SBarry Smith#include <../include/petsc/finclude/petscbm.h>
5716dd63270SBarry Smith#include <../ftn/sys/petscbm.h>
5726dd63270SBarry Smith#include <../ftn/sys/petscbm.h90>
5736dd63270SBarry Smithcontains
5746dd63270SBarry Smith
5756dd63270SBarry Smith#include <../ftn/sys/petscbm.hf90>
5760f7a542fSMartin Diehlend module petscbm
5776dd63270SBarry Smith
5786dd63270SBarry Smithmodule petscmatlab
5796dd63270SBarry Smith  use petscsys
5806dd63270SBarry Smith#include <../include/petsc/finclude/petscmatlab.h>
5816dd63270SBarry Smith#include <../ftn/sys/petscmatlab.h>
5826dd63270SBarry Smith#include <../ftn/sys/petscmatlab.h90>
5836dd63270SBarry Smith
5846dd63270SBarry Smithcontains
5856dd63270SBarry Smith
5866dd63270SBarry Smith#include <../ftn/sys/petscmatlab.hf90>
5870f7a542fSMartin Diehlend module petscmatlab
5886dd63270SBarry Smith
5896dd63270SBarry Smithmodule petscdraw
5906dd63270SBarry Smith  use petscsys
5916dd63270SBarry Smith#include <../include/petsc/finclude/petscdraw.h>
5926dd63270SBarry Smith#include <../ftn/sys/petscdraw.h>
5936dd63270SBarry Smith#include <../ftn/sys/petscdraw.h90>
5946dd63270SBarry Smith
5956dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_BASIC_COLORS = 33
5966dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_ROTATE = -1
5976dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_WHITE = 0
5986dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_BLACK = 1
5996dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_RED = 2
6006dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_GREEN = 3
6016dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_CYAN = 4
6026dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_BLUE = 5
6036dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_MAGENTA = 6
6046dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_AQUAMARINE = 7
6056dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_FORESTGREEN = 8
6066dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_ORANGE = 9
6076dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_VIOLET = 10
6086dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_BROWN = 11
6096dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_PINK = 12
6106dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_CORAL = 13
6116dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_GRAY = 14
6126dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_YELLOW = 15
6136dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_GOLD = 16
6146dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_LIGHTPINK = 17
6156dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_MEDIUMTURQUOISE = 18
6166dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_KHAKI = 19
6176dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_DIMGRAY = 20
6186dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_YELLOWGREEN = 21
6196dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_SKYBLUE = 22
6206dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_DARKGREEN = 23
6216dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_NAVYBLUE = 24
6226dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_SANDYBROWN = 25
6236dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_CADETBLUE = 26
6246dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_POWDERBLUE = 27
6256dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_DEEPPINK = 28
6266dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_THISTLE = 29
6276dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_LIMEGREEN = 30
6286dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_LAVENDERBLUSH = 31
6296dd63270SBarry Smith  PetscEnum, parameter :: PETSC_DRAW_PLUM = 32
6306dd63270SBarry Smith
6316dd63270SBarry Smithcontains
6326dd63270SBarry Smith
6336dd63270SBarry Smith#include <../ftn/sys/petscdraw.hf90>
6340f7a542fSMartin Diehlend module petscdraw
6356dd63270SBarry Smith
6366dd63270SBarry Smithsubroutine PetscSetCOMM(c1, c2)
637fe66ebccSMartin Diehl  use, intrinsic :: ISO_C_binding
638b06eb4cdSBarry Smith  use petscmpi
6396dd63270SBarry Smith
6406dd63270SBarry Smith  implicit none
641b06eb4cdSBarry Smith  MPIU_Comm c1, c2
6426dd63270SBarry Smith
6436dd63270SBarry Smith  PETSC_COMM_WORLD = c1
6446dd63270SBarry Smith  PETSC_COMM_SELF = c2
6456dd63270SBarry Smithend
6466dd63270SBarry Smith
6476dd63270SBarry Smithsubroutine PetscGetCOMM(c1)
648fe66ebccSMartin Diehl  use, intrinsic :: ISO_C_binding
649b06eb4cdSBarry Smith  use petscmpi
6506dd63270SBarry Smith  implicit none
651b06eb4cdSBarry Smith  MPIU_Comm c1
6526dd63270SBarry Smith
6536dd63270SBarry Smith  c1 = PETSC_COMM_WORLD
6540f7a542fSMartin Diehlend subroutine PetscGetCOMM
6556dd63270SBarry Smith
6566dd63270SBarry Smithsubroutine PetscSetModuleBlock()
657fe66ebccSMartin Diehl  use, intrinsic :: ISO_C_binding
6586dd63270SBarry Smith  use petscsys!, only: PETSC_NULL_CHARACTER,PETSC_NULL_INTEGER,&
6596dd63270SBarry Smith  !  PETSC_NULL_SCALAR,PETSC_NULL_DOUBLE,PETSC_NULL_REAL,&
6606dd63270SBarry Smith  !  PETSC_NULL_BOOL,PETSC_NULL_FUNCTION,PETSC_NULL_MPI_COMM
6616dd63270SBarry Smith  implicit none
6626dd63270SBarry Smith
6636dd63270SBarry Smith  call PetscSetFortranBasePointers(PETSC_NULL_CHARACTER, &
6640f7a542fSMartin Diehl                                   PETSC_NULL_INTEGER, PETSC_NULL_SCALAR, &
6650f7a542fSMartin Diehl                                   PETSC_NULL_DOUBLE, PETSC_NULL_REAL, &
6660f7a542fSMartin Diehl                                   PETSC_NULL_BOOL, PETSC_NULL_ENUM, PETSC_NULL_FUNCTION, &
6670f7a542fSMartin Diehl                                   PETSC_NULL_MPI_COMM, &
6680f7a542fSMartin Diehl                                   PETSC_NULL_INTEGER_ARRAY, PETSC_NULL_SCALAR_ARRAY, &
6690f7a542fSMartin Diehl                                   PETSC_NULL_REAL_ARRAY, PETSC_NULL_INTEGER_POINTER, &
6700f7a542fSMartin Diehl                                   PETSC_NULL_SCALAR_POINTER, PETSC_NULL_REAL_POINTER)
6710f7a542fSMartin Diehlend subroutine PetscSetModuleBlock
6726dd63270SBarry Smith
6736dd63270SBarry Smithsubroutine PetscSetModuleBlockMPI(freal, fscalar, fsum, finteger)
674fe66ebccSMartin Diehl  use, intrinsic :: ISO_C_binding
675b06eb4cdSBarry Smith  use petscmpi
6766dd63270SBarry Smith  implicit none
6776dd63270SBarry Smith
678b06eb4cdSBarry Smith  MPIU_Datatype freal, fscalar, finteger
679b06eb4cdSBarry Smith  MPIU_Op fsum
6806dd63270SBarry Smith
6816dd63270SBarry Smith  MPIU_REAL = freal
6826dd63270SBarry Smith  MPIU_SCALAR = fscalar
6836dd63270SBarry Smith  MPIU_SUM = fsum
6846dd63270SBarry Smith  MPIU_INTEGER = finteger
6850f7a542fSMartin Diehlend subroutine PetscSetModuleBlockMPI
6866dd63270SBarry Smith
6870f7a542fSMartin Diehlsubroutine PetscSetModuleBlockNumeric(pi, maxreal, minreal, eps, seps, small, pinf, pninf)
6886dd63270SBarry Smith  use petscsys, only: PETSC_PI, PETSC_MAX_REAL, PETSC_MIN_REAL, &
6896dd63270SBarry Smith                      PETSC_MACHINE_EPSILON, PETSC_SQRT_MACHINE_EPSILON, &
6906dd63270SBarry Smith                      PETSC_SMALL, PETSC_INFINITY, PETSC_NINFINITY
691fe66ebccSMartin Diehl  use, intrinsic :: ISO_C_binding
6926dd63270SBarry Smith  implicit none
6936dd63270SBarry Smith
6946dd63270SBarry Smith  PetscReal pi, maxreal, minreal, eps, seps
6956dd63270SBarry Smith  PetscReal small, pinf, pninf
6966dd63270SBarry Smith
6976dd63270SBarry Smith  PETSC_PI = pi
6986dd63270SBarry Smith  PETSC_MAX_REAL = maxreal
6996dd63270SBarry Smith  PETSC_MIN_REAL = minreal
7006dd63270SBarry Smith  PETSC_MACHINE_EPSILON = eps
7016dd63270SBarry Smith  PETSC_SQRT_MACHINE_EPSILON = seps
7026dd63270SBarry Smith  PETSC_SMALL = small
7036dd63270SBarry Smith  PETSC_INFINITY = pinf
7046dd63270SBarry Smith  PETSC_NINFINITY = pninf
7050f7a542fSMartin Diehlend subroutine PetscSetModuleBlockNumeric
706