xref: /petsc/include/petsc.h (revision 416022c9818a71eecdf06d41c1abd586feaab60e)
1*416022c9SBarry Smith /* $Id: petsc.h,v 1.58 1995/09/21 20:13:13 bsmith Exp bsmith $ */
22eac72dbSBarry Smith 
32eac72dbSBarry Smith #if !defined(__PETSC_PACKAGE)
42eac72dbSBarry Smith #define __PETSC_PACKAGE
52eac72dbSBarry Smith 
6dbb450caSBarry Smith #define PETSC_VERSION_NUMBER "PETSc Version 2.0.Beta.8 Released ?, 1995."
77e59f0e8SBarry Smith 
8f0479e8cSBarry Smith #include <stdio.h>
9*416022c9SBarry Smith #if defined(PARCH_sun4) && !defined(__cplusplus)
10*416022c9SBarry Smith extern int fprintf(FILE*,const char*,...);
11*416022c9SBarry Smith extern int printf(const char*,...);
12*416022c9SBarry Smith extern int fflush(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 #endif
248ed539a5SBarry Smith #include <complex.h>
2520563c6bSBarry Smith #define PETSCREAL(a) real(a)
268ed539a5SBarry Smith #define Scalar       complex
278ed539a5SBarry Smith #else
2820563c6bSBarry Smith #define PETSCREAL(a) a
298ed539a5SBarry Smith #define Scalar       double
308ed539a5SBarry Smith #endif
318ed539a5SBarry Smith 
32d90ea2a1SBarry Smith extern void *(*PetscMalloc)(unsigned int,int,char*);
33d90ea2a1SBarry Smith extern int  (*PetscFree)(void *,int,char*);
3478b31e54SBarry Smith #define PETSCMALLOC(a)       (*PetscMalloc)(a,__LINE__,__FILE__)
3578b31e54SBarry Smith #define PETSCFREE(a)         (*PetscFree)(a,__LINE__,__FILE__)
36*416022c9SBarry Smith extern int  PetscSetMalloc(void *(*)(unsigned int,int,char*),int (*)(void *,int,char*));
37c7485abaSBarry Smith extern int  TrDump(FILE *);
38e9f47e53SBarry Smith extern int  TrGetMaximumAllocated(double*);
398ed539a5SBarry Smith 
4078b31e54SBarry Smith #define PETSCNEW(A)         (A*) PETSCMALLOC(sizeof(A))
41*416022c9SBarry Smith 
42*416022c9SBarry Smith extern void  PetscMemcpy(void *,void *,int);
43*416022c9SBarry Smith extern void  PetscZero(void *,int);
44*416022c9SBarry Smith extern int   PetscStrlen(char *);
45*416022c9SBarry Smith extern int   PetscStrcmp(char *,char *);
46*416022c9SBarry Smith extern int   PetscStrncmp(char *,char *,int );
47*416022c9SBarry Smith extern void  PetscStrcpy(char *,char *);
48*416022c9SBarry Smith extern void  PetscStrcat(char *,char *);
49*416022c9SBarry Smith extern void  PetscStrncat(char *,char *,int);
50*416022c9SBarry Smith extern void  PetscStrncpy(char *,char *,int);
51*416022c9SBarry Smith extern char* PetscStrchr(char *,char);
52*416022c9SBarry Smith extern char* PetscStrrchr(char *,char);
53*416022c9SBarry Smith extern char* PetscStrstr(char*,char*);
54*416022c9SBarry Smith extern char* PetscStrtok(char*,char*);
55*416022c9SBarry Smith extern char* PetscStrrtok(char*,char*);
562eac72dbSBarry Smith 
57145fe58dSBarry Smith #define PETSCMIN(a,b)      ( ((a)<(b)) ? (a) : (b) )
58145fe58dSBarry Smith #define PETSCMAX(a,b)      ( ((a)<(b)) ? (b) : (a) )
5981745bc7SBarry Smith #define PETSCABS(a)        ( ((a)<0)   ? -(a) : (a) )
60145fe58dSBarry Smith 
612eac72dbSBarry Smith /*  Macros for error checking */
62f0479e8cSBarry Smith #if !defined(__DIR__)
63f0479e8cSBarry Smith #define __DIR__ 0
64f0479e8cSBarry Smith #endif
65d636dbe3SBarry Smith 
66d636dbe3SBarry Smith /*
67d636dbe3SBarry Smith        Unable to malloc error and no supported function
68d636dbe3SBarry Smith */
69*416022c9SBarry Smith #define PETSC_ERR_MEM 55   /* unable to allocate requested memory */
70dbb450caSBarry Smith #define PETSC_ERR_SUP 56   /* no support yet for this operation */
71dbb450caSBarry Smith #define PETSC_ERR_ARG 57   /* bad input argument */
72dbb450caSBarry Smith #define PETSC_ERR_OBJ 58   /* null or corrupt PETSc object */
73d636dbe3SBarry Smith 
7428988994SBarry Smith #if defined(PETSC_DEBUG)
7578b31e54SBarry Smith #define SETERRQ(n,s)     {return PetscError(__LINE__,__DIR__,__FILE__,s,n);}
76*416022c9SBarry Smith #define SETERRA(n,s)     {int _ierr = PetscError(__LINE__,__DIR__,__FILE__,s,n);\
77d6dfbf8fSBarry Smith                           MPI_Abort(MPI_COMM_WORLD,_ierr);}
7878b31e54SBarry Smith #define CHKERRQ(n)       {if (n) SETERRQ(n,(char *)0);}
79d6dfbf8fSBarry Smith #define CHKERRA(n)       {if (n) SETERRA(n,(char *)0);}
80d636dbe3SBarry Smith #define CHKPTRQ(p)       if (!p) SETERRQ(PETSC_ERR_MEM,(char*)0);
81d636dbe3SBarry Smith #define CHKPTRA(p)       if (!p) SETERRA(PETSC_ERR_MEM,(char*)0);
8228988994SBarry Smith #else
8378b31e54SBarry Smith #define SETERRQ(n,s)     {return PetscError(__LINE__,__DIR__,__FILE__,s,n);}
84*416022c9SBarry Smith #define SETERRA(n,s)     {int _ierr = PetscError(__LINE__,__DIR__,__FILE__,s,n);\
8528988994SBarry Smith                           MPI_Abort(MPI_COMM_WORLD,_ierr);}
8678b31e54SBarry Smith #define CHKERRQ(n)       {if (n) SETERRQ(n,(char *)0);}
8728988994SBarry Smith #define CHKERRA(n)       {if (n) SETERRA(n,(char *)0);}
88d636dbe3SBarry Smith #define CHKPTRQ(p)       if (!p) SETERRQ(PETSC_ERR_MEM,(char*)0);
89d636dbe3SBarry Smith #define CHKPTRA(p)       if (!p) SETERRA(PETSC_ERR_MEM,(char*)0);
9028988994SBarry Smith #endif
912eac72dbSBarry Smith 
928ed539a5SBarry Smith typedef struct _PetscObject* PetscObject;
931a941147SBarry Smith #define PETSC_COOKIE         1211211
946b5873e3SBarry Smith #define PETSC_DECIDE         -1
9555b5a45fSLois Curfman McInnes #define PETSC_DEFAULT        -2
96da69df5fSBarry Smith 
97ca9b4cbeSLois Curfman McInnes typedef enum { PETSC_FALSE, PETSC_TRUE } PetscTruth;
98ca9b4cbeSLois Curfman McInnes 
99da69df5fSBarry Smith #include "viewer.h"
1008c8d4905SLois Curfman McInnes #include "options.h"
1012eac72dbSBarry Smith 
102*416022c9SBarry Smith extern int PetscInitialize(int*,char***,char*,char*,char*);
103a0a59b22SBarry Smith extern int PetscFinalize();
104a0a59b22SBarry Smith 
105c60448a5SBarry Smith extern int PetscObjectDestroy(PetscObject);
1068f4c47bcSLois Curfman McInnes extern int PetscObjectExists(PetscObject,int*);
1077f223b93SBarry Smith extern int PetscObjectGetComm(PetscObject,MPI_Comm *comm);
108a5a9c739SBarry Smith extern int PetscObjectSetName(PetscObject,char*);
109a5a9c739SBarry Smith extern int PetscObjectGetName(PetscObject,char**);
1102eac72dbSBarry Smith 
111f0479e8cSBarry Smith extern int PetscDefaultErrorHandler(int,char*,char*,char*,int,void*);
112f0479e8cSBarry Smith extern int PetscAbortErrorHandler(int,char*,char*,char*,int,void* );
113f0479e8cSBarry Smith extern int PetscAttachDebuggerErrorHandler(int,char*,char*,char*,int,void*);
114f0479e8cSBarry Smith extern int PetscError(int,char*,char*,char*,int);
115*416022c9SBarry Smith extern int PetscPushErrorHandler(int (*handler)(int,char*,char*,char*,int,void*),void*);
1168ed539a5SBarry Smith extern int PetscPopErrorHandler();
1178ed539a5SBarry Smith 
1188ed539a5SBarry Smith extern int PetscSetDebugger(char *,int,char *);
1198ed539a5SBarry Smith extern int PetscAttachDebugger();
1208ed539a5SBarry Smith 
121f0479e8cSBarry Smith extern int PetscDefaultSignalHandler(int,void*);
122f0479e8cSBarry Smith extern int PetscPushSignalHandler(int (*)(int,void *),void*);
123f0479e8cSBarry Smith extern int PetscPopSignalHandler();
124f0479e8cSBarry Smith extern int PetscSetFPTrap(int);
1256b5873e3SBarry Smith #define FP_TRAP_OFF    0
1266b5873e3SBarry Smith #define FP_TRAP_ON     1
127fba13676SBarry Smith #define FP_TRAP_ALWAYS 2
1288ed539a5SBarry Smith 
12931b41497SLois Curfman McInnes /*
13031b41497SLois Curfman McInnes    Definitions used for the Fortran interface:
13131b41497SLois Curfman McInnes    FORTRANCAPS:       Names are uppercase, no trailing underscore
13231b41497SLois Curfman McInnes    FORTRANUNDERSCORE: Names are lowercase, trailing underscore
13331b41497SLois Curfman McInnes  */
134602c2b74SBarry Smith #if defined(PARCH_cray) || defined(PARCH_NCUBE) || defined(PARCH_t3d)
1358ed539a5SBarry Smith #define FORTRANCAPS
136d90ea2a1SBarry Smith #elif !defined(PARCH_rs6000) && !defined(PARCH_NeXT) && !defined(PARCH_hpux)
1378ed539a5SBarry Smith #define FORTRANUNDERSCORE
1382eac72dbSBarry Smith #endif
1392eac72dbSBarry Smith 
14019b02663SBarry Smith #include "phead.h"
14119b02663SBarry Smith #include "plog.h"
1427857610eSBarry Smith 
1437ec12d72SBarry Smith extern void PetscSleep(int);
1447ec12d72SBarry Smith 
1452eac72dbSBarry Smith #endif
146