xref: /petsc/include/petsc.h (revision 1a3481a4f86b15936ff2dcb29ec4403ee784c865)
1 /* $Id: petsc.h,v 1.43 1995/07/20 16:58:11 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 #if defined(PARCH_cray) || defined(PARCH_NCUBE) || defined(PARCH_t3d)
111 #define FORTRANCAPS
112 #elif !defined(PARCH_rs6000) && !defined(PARCH_NeXT) && !defined(PARCH_hpux)
113 #define FORTRANUNDERSCORE
114 #endif
115 
116 /* Global flop counter */
117 extern double _TotalFlops;
118 #if defined(PETSC_LOG)
119 #define PLogFlops(n) {_TotalFlops += n;}
120 #else
121 #define PLogFlops(n)
122 #endif
123 
124 /*M
125    PLogFlops - Adds floating point operations to the global counter.
126 
127    Input Parameter:
128 .  f - flop counter
129 
130    Synopsis:
131    PLogFlops(int f)
132 
133    Notes:
134    A global counter logs all PETSc flop counts.  The user can use
135    PLogFlops() to increment this counter to include flops for the
136    application code.
137 
138    PETSc automatically logs library events if the code has been
139    compiled with -DPETSC_LOG (which is the default), and -log,
140    -log_summary, or -log_all are specified.  PLogFlops() is
141    intended for logging user flops to supplement this PETSc
142    information.
143 
144     Example of Usage:
145 $     #define USER_EVENT 75
146 $     PLogEventRegister(USER_EVENT,"User event");
147 $     PLogEventBegin(USER_EVENT,0,0,0,0);
148 $     [code segment to monitor]
149 $     PLogFlops(user_flops)
150 $     PLogEventEnd(USER_EVENT,0,0,0,0);
151 
152 .seealso:  PLogEventRegister(), PLogEventBegin(), PLogEventEnd()
153 
154 .keywords:  Petsc, log, flops, floating point operations
155 M*/
156 
157 extern int PLogPrint(MPI_Comm,FILE *);
158 extern int PLogBegin();
159 extern int PLogAllBegin();
160 extern int PLogDump(char*);
161 
162 #endif
163