1*0eb211faSLois Curfman McInnes /* $Id: plog.h,v 1.1 1995/07/12 16:28:35 curfman Exp curfman $ */ 297bb86f7SLois Curfman McInnes 397bb86f7SLois Curfman McInnes /* 497bb86f7SLois Curfman McInnes Defines high level logging in Petsc. 597bb86f7SLois Curfman McInnes */ 697bb86f7SLois Curfman McInnes 797bb86f7SLois Curfman McInnes #if !defined(__PLOG_PACKAGE) 897bb86f7SLois Curfman McInnes #define __PLOG_PACKAGE 997bb86f7SLois Curfman McInnes #include "petsc.h" 1097bb86f7SLois Curfman McInnes 1197bb86f7SLois Curfman McInnes /* 1297bb86f7SLois Curfman McInnes If you add it here, make sure you add to petsc/bin/tkreview! 1397bb86f7SLois Curfman McInnes and in src/sys/src/plog.c 1497bb86f7SLois Curfman McInnes */ 1597bb86f7SLois Curfman McInnes #define MAT_Mult 0 1697bb86f7SLois Curfman McInnes #define MAT_BeginAssembly 1 1797bb86f7SLois Curfman McInnes #define MAT_EndAssembly 2 1897bb86f7SLois Curfman McInnes #define MAT_GetReordering 3 1997bb86f7SLois Curfman McInnes #define MAT_MultTrans 4 2097bb86f7SLois Curfman McInnes #define MAT_MultAdd 5 2197bb86f7SLois Curfman McInnes #define MAT_MultTransAdd 6 2297bb86f7SLois Curfman McInnes #define MAT_LUFactor 7 2397bb86f7SLois Curfman McInnes #define MAT_CholeskyFactor 8 2497bb86f7SLois Curfman McInnes #define MAT_LUFactorSymbolic 9 2597bb86f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic 10 2697bb86f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic 11 2797bb86f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic 12 2897bb86f7SLois Curfman McInnes #define MAT_LUFactorNumeric 13 2997bb86f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric 14 3097bb86f7SLois Curfman McInnes #define MAT_Relax 15 3197bb86f7SLois Curfman McInnes #define MAT_Copy 16 3297bb86f7SLois Curfman McInnes #define MAT_Convert 17 3397bb86f7SLois Curfman McInnes #define MAT_Scale 18 3497bb86f7SLois Curfman McInnes #define MAT_ZeroEntries 19 3597bb86f7SLois Curfman McInnes #define MAT_Solve 20 3697bb86f7SLois Curfman McInnes #define MAT_SolveAdd 21 3797bb86f7SLois Curfman McInnes #define MAT_SolveTrans 22 3897bb86f7SLois Curfman McInnes #define MAT_SolveTransAdd 23 3997bb86f7SLois Curfman McInnes #define MAT_SetValues 24 4097bb86f7SLois Curfman McInnes 4197bb86f7SLois Curfman McInnes #define VEC_Dot 30 4297bb86f7SLois Curfman McInnes #define VEC_Norm 31 4397bb86f7SLois Curfman McInnes #define VEC_ASum 32 4497bb86f7SLois Curfman McInnes #define VEC_AMax 33 4597bb86f7SLois Curfman McInnes #define VEC_Max 34 4697bb86f7SLois Curfman McInnes #define VEC_Min 35 4797bb86f7SLois Curfman McInnes #define VEC_TDot 36 4897bb86f7SLois Curfman McInnes #define VEC_Scale 37 4997bb86f7SLois Curfman McInnes #define VEC_Copy 38 5097bb86f7SLois Curfman McInnes #define VEC_Set 39 5197bb86f7SLois Curfman McInnes #define VEC_AXPY 40 5297bb86f7SLois Curfman McInnes #define VEC_AYPX 41 5397bb86f7SLois Curfman McInnes #define VEC_Swap 42 5497bb86f7SLois Curfman McInnes #define VEC_WAXPY 43 5597bb86f7SLois Curfman McInnes #define VEC_BeginAssembly 44 5697bb86f7SLois Curfman McInnes #define VEC_EndAssembly 45 5797bb86f7SLois Curfman McInnes #define VEC_MTDot 46 5897bb86f7SLois Curfman McInnes #define VEC_MDot 47 5997bb86f7SLois Curfman McInnes #define VEC_MAXPY 48 6097bb86f7SLois Curfman McInnes #define VEC_PMult 49 6197bb86f7SLois Curfman McInnes 6297bb86f7SLois Curfman McInnes #define SLES_Solve 55 6397bb86f7SLois Curfman McInnes #define PC_SetUp 56 6497bb86f7SLois Curfman McInnes #define PC_Apply 57 6597bb86f7SLois Curfman McInnes #define SLES_SetUp 58 6697bb86f7SLois Curfman McInnes 6797bb86f7SLois Curfman McInnes #define SNES_Solve 60 6897bb86f7SLois Curfman McInnes #define SNES_LineSearch 61 6997bb86f7SLois Curfman McInnes #define SNES_FunctionEval 62 7097bb86f7SLois Curfman McInnes #define SNES_JacobianEval 63 7197bb86f7SLois Curfman McInnes 7297bb86f7SLois Curfman McInnes /* event numbers 70 to 89 are reserved for applications */ 7397bb86f7SLois Curfman McInnes 7497bb86f7SLois Curfman McInnes #if defined(PETSC_LOG) 7597bb86f7SLois Curfman McInnes 7697bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 7797bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 7897bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject); 7997bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject); 8097bb86f7SLois Curfman McInnes extern int PLogEventRegister(int,char*); 8197bb86f7SLois Curfman McInnes 8297bb86f7SLois Curfman McInnes /*M 8397bb86f7SLois Curfman McInnes PLogEventBegin - Logs the beginning of a user event. Note that 84*0eb211faSLois Curfman McInnes petsc/include/plog.h MUST be included in the user's code to employ 8597bb86f7SLois Curfman McInnes this function. 8697bb86f7SLois Curfman McInnes 8797bb86f7SLois Curfman McInnes Input Parameters: 8897bb86f7SLois Curfman McInnes . e - integer associated with the event (69 < e < 89) 8997bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 9097bb86f7SLois Curfman McInnes 9197bb86f7SLois Curfman McInnes Synopsis: 9297bb86f7SLois Curfman McInnes PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 9397bb86f7SLois Curfman McInnes PetscObject o4) 9497bb86f7SLois Curfman McInnes 9597bb86f7SLois Curfman McInnes Notes: 9697bb86f7SLois Curfman McInnes You should also register each integer event with the command 9797bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 9897bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 9997bb86f7SLois Curfman McInnes 10097bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 10197bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 10297bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 10397bb86f7SLois Curfman McInnes to supplement this PETSc information. 10497bb86f7SLois Curfman McInnes 10597bb86f7SLois Curfman McInnes Example of Usage: 10697bb86f7SLois Curfman McInnes $ #define USER_EVENT 75 107*0eb211faSLois Curfman McInnes $ int user_event_flops; 10897bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 10997bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 11097bb86f7SLois Curfman McInnes $ [code segment to monitor] 111*0eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 11297bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 11397bb86f7SLois Curfman McInnes 11497bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 11597bb86f7SLois Curfman McInnes 11697bb86f7SLois Curfman McInnes .keywords: log, event, begin 11797bb86f7SLois Curfman McInnes M*/ 11897bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0;\ 11997bb86f7SLois Curfman McInnes { _tacky++;if (_PLB) (*_PLB)(e,_tacky,(PetscObject)o1,\ 12097bb86f7SLois Curfman McInnes (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}; 12197bb86f7SLois Curfman McInnes 12297bb86f7SLois Curfman McInnes /*M 12397bb86f7SLois Curfman McInnes PLogEventEnd - Log the end of a user event. Note that 124*0eb211faSLois Curfman McInnes petsc/include/plog.h MUST be included in the user's code to employ 12597bb86f7SLois Curfman McInnes this function. 12697bb86f7SLois Curfman McInnes 12797bb86f7SLois Curfman McInnes Input Parameters: 12897bb86f7SLois Curfman McInnes . e - integer associated with the event (69 < e < 89) 12997bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 13097bb86f7SLois Curfman McInnes 13197bb86f7SLois Curfman McInnes Synopsis: 13297bb86f7SLois Curfman McInnes PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 13397bb86f7SLois Curfman McInnes PetscObject o4) 13497bb86f7SLois Curfman McInnes 13597bb86f7SLois Curfman McInnes Notes: 13697bb86f7SLois Curfman McInnes You should also register each integer event with the command 13797bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 13897bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 13997bb86f7SLois Curfman McInnes 14097bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 14197bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 14297bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 14397bb86f7SLois Curfman McInnes to supplement this PETSc information. 14497bb86f7SLois Curfman McInnes 14597bb86f7SLois Curfman McInnes Example of Usage: 14697bb86f7SLois Curfman McInnes $ #define USER_EVENT 75 147*0eb211faSLois Curfman McInnes $ int user_event_flops; 14897bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 14997bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 15097bb86f7SLois Curfman McInnes $ [code segment to monitor] 151*0eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 15297bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 15397bb86f7SLois Curfman McInnes 15497bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 15597bb86f7SLois Curfman McInnes 15697bb86f7SLois Curfman McInnes .keywords: log, event, end 15797bb86f7SLois Curfman McInnes M*/ 15897bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) \ 15997bb86f7SLois Curfman McInnes { if (_PLE) (*_PLE)(e,_tacky,(PetscObject)o1,(PetscObject)o2,\ 16097bb86f7SLois Curfman McInnes (PetscObject)o3,(PetscObject)o4);} _tacky--;} 16197bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) {((PetscObject)(c))->parent = (PetscObject) p;} 16297bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 16397bb86f7SLois Curfman McInnes PLogObjectParent(p,(d)[_i]);} 16497bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 16597bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 16697bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 16797bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 16897bb86f7SLois Curfman McInnes 16997bb86f7SLois Curfman McInnes #else 17097bb86f7SLois Curfman McInnes 17197bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) 17297bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) 17397bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 17497bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 17597bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) 17697bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c) 17797bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 17897bb86f7SLois Curfman McInnes #endif 17997bb86f7SLois Curfman McInnes 18097bb86f7SLois Curfman McInnes #endif 181