xref: /petsc/include/petsc.h (revision d9ff3d1bd4a4091bb027f3d8aef772bd6a8ece6e)
1 /* $Id: petsc.h,v 1.41 1995/07/14 13:49:30 curfman Exp bsmith $ */
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 
76 typedef enum { PETSC_FALSE, PETSC_TRUE } PetscTruth;
77 
78 #include "viewer.h"
79 #include "options.h"
80 
81 extern int PetscInitialize(int*,char***,char*,char*);
82 extern int PetscFinalize();
83 
84 extern int PetscObjectDestroy(PetscObject);
85 extern int PetscObjectGetComm(PetscObject,MPI_Comm *comm);
86 extern int PetscObjectSetName(PetscObject,char*);
87 extern int PetscObjectGetName(PetscObject,char**);
88 
89 extern int PetscDefaultErrorHandler(int,char*,char*,char*,int,void*);
90 extern int PetscAbortErrorHandler(int,char*,char*,char*,int,void* );
91 extern int PetscAttachDebuggerErrorHandler(int,char*,char*,char*,int,void*);
92 extern int PetscError(int,char*,char*,char*,int);
93 extern int PetscPushErrorHandler(int
94                          (*handler)(int,char*,char*,char*,int,void*),void* );
95 extern int PetscPopErrorHandler();
96 
97 extern int PetscSetDebugger(char *,int,char *);
98 extern int PetscAttachDebugger();
99 
100 extern int PetscDefaultSignalHandler(int,void*);
101 extern int PetscPushSignalHandler(int (*)(int,void *),void*);
102 extern int PetscPopSignalHandler();
103 extern int PetscSetFPTrap(int);
104 #define FP_TRAP_OFF    0
105 #define FP_TRAP_ON     1
106 #define FP_TRAP_ALWAYS 2
107 
108 #if defined(PARCH_cray) || defined(PARCH_NCUBE) || defined(PARCH_t3d)
109 #define FORTRANCAPS
110 #elif !defined(PARCH_rs6000) && !defined(PARCH_NeXT) && !defined(PARCH_hpux)
111 #define FORTRANUNDERSCORE
112 #endif
113 
114 /* Global flop counter */
115 extern double _TotalFlops;
116 #if defined(PETSC_LOG)
117 #define PLogFlops(n) {_TotalFlops += n;}
118 #else
119 #define PLogFlops(n)
120 #endif
121 
122 /*M
123    PLogFlops - Adds floating point operations to the global counter.
124 
125    Input Parameter:
126 .  f - flop counter
127 
128    Synopsis:
129    PLogFlops(int f)
130 
131    Notes:
132    A global counter logs all PETSc flop counts.  The user can use
133    PLogFlops() to increment this counter to include flops for the
134    application code.
135 
136    PETSc automatically logs library events if the code has been
137    compiled with -DPETSC_LOG (which is the default), and -log,
138    -log_summary, or -log_all are specified.  PLogFlops() is
139    intended for logging user flops to supplement this PETSc
140    information.
141 
142     Example of Usage:
143 $     #define USER_EVENT 75
144 $     PLogEventRegister(USER_EVENT,"User event");
145 $     PLogEventBegin(USER_EVENT,0,0,0,0);
146 $     [code segment to monitor]
147 $     PLogFlops(user_flops)
148 $     PLogEventEnd(USER_EVENT,0,0,0,0);
149 
150 .seealso:  PLogEventRegister(), PLogEventBegin(), PLogEventEnd()
151 
152 .keywords:  Petsc, log, flops, floating point operations
153 M*/
154 
155 extern int PLogPrint(MPI_Comm,FILE *);
156 extern int PLogBegin();
157 extern int PLogAllBegin();
158 extern int PLogDump(char*);
159 
160 #endif
161