xref: /petsc/include/petsc.h (revision 31b4149710c0cad529afa3bc18ab24f56387635f)
1*31b41497SLois Curfman McInnes /* $Id: petsc.h,v 1.44 1995/07/21 23:39:45 curfman Exp curfman $ */
22eac72dbSBarry Smith 
32eac72dbSBarry Smith #if !defined(__PETSC_PACKAGE)
42eac72dbSBarry Smith #define __PETSC_PACKAGE
52eac72dbSBarry Smith 
6670d96c7SBarry Smith #define PETSC_VERSION_NUMBER "PETSc Version 2.0.Beta.6 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
752fe66929SLois Curfman McInnes #define PETSC_DEFAULT        0
76da69df5fSBarry Smith 
77ca9b4cbeSLois Curfman McInnes typedef enum { PETSC_FALSE, PETSC_TRUE } PetscTruth;
78ca9b4cbeSLois Curfman McInnes 
79da69df5fSBarry Smith #include "viewer.h"
808c8d4905SLois Curfman McInnes #include "options.h"
812eac72dbSBarry Smith 
82a0a59b22SBarry Smith extern int PetscInitialize(int*,char***,char*,char*);
83a0a59b22SBarry Smith extern int PetscFinalize();
84a0a59b22SBarry Smith 
85c60448a5SBarry Smith extern int PetscObjectDestroy(PetscObject);
868f4c47bcSLois Curfman McInnes extern int PetscObjectExists(PetscObject,int*);
877f223b93SBarry Smith extern int PetscObjectGetComm(PetscObject,MPI_Comm *comm);
88a5a9c739SBarry Smith extern int PetscObjectSetName(PetscObject,char*);
89a5a9c739SBarry Smith extern int PetscObjectGetName(PetscObject,char**);
902eac72dbSBarry Smith 
91f0479e8cSBarry Smith extern int PetscDefaultErrorHandler(int,char*,char*,char*,int,void*);
92f0479e8cSBarry Smith extern int PetscAbortErrorHandler(int,char*,char*,char*,int,void* );
93f0479e8cSBarry Smith extern int PetscAttachDebuggerErrorHandler(int,char*,char*,char*,int,void*);
94f0479e8cSBarry Smith extern int PetscError(int,char*,char*,char*,int);
95f0479e8cSBarry Smith extern int PetscPushErrorHandler(int
96f0479e8cSBarry Smith                          (*handler)(int,char*,char*,char*,int,void*),void* );
978ed539a5SBarry Smith extern int PetscPopErrorHandler();
988ed539a5SBarry Smith 
998ed539a5SBarry Smith extern int PetscSetDebugger(char *,int,char *);
1008ed539a5SBarry Smith extern int PetscAttachDebugger();
1018ed539a5SBarry Smith 
102f0479e8cSBarry Smith extern int PetscDefaultSignalHandler(int,void*);
103f0479e8cSBarry Smith extern int PetscPushSignalHandler(int (*)(int,void *),void*);
104f0479e8cSBarry Smith extern int PetscPopSignalHandler();
105f0479e8cSBarry Smith extern int PetscSetFPTrap(int);
1066b5873e3SBarry Smith #define FP_TRAP_OFF    0
1076b5873e3SBarry Smith #define FP_TRAP_ON     1
108fba13676SBarry Smith #define FP_TRAP_ALWAYS 2
1098ed539a5SBarry Smith 
110*31b41497SLois Curfman McInnes /*
111*31b41497SLois Curfman McInnes    Definitions used for the Fortran interface:
112*31b41497SLois Curfman McInnes    FORTRANCAPS:       Names are uppercase, no trailing underscore
113*31b41497SLois Curfman McInnes    FORTRANUNDERSCORE: Names are lowercase, trailing underscore
114*31b41497SLois Curfman McInnes  */
115602c2b74SBarry Smith #if defined(PARCH_cray) || defined(PARCH_NCUBE) || defined(PARCH_t3d)
1168ed539a5SBarry Smith #define FORTRANCAPS
117d90ea2a1SBarry Smith #elif !defined(PARCH_rs6000) && !defined(PARCH_NeXT) && !defined(PARCH_hpux)
1188ed539a5SBarry Smith #define FORTRANUNDERSCORE
1192eac72dbSBarry Smith #endif
1202eac72dbSBarry Smith 
1217857610eSBarry Smith /* Global flop counter */
1227857610eSBarry Smith extern double _TotalFlops;
1237857610eSBarry Smith #if defined(PETSC_LOG)
1247857610eSBarry Smith #define PLogFlops(n) {_TotalFlops += n;}
1257857610eSBarry Smith #else
1267857610eSBarry Smith #define PLogFlops(n)
1277857610eSBarry Smith #endif
128affa3d11SLois Curfman McInnes 
129affa3d11SLois Curfman McInnes /*M
130affa3d11SLois Curfman McInnes    PLogFlops - Adds floating point operations to the global counter.
131affa3d11SLois Curfman McInnes 
132affa3d11SLois Curfman McInnes    Input Parameter:
133affa3d11SLois Curfman McInnes .  f - flop counter
134affa3d11SLois Curfman McInnes 
135affa3d11SLois Curfman McInnes    Synopsis:
136affa3d11SLois Curfman McInnes    PLogFlops(int f)
137affa3d11SLois Curfman McInnes 
138affa3d11SLois Curfman McInnes    Notes:
139affa3d11SLois Curfman McInnes    A global counter logs all PETSc flop counts.  The user can use
140affa3d11SLois Curfman McInnes    PLogFlops() to increment this counter to include flops for the
141d41b535cSLois Curfman McInnes    application code.
142affa3d11SLois Curfman McInnes 
143d41b535cSLois Curfman McInnes    PETSc automatically logs library events if the code has been
144d41b535cSLois Curfman McInnes    compiled with -DPETSC_LOG (which is the default), and -log,
145d41b535cSLois Curfman McInnes    -log_summary, or -log_all are specified.  PLogFlops() is
146d41b535cSLois Curfman McInnes    intended for logging user flops to supplement this PETSc
147d41b535cSLois Curfman McInnes    information.
148d41b535cSLois Curfman McInnes 
149d41b535cSLois Curfman McInnes     Example of Usage:
150d41b535cSLois Curfman McInnes $     #define USER_EVENT 75
151d41b535cSLois Curfman McInnes $     PLogEventRegister(USER_EVENT,"User event");
152d41b535cSLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
153d41b535cSLois Curfman McInnes $     [code segment to monitor]
154d41b535cSLois Curfman McInnes $     PLogFlops(user_flops)
155d41b535cSLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
156d41b535cSLois Curfman McInnes 
157d41b535cSLois Curfman McInnes .seealso:  PLogEventRegister(), PLogEventBegin(), PLogEventEnd()
158affa3d11SLois Curfman McInnes 
159affa3d11SLois Curfman McInnes .keywords:  Petsc, log, flops, floating point operations
160affa3d11SLois Curfman McInnes M*/
161affa3d11SLois Curfman McInnes 
16206259719SBarry Smith extern int PLogPrint(MPI_Comm,FILE *);
16306259719SBarry Smith extern int PLogBegin();
16406259719SBarry Smith extern int PLogAllBegin();
16506259719SBarry Smith extern int PLogDump(char*);
1667857610eSBarry Smith 
1672eac72dbSBarry Smith #endif
168