xref: /petsc/include/petsc.h (revision cdd073118195bdfb4f6ccdf5f5acb9e32b31769a)
1 /* $Id: petsc.h,v 1.44 1995/07/21 23:39:45 curfman Exp curfman $ */
2 
3 #if !defined(__PETSC_PACKAGE)
4 #define __PETSC_PACKAGE
5 
6 #define PETSC_VERSION_NUMBER "PETSc Version 2.0.Beta.6 Released ?, 1995."
7 
8 #include <stdio.h>
9 #if defined(PARCH_sun4)
10 int fprintf(FILE*,char*,...);
11 int printf(char*,...);
12 int fflush(FILE*);
13 int fclose(FILE*);
14 #endif
15 
16 /* MPI interface */
17 #include "mpi.h"
18 #include "mpiu.h"
19 
20 #if defined(PETSC_COMPLEX)
21 /* work around for bug in alpha g++ compiler */
22 #if defined(PARCH_alpha)
23 #define hypot(a,b) (double) sqrt((a)*(a)+(b)*(b))
24 /* extern double hypot(double,double); */
25 #endif
26 #include <complex.h>
27 #define PETSCREAL(a) real(a)
28 #define Scalar       complex
29 #else
30 #define PETSCREAL(a) a
31 #define Scalar       double
32 #endif
33 
34 extern void *(*PetscMalloc)(unsigned int,int,char*);
35 extern int  (*PetscFree)(void *,int,char*);
36 #define PETSCMALLOC(a)       (*PetscMalloc)(a,__LINE__,__FILE__)
37 #define PETSCFREE(a)         (*PetscFree)(a,__LINE__,__FILE__)
38 extern int  PetscSetMalloc(void *(*)(unsigned int,int,char*),
39                            int (*)(void *,int,char*));
40 extern int  Trdump(FILE *);
41 extern int  TrGetMaximumAllocated(double*);
42 
43 #define PETSCNEW(A)         (A*) PETSCMALLOC(sizeof(A))
44 #define PETSCMEMCPY(a,b,n)   memcpy((char*)(a),(char*)(b),n)
45 #define PETSCMEMSET(a,b,n)   memset((char*)(a),(int)(b),n)
46 #include <memory.h>
47 
48 /*  Macros for error checking */
49 #if !defined(__DIR__)
50 #define __DIR__ 0
51 #endif
52 #if defined(PETSC_DEBUG)
53 #define SETERRQ(n,s)     {return PetscError(__LINE__,__DIR__,__FILE__,s,n);}
54 #define SETERRA(n,s)    \
55                 {int _ierr = PetscError(__LINE__,__DIR__,__FILE__,s,n);\
56                  MPI_Abort(MPI_COMM_WORLD,_ierr);}
57 #define CHKERRQ(n)       {if (n) SETERRQ(n,(char *)0);}
58 #define CHKERRA(n)      {if (n) SETERRA(n,(char *)0);}
59 #define CHKPTRQ(p)       if (!p) SETERRQ(1,"No memory");
60 #define CHKPTRA(p)      if (!p) SETERRA(1,"No memory");
61 #else
62 #define SETERRQ(n,s)     {return PetscError(__LINE__,__DIR__,__FILE__,s,n);}
63 #define SETERRA(n,s)    \
64                 {int _ierr = PetscError(__LINE__,__DIR__,__FILE__,s,n);\
65                  MPI_Abort(MPI_COMM_WORLD,_ierr);}
66 #define CHKERRQ(n)       {if (n) SETERRQ(n,(char *)0);}
67 #define CHKERRA(n)      {if (n) SETERRA(n,(char *)0);}
68 #define CHKPTRQ(p)       if (!p) SETERRQ(1,"No memory");
69 #define CHKPTRA(p)      if (!p) SETERRA(1,"No memory");
70 #endif
71 
72 typedef struct _PetscObject* PetscObject;
73 #define PETSC_COOKIE         0x12121212
74 #define PETSC_DECIDE         -1
75 #define PETSC_DEFAULT        0
76 
77 typedef enum { PETSC_FALSE, PETSC_TRUE } PetscTruth;
78 
79 #include "viewer.h"
80 #include "options.h"
81 
82 extern int PetscInitialize(int*,char***,char*,char*);
83 extern int PetscFinalize();
84 
85 extern int PetscObjectDestroy(PetscObject);
86 extern int PetscObjectExists(PetscObject,int*);
87 extern int PetscObjectGetComm(PetscObject,MPI_Comm *comm);
88 extern int PetscObjectSetName(PetscObject,char*);
89 extern int PetscObjectGetName(PetscObject,char**);
90 
91 extern int PetscDefaultErrorHandler(int,char*,char*,char*,int,void*);
92 extern int PetscAbortErrorHandler(int,char*,char*,char*,int,void* );
93 extern int PetscAttachDebuggerErrorHandler(int,char*,char*,char*,int,void*);
94 extern int PetscError(int,char*,char*,char*,int);
95 extern int PetscPushErrorHandler(int
96                          (*handler)(int,char*,char*,char*,int,void*),void* );
97 extern int PetscPopErrorHandler();
98 
99 extern int PetscSetDebugger(char *,int,char *);
100 extern int PetscAttachDebugger();
101 
102 extern int PetscDefaultSignalHandler(int,void*);
103 extern int PetscPushSignalHandler(int (*)(int,void *),void*);
104 extern int PetscPopSignalHandler();
105 extern int PetscSetFPTrap(int);
106 #define FP_TRAP_OFF    0
107 #define FP_TRAP_ON     1
108 #define FP_TRAP_ALWAYS 2
109 
110 /*
111    Definitions used for the Fortran interface:
112    FORTRANCAPS:       Names are uppercase, no trailing underscore
113    FORTRANUNDERSCORE: Names are lowercase, trailing underscore
114  */
115 #if defined(PARCH_cray) || defined(PARCH_NCUBE) || defined(PARCH_t3d)
116 #define FORTRANCAPS
117 #elif !defined(PARCH_rs6000) && !defined(PARCH_NeXT) && !defined(PARCH_hpux)
118 #define FORTRANUNDERSCORE
119 #endif
120 
121 /* Global flop counter */
122 extern double _TotalFlops;
123 #if defined(PETSC_LOG)
124 #define PLogFlops(n) {_TotalFlops += n;}
125 #else
126 #define PLogFlops(n)
127 #endif
128 
129 /*M
130    PLogFlops - Adds floating point operations to the global counter.
131 
132    Input Parameter:
133 .  f - flop counter
134 
135    Synopsis:
136    PLogFlops(int f)
137 
138    Notes:
139    A global counter logs all PETSc flop counts.  The user can use
140    PLogFlops() to increment this counter to include flops for the
141    application code.
142 
143    PETSc automatically logs library events if the code has been
144    compiled with -DPETSC_LOG (which is the default), and -log,
145    -log_summary, or -log_all are specified.  PLogFlops() is
146    intended for logging user flops to supplement this PETSc
147    information.
148 
149     Example of Usage:
150 $     #define USER_EVENT 75
151 $     PLogEventRegister(USER_EVENT,"User event");
152 $     PLogEventBegin(USER_EVENT,0,0,0,0);
153 $     [code segment to monitor]
154 $     PLogFlops(user_flops)
155 $     PLogEventEnd(USER_EVENT,0,0,0,0);
156 
157 .seealso:  PLogEventRegister(), PLogEventBegin(), PLogEventEnd()
158 
159 .keywords:  Petsc, log, flops, floating point operations
160 M*/
161 
162 extern int PLogPrint(MPI_Comm,FILE *);
163 extern int PLogBegin();
164 extern int PLogAllBegin();
165 extern int PLogDump(char*);
166 
167 #endif
168