12eac72dbSBarry Smith 22eac72dbSBarry Smith #if !defined(__PETSC_PACKAGE) 32eac72dbSBarry Smith #define __PETSC_PACKAGE 42eac72dbSBarry Smith 5*d90ea2a1SBarry Smith #define PETSC_VERSION_NUMBER "PETSc Version 2.0.Beta.3 Released May 28, 1995." 67e59f0e8SBarry Smith 7f0479e8cSBarry Smith #include <stdio.h> 828988994SBarry Smith #if defined(PARCH_sun4) 96abc6512SBarry Smith int fprintf(FILE*,char*,...); 106abc6512SBarry Smith int printf(char*,...); 116abc6512SBarry Smith int fflush(FILE*); 126abc6512SBarry Smith int fclose(FILE*); 1328988994SBarry Smith #endif 14f0479e8cSBarry Smith 15f0479e8cSBarry Smith /* MPI interface */ 16f0479e8cSBarry Smith #include "mpi.h" 177f813858SBarry Smith #include "mpiu.h" 18f0479e8cSBarry Smith 19c6a45a97SBarry Smith #if defined(PETSC_COMPLEX) 20c6a45a97SBarry Smith /* work around for bug in alpha g++ compiler */ 21c6a45a97SBarry Smith #if defined(PARCH_alpha) 22c6a45a97SBarry Smith #define hypot(a,b) (double) sqrt((a)*(a)+(b)*(b)) 23c6a45a97SBarry Smith /* extern double hypot(double,double); */ 24c6a45a97SBarry Smith #endif 258ed539a5SBarry Smith #include <complex.h> 2620563c6bSBarry Smith #define PETSCREAL(a) real(a) 278ed539a5SBarry Smith #define Scalar complex 288ed539a5SBarry Smith #else 2920563c6bSBarry Smith #define PETSCREAL(a) a 308ed539a5SBarry Smith #define Scalar double 318ed539a5SBarry Smith #endif 328ed539a5SBarry Smith 33*d90ea2a1SBarry Smith extern void *(*PetscMalloc)(unsigned int,int,char*); 34*d90ea2a1SBarry Smith extern int (*PetscFree)(void *,int,char*); 357f813858SBarry Smith #define MALLOC(a) (*PetscMalloc)(a,__LINE__,__FILE__) 367f813858SBarry Smith #define FREE(a) (*PetscFree)(a,__LINE__,__FILE__) 377f813858SBarry Smith extern int PetscSetMalloc(void *(*)(unsigned int,int,char*), 387f813858SBarry Smith int (*)(void *,int,char*)); 397f813858SBarry Smith extern int Trdump(FILE *); 408ed539a5SBarry Smith 418ed539a5SBarry Smith #define NEW(a) (a *) MALLOC(sizeof(a)) 422eac72dbSBarry Smith #define MEMCPY(a,b,n) memcpy((char*)(a),(char*)(b),n) 438ed539a5SBarry Smith #define MEMSET(a,b,n) memset((char*)(a),(int)(b),n) 4420563c6bSBarry Smith #include <memory.h> 452eac72dbSBarry Smith 462eac72dbSBarry Smith /* Macros for error checking */ 47f0479e8cSBarry Smith #if !defined(__DIR__) 48f0479e8cSBarry Smith #define __DIR__ 0 49f0479e8cSBarry Smith #endif 5028988994SBarry Smith #if defined(PETSC_DEBUG) 51f0479e8cSBarry Smith #define SETERR(n,s) {return PetscError(__LINE__,__DIR__,__FILE__,s,n);} 52d6dfbf8fSBarry Smith #define SETERRA(n,s) \ 53d6dfbf8fSBarry Smith {int _ierr = PetscError(__LINE__,__DIR__,__FILE__,s,n);\ 54d6dfbf8fSBarry Smith MPI_Abort(MPI_COMM_WORLD,_ierr);} 552eac72dbSBarry Smith #define CHKERR(n) {if (n) SETERR(n,(char *)0);} 56d6dfbf8fSBarry Smith #define CHKERRA(n) {if (n) SETERRA(n,(char *)0);} 572eac72dbSBarry Smith #define CHKPTR(p) if (!p) SETERR(1,"No memory"); 58d6dfbf8fSBarry Smith #define CHKPTRA(p) if (!p) SETERRA(1,"No memory"); 5928988994SBarry Smith #else 6028988994SBarry Smith #define SETERR(n,s) {return PetscError(__LINE__,__DIR__,__FILE__,s,n);} 6128988994SBarry Smith #define SETERRA(n,s) \ 6228988994SBarry Smith {int _ierr = PetscError(__LINE__,__DIR__,__FILE__,s,n);\ 6328988994SBarry Smith MPI_Abort(MPI_COMM_WORLD,_ierr);} 6428988994SBarry Smith #define CHKERR(n) {if (n) SETERR(n,(char *)0);} 6528988994SBarry Smith #define CHKERRA(n) {if (n) SETERRA(n,(char *)0);} 6628988994SBarry Smith #define CHKPTR(p) if (!p) SETERR(1,"No memory"); 6728988994SBarry Smith #define CHKPTRA(p) if (!p) SETERRA(1,"No memory"); 6828988994SBarry Smith #endif 692eac72dbSBarry Smith 708ed539a5SBarry Smith typedef struct _PetscObject* PetscObject; 719e25ed09SBarry Smith #define PETSC_COOKIE 0x12121212 726b5873e3SBarry Smith #define PETSC_DECIDE -1 73da69df5fSBarry Smith 74ca9b4cbeSLois Curfman McInnes typedef enum { PETSC_FALSE, PETSC_TRUE } PetscTruth; 75ca9b4cbeSLois Curfman McInnes 76da69df5fSBarry Smith #include "viewer.h" 778c8d4905SLois Curfman McInnes #include "options.h" 782eac72dbSBarry Smith 798ed539a5SBarry Smith /* useful Petsc routines (used often) */ 80a0a59b22SBarry Smith extern int PetscInitialize(int*,char***,char*,char*); 81a0a59b22SBarry Smith extern int PetscFinalize(); 82a0a59b22SBarry Smith 838ed539a5SBarry Smith extern int PetscDestroy(PetscObject); 847f223b93SBarry Smith extern int PetscObjectGetComm(PetscObject,MPI_Comm *comm); 85a5a9c739SBarry Smith extern int PetscObjectSetName(PetscObject,char*); 86a5a9c739SBarry Smith extern int PetscObjectGetName(PetscObject,char**); 872eac72dbSBarry Smith 88f0479e8cSBarry Smith extern int PetscDefaultErrorHandler(int,char*,char*,char*,int,void*); 89f0479e8cSBarry Smith extern int PetscAbortErrorHandler(int,char*,char*,char*,int,void* ); 90f0479e8cSBarry Smith extern int PetscAttachDebuggerErrorHandler(int,char*,char*,char*,int,void*); 91f0479e8cSBarry Smith extern int PetscError(int,char*,char*,char*,int); 92f0479e8cSBarry Smith extern int PetscPushErrorHandler(int 93f0479e8cSBarry Smith (*handler)(int,char*,char*,char*,int,void*),void* ); 948ed539a5SBarry Smith extern int PetscPopErrorHandler(); 958ed539a5SBarry Smith 968ed539a5SBarry Smith extern int PetscSetDebugger(char *,int,char *); 978ed539a5SBarry Smith extern int PetscAttachDebugger(); 988ed539a5SBarry Smith 99f0479e8cSBarry Smith extern int PetscDefaultSignalHandler(int,void*); 100f0479e8cSBarry Smith extern int PetscPushSignalHandler(int (*)(int,void *),void*); 101f0479e8cSBarry Smith extern int PetscPopSignalHandler(); 102f0479e8cSBarry Smith extern int PetscSetFPTrap(int); 1036b5873e3SBarry Smith #define FP_TRAP_OFF 0 1046b5873e3SBarry Smith #define FP_TRAP_ON 1 1056b5873e3SBarry Smith #define FP_TRAP_ALWAYS 2 106f97c0401SBarry Smith 1078ed539a5SBarry Smith 1081eb62cbbSBarry Smith #if defined(PARCH_cray) || defined(PARCH_NCUBE) 1098ed539a5SBarry Smith #define FORTRANCAPS 110*d90ea2a1SBarry Smith #elif !defined(PARCH_rs6000) && !defined(PARCH_NeXT) && !defined(PARCH_hpux) 1118ed539a5SBarry Smith #define FORTRANUNDERSCORE 1122eac72dbSBarry Smith #endif 1132eac72dbSBarry Smith 114123e9dcfSBarry Smith #include <stdio.h> /* I don't like this, but? */ 115123e9dcfSBarry Smith 1167857610eSBarry Smith /* Global flop counter */ 1177857610eSBarry Smith extern double _TotalFlops; 1187857610eSBarry Smith #if defined(PETSC_LOG) 1197857610eSBarry Smith #define PLogFlops(n) {_TotalFlops += n;} 1207857610eSBarry Smith #else 1217857610eSBarry Smith #define PLogFlops(n) 1227857610eSBarry Smith #endif 1237857610eSBarry Smith 1242eac72dbSBarry Smith #endif 125