1*fba13676SBarry Smith /* $Id: petsc.h,v 1.41 1995/07/14 13:49:30 curfman Exp bsmith $ */ 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 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 106*fba13676SBarry Smith #define FP_TRAP_ALWAYS 2 1078ed539a5SBarry Smith 108602c2b74SBarry Smith #if defined(PARCH_cray) || defined(PARCH_NCUBE) || defined(PARCH_t3d) 1098ed539a5SBarry Smith #define FORTRANCAPS 110d90ea2a1SBarry Smith #elif !defined(PARCH_rs6000) && !defined(PARCH_NeXT) && !defined(PARCH_hpux) 1118ed539a5SBarry Smith #define FORTRANUNDERSCORE 1122eac72dbSBarry Smith #endif 1132eac72dbSBarry Smith 1147857610eSBarry Smith /* Global flop counter */ 1157857610eSBarry Smith extern double _TotalFlops; 1167857610eSBarry Smith #if defined(PETSC_LOG) 1177857610eSBarry Smith #define PLogFlops(n) {_TotalFlops += n;} 1187857610eSBarry Smith #else 1197857610eSBarry Smith #define PLogFlops(n) 1207857610eSBarry Smith #endif 121affa3d11SLois Curfman McInnes 122affa3d11SLois Curfman McInnes /*M 123affa3d11SLois Curfman McInnes PLogFlops - Adds floating point operations to the global counter. 124affa3d11SLois Curfman McInnes 125affa3d11SLois Curfman McInnes Input Parameter: 126affa3d11SLois Curfman McInnes . f - flop counter 127affa3d11SLois Curfman McInnes 128affa3d11SLois Curfman McInnes Synopsis: 129affa3d11SLois Curfman McInnes PLogFlops(int f) 130affa3d11SLois Curfman McInnes 131affa3d11SLois Curfman McInnes Notes: 132affa3d11SLois Curfman McInnes A global counter logs all PETSc flop counts. The user can use 133affa3d11SLois Curfman McInnes PLogFlops() to increment this counter to include flops for the 134d41b535cSLois Curfman McInnes application code. 135affa3d11SLois Curfman McInnes 136d41b535cSLois Curfman McInnes PETSc automatically logs library events if the code has been 137d41b535cSLois Curfman McInnes compiled with -DPETSC_LOG (which is the default), and -log, 138d41b535cSLois Curfman McInnes -log_summary, or -log_all are specified. PLogFlops() is 139d41b535cSLois Curfman McInnes intended for logging user flops to supplement this PETSc 140d41b535cSLois Curfman McInnes information. 141d41b535cSLois Curfman McInnes 142d41b535cSLois Curfman McInnes Example of Usage: 143d41b535cSLois Curfman McInnes $ #define USER_EVENT 75 144d41b535cSLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 145d41b535cSLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 146d41b535cSLois Curfman McInnes $ [code segment to monitor] 147d41b535cSLois Curfman McInnes $ PLogFlops(user_flops) 148d41b535cSLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 149d41b535cSLois Curfman McInnes 150d41b535cSLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd() 151affa3d11SLois Curfman McInnes 152affa3d11SLois Curfman McInnes .keywords: Petsc, log, flops, floating point operations 153affa3d11SLois Curfman McInnes M*/ 154affa3d11SLois Curfman McInnes 15506259719SBarry Smith extern int PLogPrint(MPI_Comm,FILE *); 15606259719SBarry Smith extern int PLogBegin(); 15706259719SBarry Smith extern int PLogAllBegin(); 15806259719SBarry Smith extern int PLogDump(char*); 1597857610eSBarry Smith 1602eac72dbSBarry Smith #endif 161