1*55b5a45fSLois Curfman McInnes /* $Id: petsc.h,v 1.52 1995/08/03 18:01:29 bsmith Exp curfman $ */ 22eac72dbSBarry Smith 32eac72dbSBarry Smith #if !defined(__PETSC_PACKAGE) 42eac72dbSBarry Smith #define __PETSC_PACKAGE 52eac72dbSBarry Smith 6e0dd00f9SBarry Smith #define PETSC_VERSION_NUMBER "PETSc Version 2.0.Beta.7 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*)); 40c7485abaSBarry 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 48145fe58dSBarry Smith #define PETSCMIN(a,b) ( ((a)<(b)) ? (a) : (b) ) 49145fe58dSBarry Smith #define PETSCMAX(a,b) ( ((a)<(b)) ? (b) : (a) ) 5081745bc7SBarry Smith #define PETSCABS(a) ( ((a)<0) ? -(a) : (a) ) 51145fe58dSBarry Smith 522eac72dbSBarry Smith /* Macros for error checking */ 53f0479e8cSBarry Smith #if !defined(__DIR__) 54f0479e8cSBarry Smith #define __DIR__ 0 55f0479e8cSBarry Smith #endif 564db94defSBarry Smith #define PETSC_ERROR_NO_MEM 55 5728988994SBarry Smith #if defined(PETSC_DEBUG) 5878b31e54SBarry Smith #define SETERRQ(n,s) {return PetscError(__LINE__,__DIR__,__FILE__,s,n);} 59d6dfbf8fSBarry Smith #define SETERRA(n,s) \ 60d6dfbf8fSBarry Smith {int _ierr = PetscError(__LINE__,__DIR__,__FILE__,s,n);\ 61d6dfbf8fSBarry Smith MPI_Abort(MPI_COMM_WORLD,_ierr);} 6278b31e54SBarry Smith #define CHKERRQ(n) {if (n) SETERRQ(n,(char *)0);} 63d6dfbf8fSBarry Smith #define CHKERRA(n) {if (n) SETERRA(n,(char *)0);} 644db94defSBarry Smith #define CHKPTRQ(p) if (!p) SETERRQ(PETSC_ERROR_NO_MEM,(char*)0); 654db94defSBarry Smith #define CHKPTRA(p) if (!p) SETERRA(PETSC_ERROR_NO_MEM,(char*)0); 6628988994SBarry Smith #else 6778b31e54SBarry Smith #define SETERRQ(n,s) {return PetscError(__LINE__,__DIR__,__FILE__,s,n);} 6828988994SBarry Smith #define SETERRA(n,s) \ 6928988994SBarry Smith {int _ierr = PetscError(__LINE__,__DIR__,__FILE__,s,n);\ 7028988994SBarry Smith MPI_Abort(MPI_COMM_WORLD,_ierr);} 7178b31e54SBarry Smith #define CHKERRQ(n) {if (n) SETERRQ(n,(char *)0);} 7228988994SBarry Smith #define CHKERRA(n) {if (n) SETERRA(n,(char *)0);} 734db94defSBarry Smith #define CHKPTRQ(p) if (!p) SETERRQ(PETSC_ERROR_NO_MEM,(char*)0); 744db94defSBarry Smith #define CHKPTRA(p) if (!p) SETERRA(PETSC_ERROR_NO_MEM,(char*)0); 7528988994SBarry Smith #endif 762eac72dbSBarry Smith 778ed539a5SBarry Smith typedef struct _PetscObject* PetscObject; 789e25ed09SBarry Smith #define PETSC_COOKIE 0x12121212 796b5873e3SBarry Smith #define PETSC_DECIDE -1 80*55b5a45fSLois Curfman McInnes #define PETSC_DEFAULT -2 81da69df5fSBarry Smith 82ca9b4cbeSLois Curfman McInnes typedef enum { PETSC_FALSE, PETSC_TRUE } PetscTruth; 83ca9b4cbeSLois Curfman McInnes 84da69df5fSBarry Smith #include "viewer.h" 858c8d4905SLois Curfman McInnes #include "options.h" 862eac72dbSBarry Smith 87a0a59b22SBarry Smith extern int PetscInitialize(int*,char***,char*,char*); 88a0a59b22SBarry Smith extern int PetscFinalize(); 89a0a59b22SBarry Smith 90c60448a5SBarry Smith extern int PetscObjectDestroy(PetscObject); 918f4c47bcSLois Curfman McInnes extern int PetscObjectExists(PetscObject,int*); 927f223b93SBarry Smith extern int PetscObjectGetComm(PetscObject,MPI_Comm *comm); 93a5a9c739SBarry Smith extern int PetscObjectSetName(PetscObject,char*); 94a5a9c739SBarry Smith extern int PetscObjectGetName(PetscObject,char**); 952eac72dbSBarry Smith 96f0479e8cSBarry Smith extern int PetscDefaultErrorHandler(int,char*,char*,char*,int,void*); 97f0479e8cSBarry Smith extern int PetscAbortErrorHandler(int,char*,char*,char*,int,void* ); 98f0479e8cSBarry Smith extern int PetscAttachDebuggerErrorHandler(int,char*,char*,char*,int,void*); 99f0479e8cSBarry Smith extern int PetscError(int,char*,char*,char*,int); 100f0479e8cSBarry Smith extern int PetscPushErrorHandler(int 101f0479e8cSBarry Smith (*handler)(int,char*,char*,char*,int,void*),void* ); 1028ed539a5SBarry Smith extern int PetscPopErrorHandler(); 1038ed539a5SBarry Smith 1048ed539a5SBarry Smith extern int PetscSetDebugger(char *,int,char *); 1058ed539a5SBarry Smith extern int PetscAttachDebugger(); 1068ed539a5SBarry Smith 107f0479e8cSBarry Smith extern int PetscDefaultSignalHandler(int,void*); 108f0479e8cSBarry Smith extern int PetscPushSignalHandler(int (*)(int,void *),void*); 109f0479e8cSBarry Smith extern int PetscPopSignalHandler(); 110f0479e8cSBarry Smith extern int PetscSetFPTrap(int); 1116b5873e3SBarry Smith #define FP_TRAP_OFF 0 1126b5873e3SBarry Smith #define FP_TRAP_ON 1 113fba13676SBarry Smith #define FP_TRAP_ALWAYS 2 1148ed539a5SBarry Smith 11531b41497SLois Curfman McInnes /* 11631b41497SLois Curfman McInnes Definitions used for the Fortran interface: 11731b41497SLois Curfman McInnes FORTRANCAPS: Names are uppercase, no trailing underscore 11831b41497SLois Curfman McInnes FORTRANUNDERSCORE: Names are lowercase, trailing underscore 11931b41497SLois Curfman McInnes */ 120602c2b74SBarry Smith #if defined(PARCH_cray) || defined(PARCH_NCUBE) || defined(PARCH_t3d) 1218ed539a5SBarry Smith #define FORTRANCAPS 122d90ea2a1SBarry Smith #elif !defined(PARCH_rs6000) && !defined(PARCH_NeXT) && !defined(PARCH_hpux) 1238ed539a5SBarry Smith #define FORTRANUNDERSCORE 1242eac72dbSBarry Smith #endif 1252eac72dbSBarry Smith 1267857610eSBarry Smith /* Global flop counter */ 1277857610eSBarry Smith extern double _TotalFlops; 1287857610eSBarry Smith #if defined(PETSC_LOG) 1297857610eSBarry Smith #define PLogFlops(n) {_TotalFlops += n;} 1307857610eSBarry Smith #else 1317857610eSBarry Smith #define PLogFlops(n) 1327857610eSBarry Smith #endif 133affa3d11SLois Curfman McInnes 134affa3d11SLois Curfman McInnes /*M 135affa3d11SLois Curfman McInnes PLogFlops - Adds floating point operations to the global counter. 136affa3d11SLois Curfman McInnes 137affa3d11SLois Curfman McInnes Input Parameter: 138affa3d11SLois Curfman McInnes . f - flop counter 139affa3d11SLois Curfman McInnes 140affa3d11SLois Curfman McInnes Synopsis: 141affa3d11SLois Curfman McInnes PLogFlops(int f) 142affa3d11SLois Curfman McInnes 143affa3d11SLois Curfman McInnes Notes: 144affa3d11SLois Curfman McInnes A global counter logs all PETSc flop counts. The user can use 145affa3d11SLois Curfman McInnes PLogFlops() to increment this counter to include flops for the 146d41b535cSLois Curfman McInnes application code. 147affa3d11SLois Curfman McInnes 148d41b535cSLois Curfman McInnes PETSc automatically logs library events if the code has been 149d41b535cSLois Curfman McInnes compiled with -DPETSC_LOG (which is the default), and -log, 150d41b535cSLois Curfman McInnes -log_summary, or -log_all are specified. PLogFlops() is 151d41b535cSLois Curfman McInnes intended for logging user flops to supplement this PETSc 152d41b535cSLois Curfman McInnes information. 153d41b535cSLois Curfman McInnes 154d41b535cSLois Curfman McInnes Example of Usage: 155d41b535cSLois Curfman McInnes $ #define USER_EVENT 75 156d41b535cSLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 157d41b535cSLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 158d41b535cSLois Curfman McInnes $ [code segment to monitor] 159d41b535cSLois Curfman McInnes $ PLogFlops(user_flops) 160d41b535cSLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 161d41b535cSLois Curfman McInnes 162d41b535cSLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd() 163affa3d11SLois Curfman McInnes 164affa3d11SLois Curfman McInnes .keywords: Petsc, log, flops, floating point operations 165affa3d11SLois Curfman McInnes M*/ 166affa3d11SLois Curfman McInnes 16706259719SBarry Smith extern int PLogPrint(MPI_Comm,FILE *); 16806259719SBarry Smith extern int PLogBegin(); 16906259719SBarry Smith extern int PLogAllBegin(); 17006259719SBarry Smith extern int PLogDump(char*); 1717857610eSBarry Smith 1722eac72dbSBarry Smith #endif 173