1*97bb86f7SLois Curfman McInnes /* $Id: plog.h,v 1.21 1995/07/12 15:32:21 curfman Exp $ */ 2*97bb86f7SLois Curfman McInnes 3*97bb86f7SLois Curfman McInnes /* 4*97bb86f7SLois Curfman McInnes Defines high level logging in Petsc. 5*97bb86f7SLois Curfman McInnes */ 6*97bb86f7SLois Curfman McInnes 7*97bb86f7SLois Curfman McInnes #if !defined(__PLOG_PACKAGE) 8*97bb86f7SLois Curfman McInnes #define __PLOG_PACKAGE 9*97bb86f7SLois Curfman McInnes #include "petsc.h" 10*97bb86f7SLois Curfman McInnes 11*97bb86f7SLois Curfman McInnes /* 12*97bb86f7SLois Curfman McInnes If you add it here, make sure you add to petsc/bin/tkreview! 13*97bb86f7SLois Curfman McInnes and in src/sys/src/plog.c 14*97bb86f7SLois Curfman McInnes */ 15*97bb86f7SLois Curfman McInnes #define MAT_Mult 0 16*97bb86f7SLois Curfman McInnes #define MAT_BeginAssembly 1 17*97bb86f7SLois Curfman McInnes #define MAT_EndAssembly 2 18*97bb86f7SLois Curfman McInnes #define MAT_GetReordering 3 19*97bb86f7SLois Curfman McInnes #define MAT_MultTrans 4 20*97bb86f7SLois Curfman McInnes #define MAT_MultAdd 5 21*97bb86f7SLois Curfman McInnes #define MAT_MultTransAdd 6 22*97bb86f7SLois Curfman McInnes #define MAT_LUFactor 7 23*97bb86f7SLois Curfman McInnes #define MAT_CholeskyFactor 8 24*97bb86f7SLois Curfman McInnes #define MAT_LUFactorSymbolic 9 25*97bb86f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic 10 26*97bb86f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic 11 27*97bb86f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic 12 28*97bb86f7SLois Curfman McInnes #define MAT_LUFactorNumeric 13 29*97bb86f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric 14 30*97bb86f7SLois Curfman McInnes #define MAT_Relax 15 31*97bb86f7SLois Curfman McInnes #define MAT_Copy 16 32*97bb86f7SLois Curfman McInnes #define MAT_Convert 17 33*97bb86f7SLois Curfman McInnes #define MAT_Scale 18 34*97bb86f7SLois Curfman McInnes #define MAT_ZeroEntries 19 35*97bb86f7SLois Curfman McInnes #define MAT_Solve 20 36*97bb86f7SLois Curfman McInnes #define MAT_SolveAdd 21 37*97bb86f7SLois Curfman McInnes #define MAT_SolveTrans 22 38*97bb86f7SLois Curfman McInnes #define MAT_SolveTransAdd 23 39*97bb86f7SLois Curfman McInnes #define MAT_SetValues 24 40*97bb86f7SLois Curfman McInnes 41*97bb86f7SLois Curfman McInnes #define VEC_Dot 30 42*97bb86f7SLois Curfman McInnes #define VEC_Norm 31 43*97bb86f7SLois Curfman McInnes #define VEC_ASum 32 44*97bb86f7SLois Curfman McInnes #define VEC_AMax 33 45*97bb86f7SLois Curfman McInnes #define VEC_Max 34 46*97bb86f7SLois Curfman McInnes #define VEC_Min 35 47*97bb86f7SLois Curfman McInnes #define VEC_TDot 36 48*97bb86f7SLois Curfman McInnes #define VEC_Scale 37 49*97bb86f7SLois Curfman McInnes #define VEC_Copy 38 50*97bb86f7SLois Curfman McInnes #define VEC_Set 39 51*97bb86f7SLois Curfman McInnes #define VEC_AXPY 40 52*97bb86f7SLois Curfman McInnes #define VEC_AYPX 41 53*97bb86f7SLois Curfman McInnes #define VEC_Swap 42 54*97bb86f7SLois Curfman McInnes #define VEC_WAXPY 43 55*97bb86f7SLois Curfman McInnes #define VEC_BeginAssembly 44 56*97bb86f7SLois Curfman McInnes #define VEC_EndAssembly 45 57*97bb86f7SLois Curfman McInnes #define VEC_MTDot 46 58*97bb86f7SLois Curfman McInnes #define VEC_MDot 47 59*97bb86f7SLois Curfman McInnes #define VEC_MAXPY 48 60*97bb86f7SLois Curfman McInnes #define VEC_PMult 49 61*97bb86f7SLois Curfman McInnes 62*97bb86f7SLois Curfman McInnes #define SLES_Solve 55 63*97bb86f7SLois Curfman McInnes #define PC_SetUp 56 64*97bb86f7SLois Curfman McInnes #define PC_Apply 57 65*97bb86f7SLois Curfman McInnes #define SLES_SetUp 58 66*97bb86f7SLois Curfman McInnes 67*97bb86f7SLois Curfman McInnes #define SNES_Solve 60 68*97bb86f7SLois Curfman McInnes #define SNES_LineSearch 61 69*97bb86f7SLois Curfman McInnes #define SNES_FunctionEval 62 70*97bb86f7SLois Curfman McInnes #define SNES_JacobianEval 63 71*97bb86f7SLois Curfman McInnes 72*97bb86f7SLois Curfman McInnes /* event numbers 70 to 89 are reserved for applications */ 73*97bb86f7SLois Curfman McInnes 74*97bb86f7SLois Curfman McInnes #if defined(PETSC_LOG) 75*97bb86f7SLois Curfman McInnes 76*97bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 77*97bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 78*97bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject); 79*97bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject); 80*97bb86f7SLois Curfman McInnes extern int PLogEventRegister(int,char*); 81*97bb86f7SLois Curfman McInnes 82*97bb86f7SLois Curfman McInnes /*M 83*97bb86f7SLois Curfman McInnes PLogEventBegin - Logs the beginning of a user event. Note that 84*97bb86f7SLois Curfman McInnes pinclude/plog.h must be included in the user's code to employ 85*97bb86f7SLois Curfman McInnes this function. 86*97bb86f7SLois Curfman McInnes 87*97bb86f7SLois Curfman McInnes Input Parameters: 88*97bb86f7SLois Curfman McInnes . e - integer associated with the event (69 < e < 89) 89*97bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 90*97bb86f7SLois Curfman McInnes 91*97bb86f7SLois Curfman McInnes Synopsis: 92*97bb86f7SLois Curfman McInnes PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 93*97bb86f7SLois Curfman McInnes PetscObject o4) 94*97bb86f7SLois Curfman McInnes 95*97bb86f7SLois Curfman McInnes Notes: 96*97bb86f7SLois Curfman McInnes You should also register each integer event with the command 97*97bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 98*97bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 99*97bb86f7SLois Curfman McInnes 100*97bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 101*97bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 102*97bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 103*97bb86f7SLois Curfman McInnes to supplement this PETSc information. 104*97bb86f7SLois Curfman McInnes 105*97bb86f7SLois Curfman McInnes Example of Usage: 106*97bb86f7SLois Curfman McInnes $ #define USER_EVENT 75 107*97bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 108*97bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 109*97bb86f7SLois Curfman McInnes $ [code segment to monitor] 110*97bb86f7SLois Curfman McInnes $ PLogFlops(user_flops) 111*97bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 112*97bb86f7SLois Curfman McInnes 113*97bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 114*97bb86f7SLois Curfman McInnes 115*97bb86f7SLois Curfman McInnes .keywords: log, event, begin 116*97bb86f7SLois Curfman McInnes M*/ 117*97bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0;\ 118*97bb86f7SLois Curfman McInnes { _tacky++;if (_PLB) (*_PLB)(e,_tacky,(PetscObject)o1,\ 119*97bb86f7SLois Curfman McInnes (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}; 120*97bb86f7SLois Curfman McInnes 121*97bb86f7SLois Curfman McInnes /*M 122*97bb86f7SLois Curfman McInnes PLogEventEnd - Log the end of a user event. Note that 123*97bb86f7SLois Curfman McInnes pinclude/plog.h must be included in the user's code to employ 124*97bb86f7SLois Curfman McInnes this function. 125*97bb86f7SLois Curfman McInnes 126*97bb86f7SLois Curfman McInnes Input Parameters: 127*97bb86f7SLois Curfman McInnes . e - integer associated with the event (69 < e < 89) 128*97bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 129*97bb86f7SLois Curfman McInnes 130*97bb86f7SLois Curfman McInnes Synopsis: 131*97bb86f7SLois Curfman McInnes PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 132*97bb86f7SLois Curfman McInnes PetscObject o4) 133*97bb86f7SLois Curfman McInnes 134*97bb86f7SLois Curfman McInnes Notes: 135*97bb86f7SLois Curfman McInnes You should also register each integer event with the command 136*97bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 137*97bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 138*97bb86f7SLois Curfman McInnes 139*97bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 140*97bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 141*97bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 142*97bb86f7SLois Curfman McInnes to supplement this PETSc information. 143*97bb86f7SLois Curfman McInnes 144*97bb86f7SLois Curfman McInnes Example of Usage: 145*97bb86f7SLois Curfman McInnes $ #define USER_EVENT 75 146*97bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 147*97bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 148*97bb86f7SLois Curfman McInnes $ [code segment to monitor] 149*97bb86f7SLois Curfman McInnes $ PLogFlops(user_flops) 150*97bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 151*97bb86f7SLois Curfman McInnes 152*97bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 153*97bb86f7SLois Curfman McInnes 154*97bb86f7SLois Curfman McInnes .keywords: log, event, end 155*97bb86f7SLois Curfman McInnes M*/ 156*97bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) \ 157*97bb86f7SLois Curfman McInnes { if (_PLE) (*_PLE)(e,_tacky,(PetscObject)o1,(PetscObject)o2,\ 158*97bb86f7SLois Curfman McInnes (PetscObject)o3,(PetscObject)o4);} _tacky--;} 159*97bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) {((PetscObject)(c))->parent = (PetscObject) p;} 160*97bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 161*97bb86f7SLois Curfman McInnes PLogObjectParent(p,(d)[_i]);} 162*97bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 163*97bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 164*97bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 165*97bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 166*97bb86f7SLois Curfman McInnes 167*97bb86f7SLois Curfman McInnes #else 168*97bb86f7SLois Curfman McInnes 169*97bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) 170*97bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) 171*97bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 172*97bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 173*97bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) 174*97bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c) 175*97bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 176*97bb86f7SLois Curfman McInnes #endif 177*97bb86f7SLois Curfman McInnes 178*97bb86f7SLois Curfman McInnes #endif 179