xref: /petsc/include/petsc.h (revision d41b535ce697fb9f07710448d80fe4a31ec5f262)
1*d41b535cSLois Curfman McInnes /* $Id: petsc.h,v 1.37 1995/07/12 04:02:40 curfman Exp curfman $ */
22eac72dbSBarry Smith 
32eac72dbSBarry Smith #if !defined(__PETSC_PACKAGE)
42eac72dbSBarry Smith #define __PETSC_PACKAGE
52eac72dbSBarry Smith 
6779eefb8SBarry Smith #define PETSC_VERSION_NUMBER "PETSc Version 2.0.Beta.5 Released ?, 1995."
77e59f0e8SBarry Smith 
8f0479e8cSBarry Smith #include <stdio.h>
928988994SBarry Smith #if defined(PARCH_sun4)
106abc6512SBarry Smith int fprintf(FILE*,char*,...);
116abc6512SBarry Smith int printf(char*,...);
126abc6512SBarry Smith int fflush(FILE*);
136abc6512SBarry Smith int fclose(FILE*);
1428988994SBarry Smith #endif
15f0479e8cSBarry Smith 
16f0479e8cSBarry Smith /* MPI interface */
17f0479e8cSBarry Smith #include "mpi.h"
187f813858SBarry Smith #include "mpiu.h"
19f0479e8cSBarry Smith 
20c6a45a97SBarry Smith #if defined(PETSC_COMPLEX)
21c6a45a97SBarry Smith /* work around for bug in alpha g++ compiler */
22c6a45a97SBarry Smith #if defined(PARCH_alpha)
23c6a45a97SBarry Smith #define hypot(a,b) (double) sqrt((a)*(a)+(b)*(b))
24c6a45a97SBarry Smith /* extern double hypot(double,double); */
25c6a45a97SBarry Smith #endif
268ed539a5SBarry Smith #include <complex.h>
2720563c6bSBarry Smith #define PETSCREAL(a) real(a)
288ed539a5SBarry Smith #define Scalar       complex
298ed539a5SBarry Smith #else
3020563c6bSBarry Smith #define PETSCREAL(a) a
318ed539a5SBarry Smith #define Scalar       double
328ed539a5SBarry Smith #endif
338ed539a5SBarry Smith 
34d90ea2a1SBarry Smith extern void *(*PetscMalloc)(unsigned int,int,char*);
35d90ea2a1SBarry Smith extern int  (*PetscFree)(void *,int,char*);
3678b31e54SBarry Smith #define PETSCMALLOC(a)       (*PetscMalloc)(a,__LINE__,__FILE__)
3778b31e54SBarry Smith #define PETSCFREE(a)         (*PetscFree)(a,__LINE__,__FILE__)
387f813858SBarry Smith extern int  PetscSetMalloc(void *(*)(unsigned int,int,char*),
397f813858SBarry Smith                            int (*)(void *,int,char*));
407f813858SBarry Smith extern int  Trdump(FILE *);
41e9f47e53SBarry Smith extern int  TrGetMaximumAllocated(double*);
428ed539a5SBarry Smith 
4378b31e54SBarry Smith #define PETSCNEW(A)         (A*) PETSCMALLOC(sizeof(A))
4478b31e54SBarry Smith #define PETSCMEMCPY(a,b,n)   memcpy((char*)(a),(char*)(b),n)
4578b31e54SBarry Smith #define PETSCMEMSET(a,b,n)   memset((char*)(a),(int)(b),n)
4620563c6bSBarry Smith #include <memory.h>
472eac72dbSBarry Smith 
482eac72dbSBarry Smith /*  Macros for error checking */
49f0479e8cSBarry Smith #if !defined(__DIR__)
50f0479e8cSBarry Smith #define __DIR__ 0
51f0479e8cSBarry Smith #endif
5228988994SBarry Smith #if defined(PETSC_DEBUG)
5378b31e54SBarry Smith #define SETERRQ(n,s)     {return PetscError(__LINE__,__DIR__,__FILE__,s,n);}
54d6dfbf8fSBarry Smith #define SETERRA(n,s)    \
55d6dfbf8fSBarry Smith                 {int _ierr = PetscError(__LINE__,__DIR__,__FILE__,s,n);\
56d6dfbf8fSBarry Smith                  MPI_Abort(MPI_COMM_WORLD,_ierr);}
5778b31e54SBarry Smith #define CHKERRQ(n)       {if (n) SETERRQ(n,(char *)0);}
58d6dfbf8fSBarry Smith #define CHKERRA(n)      {if (n) SETERRA(n,(char *)0);}
5978b31e54SBarry Smith #define CHKPTRQ(p)       if (!p) SETERRQ(1,"No memory");
60d6dfbf8fSBarry Smith #define CHKPTRA(p)      if (!p) SETERRA(1,"No memory");
6128988994SBarry Smith #else
6278b31e54SBarry Smith #define SETERRQ(n,s)     {return PetscError(__LINE__,__DIR__,__FILE__,s,n);}
6328988994SBarry Smith #define SETERRA(n,s)    \
6428988994SBarry Smith                 {int _ierr = PetscError(__LINE__,__DIR__,__FILE__,s,n);\
6528988994SBarry Smith                  MPI_Abort(MPI_COMM_WORLD,_ierr);}
6678b31e54SBarry Smith #define CHKERRQ(n)       {if (n) SETERRQ(n,(char *)0);}
6728988994SBarry Smith #define CHKERRA(n)      {if (n) SETERRA(n,(char *)0);}
6878b31e54SBarry Smith #define CHKPTRQ(p)       if (!p) SETERRQ(1,"No memory");
6928988994SBarry Smith #define CHKPTRA(p)      if (!p) SETERRA(1,"No memory");
7028988994SBarry Smith #endif
712eac72dbSBarry Smith 
728ed539a5SBarry Smith typedef struct _PetscObject* PetscObject;
739e25ed09SBarry Smith #define PETSC_COOKIE         0x12121212
746b5873e3SBarry Smith #define PETSC_DECIDE         -1
75da69df5fSBarry Smith 
76ca9b4cbeSLois Curfman McInnes typedef enum { PETSC_FALSE, PETSC_TRUE } PetscTruth;
77ca9b4cbeSLois Curfman McInnes 
78da69df5fSBarry Smith #include "viewer.h"
798c8d4905SLois Curfman McInnes #include "options.h"
802eac72dbSBarry Smith 
81a0a59b22SBarry Smith extern int PetscInitialize(int*,char***,char*,char*);
82a0a59b22SBarry Smith extern int PetscFinalize();
83a0a59b22SBarry Smith 
84c60448a5SBarry Smith extern int PetscObjectDestroy(PetscObject);
857f223b93SBarry Smith extern int PetscObjectGetComm(PetscObject,MPI_Comm *comm);
86a5a9c739SBarry Smith extern int PetscObjectSetName(PetscObject,char*);
87a5a9c739SBarry Smith extern int PetscObjectGetName(PetscObject,char**);
882eac72dbSBarry Smith 
89f0479e8cSBarry Smith extern int PetscDefaultErrorHandler(int,char*,char*,char*,int,void*);
90f0479e8cSBarry Smith extern int PetscAbortErrorHandler(int,char*,char*,char*,int,void* );
91f0479e8cSBarry Smith extern int PetscAttachDebuggerErrorHandler(int,char*,char*,char*,int,void*);
92f0479e8cSBarry Smith extern int PetscError(int,char*,char*,char*,int);
93f0479e8cSBarry Smith extern int PetscPushErrorHandler(int
94f0479e8cSBarry Smith                          (*handler)(int,char*,char*,char*,int,void*),void* );
958ed539a5SBarry Smith extern int PetscPopErrorHandler();
968ed539a5SBarry Smith 
978ed539a5SBarry Smith extern int PetscSetDebugger(char *,int,char *);
988ed539a5SBarry Smith extern int PetscAttachDebugger();
998ed539a5SBarry Smith 
100f0479e8cSBarry Smith extern int PetscDefaultSignalHandler(int,void*);
101f0479e8cSBarry Smith extern int PetscPushSignalHandler(int (*)(int,void *),void*);
102f0479e8cSBarry Smith extern int PetscPopSignalHandler();
103f0479e8cSBarry Smith extern int PetscSetFPTrap(int);
1046b5873e3SBarry Smith #define FP_TRAP_OFF    0
1056b5873e3SBarry Smith #define FP_TRAP_ON     1
1066b5873e3SBarry Smith #define FP_TRAP_ALWAYS 2
107f97c0401SBarry Smith 
1088ed539a5SBarry Smith 
109602c2b74SBarry Smith #if defined(PARCH_cray) || defined(PARCH_NCUBE) || defined(PARCH_t3d)
1108ed539a5SBarry Smith #define FORTRANCAPS
111d90ea2a1SBarry Smith #elif !defined(PARCH_rs6000) && !defined(PARCH_NeXT) && !defined(PARCH_hpux)
1128ed539a5SBarry Smith #define FORTRANUNDERSCORE
1132eac72dbSBarry Smith #endif
1142eac72dbSBarry Smith 
1157857610eSBarry Smith /* Global flop counter */
1167857610eSBarry Smith extern double _TotalFlops;
1177857610eSBarry Smith #if defined(PETSC_LOG)
1187857610eSBarry Smith #define PLogFlops(n) {_TotalFlops += n;}
1197857610eSBarry Smith #else
1207857610eSBarry Smith #define PLogFlops(n)
1217857610eSBarry Smith #endif
122affa3d11SLois Curfman McInnes 
123affa3d11SLois Curfman McInnes /*M
124affa3d11SLois Curfman McInnes    PLogFlops - Adds floating point operations to the global counter.
125affa3d11SLois Curfman McInnes 
126affa3d11SLois Curfman McInnes    Input Parameter:
127affa3d11SLois Curfman McInnes .  f - flop counter
128affa3d11SLois Curfman McInnes 
129affa3d11SLois Curfman McInnes    Synopsis:
130affa3d11SLois Curfman McInnes    PLogFlops(int f)
131affa3d11SLois Curfman McInnes 
132affa3d11SLois Curfman McInnes    Notes:
133affa3d11SLois Curfman McInnes    A global counter logs all PETSc flop counts.  The user can use
134affa3d11SLois Curfman McInnes    PLogFlops() to increment this counter to include flops for the
135*d41b535cSLois Curfman McInnes    application code.
136affa3d11SLois Curfman McInnes 
137*d41b535cSLois Curfman McInnes    PETSc automatically logs library events if the code has been
138*d41b535cSLois Curfman McInnes    compiled with -DPETSC_LOG (which is the default), and -log,
139*d41b535cSLois Curfman McInnes    -log_summary, or -log_all are specified.  PLogFlops() is
140*d41b535cSLois Curfman McInnes    intended for logging user flops to supplement this PETSc
141*d41b535cSLois Curfman McInnes    information.
142*d41b535cSLois Curfman McInnes 
143*d41b535cSLois Curfman McInnes     Example of Usage:
144*d41b535cSLois Curfman McInnes $     #define USER_EVENT 75
145*d41b535cSLois Curfman McInnes $     PLogEventRegister(USER_EVENT,"User event");
146*d41b535cSLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
147*d41b535cSLois Curfman McInnes $     [code segment to monitor]
148*d41b535cSLois Curfman McInnes $     PLogFlops(user_flops)
149*d41b535cSLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
150*d41b535cSLois Curfman McInnes 
151*d41b535cSLois Curfman McInnes .seealso:  PLogEventRegister(), PLogEventBegin(), PLogEventEnd()
152affa3d11SLois Curfman McInnes 
153affa3d11SLois Curfman McInnes .keywords:  Petsc, log, flops, floating point operations
154affa3d11SLois Curfman McInnes M*/
155affa3d11SLois Curfman McInnes 
15606259719SBarry Smith extern int PLogPrint(MPI_Comm,FILE *);
15706259719SBarry Smith extern int PLogBegin();
15806259719SBarry Smith extern int PLogAllBegin();
15906259719SBarry Smith extern int PLogDump(char*);
1607857610eSBarry Smith 
1612eac72dbSBarry Smith #endif
162