1*88cf3e7dSBarry Smith /* $Id: plog.h,v 1.7 1995/08/03 02:55:25 bsmith Exp bsmith $ */ 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 40891de242SLois Curfman McInnes #define MAT_ForwardSolve 25 41891de242SLois Curfman McInnes #define MAT_BackwardSolve 26 4297bb86f7SLois Curfman McInnes 4397bb86f7SLois Curfman McInnes #define VEC_Dot 30 4497bb86f7SLois Curfman McInnes #define VEC_Norm 31 4597bb86f7SLois Curfman McInnes #define VEC_ASum 32 4697bb86f7SLois Curfman McInnes #define VEC_AMax 33 4797bb86f7SLois Curfman McInnes #define VEC_Max 34 4897bb86f7SLois Curfman McInnes #define VEC_Min 35 4997bb86f7SLois Curfman McInnes #define VEC_TDot 36 5097bb86f7SLois Curfman McInnes #define VEC_Scale 37 5197bb86f7SLois Curfman McInnes #define VEC_Copy 38 5297bb86f7SLois Curfman McInnes #define VEC_Set 39 5397bb86f7SLois Curfman McInnes #define VEC_AXPY 40 5497bb86f7SLois Curfman McInnes #define VEC_AYPX 41 5597bb86f7SLois Curfman McInnes #define VEC_Swap 42 5697bb86f7SLois Curfman McInnes #define VEC_WAXPY 43 5797bb86f7SLois Curfman McInnes #define VEC_BeginAssembly 44 5897bb86f7SLois Curfman McInnes #define VEC_EndAssembly 45 5997bb86f7SLois Curfman McInnes #define VEC_MTDot 46 6097bb86f7SLois Curfman McInnes #define VEC_MDot 47 6197bb86f7SLois Curfman McInnes #define VEC_MAXPY 48 6297bb86f7SLois Curfman McInnes #define VEC_PMult 49 6397bb86f7SLois Curfman McInnes 6497bb86f7SLois Curfman McInnes #define SLES_Solve 55 6597bb86f7SLois Curfman McInnes #define PC_SetUp 56 6697bb86f7SLois Curfman McInnes #define PC_Apply 57 6797bb86f7SLois Curfman McInnes #define SLES_SetUp 58 6897bb86f7SLois Curfman McInnes 6997bb86f7SLois Curfman McInnes #define SNES_Solve 60 7097bb86f7SLois Curfman McInnes #define SNES_LineSearch 61 7197bb86f7SLois Curfman McInnes #define SNES_FunctionEval 62 7297bb86f7SLois Curfman McInnes #define SNES_JacobianEval 63 7365067f4aSLois Curfman McInnes #define SNES_MinimizationFunctionEval 64 7405c709e7SLois Curfman McInnes #define SNES_GradientEval 65 7505c709e7SLois Curfman McInnes #define SNES_HessianEval 66 7697bb86f7SLois Curfman McInnes 7797bb86f7SLois Curfman McInnes /* event numbers 70 to 89 are reserved for applications */ 7897bb86f7SLois Curfman McInnes 7997bb86f7SLois Curfman McInnes #if defined(PETSC_LOG) 8097bb86f7SLois Curfman McInnes 8197bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 8297bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject); 8397bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject); 8497bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject); 8597bb86f7SLois Curfman McInnes extern int PLogEventRegister(int,char*); 8697bb86f7SLois Curfman McInnes 8797bb86f7SLois Curfman McInnes /*M 8897bb86f7SLois Curfman McInnes PLogEventBegin - Logs the beginning of a user event. Note that 890eb211faSLois Curfman McInnes petsc/include/plog.h MUST be included in the user's code to employ 9097bb86f7SLois Curfman McInnes this function. 9197bb86f7SLois Curfman McInnes 9297bb86f7SLois Curfman McInnes Input Parameters: 9397bb86f7SLois Curfman McInnes . e - integer associated with the event (69 < e < 89) 9497bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 9597bb86f7SLois Curfman McInnes 9697bb86f7SLois Curfman McInnes Synopsis: 9797bb86f7SLois Curfman McInnes PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3, 9897bb86f7SLois Curfman McInnes PetscObject o4) 9997bb86f7SLois Curfman McInnes 10097bb86f7SLois Curfman McInnes Notes: 10197bb86f7SLois Curfman McInnes You should also register each integer event with the command 10297bb86f7SLois Curfman McInnes PLogRegisterEvent(). The source code must be compiled with 10397bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 10497bb86f7SLois Curfman McInnes 10597bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 10697bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 10797bb86f7SLois Curfman McInnes specified. PLogEventBegin() is intended for logging user events 10897bb86f7SLois Curfman McInnes to supplement this PETSc information. 10997bb86f7SLois Curfman McInnes 11097bb86f7SLois Curfman McInnes Example of Usage: 11197bb86f7SLois Curfman McInnes $ #define USER_EVENT 75 1120eb211faSLois Curfman McInnes $ int user_event_flops; 11397bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 11497bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 11597bb86f7SLois Curfman McInnes $ [code segment to monitor] 1160eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 11797bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 11897bb86f7SLois Curfman McInnes 11997bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops() 12097bb86f7SLois Curfman McInnes 12197bb86f7SLois Curfman McInnes .keywords: log, event, begin 12297bb86f7SLois Curfman McInnes M*/ 12397bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0;\ 12497bb86f7SLois Curfman McInnes { _tacky++;if (_PLB) (*_PLB)(e,_tacky,(PetscObject)o1,\ 12597bb86f7SLois Curfman McInnes (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}; 12697bb86f7SLois Curfman McInnes 12797bb86f7SLois Curfman McInnes /*M 12897bb86f7SLois Curfman McInnes PLogEventEnd - Log the end of a user event. Note that 1290eb211faSLois Curfman McInnes petsc/include/plog.h MUST be included in the user's code to employ 13097bb86f7SLois Curfman McInnes this function. 13197bb86f7SLois Curfman McInnes 13297bb86f7SLois Curfman McInnes Input Parameters: 13397bb86f7SLois Curfman McInnes . e - integer associated with the event (69 < e < 89) 13497bb86f7SLois Curfman McInnes . o1,o2,o3,o4 - objects associated with the event, or 0 13597bb86f7SLois Curfman McInnes 13697bb86f7SLois Curfman McInnes Synopsis: 13797bb86f7SLois Curfman McInnes PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3, 13897bb86f7SLois Curfman McInnes PetscObject o4) 13997bb86f7SLois Curfman McInnes 14097bb86f7SLois Curfman McInnes Notes: 14197bb86f7SLois Curfman McInnes You should also register each integer event with the command 14297bb86f7SLois Curfman McInnes PLogRegisterEvent(). Source code must be compiled with 14397bb86f7SLois Curfman McInnes -DPETSC_LOG, which is the default. 14497bb86f7SLois Curfman McInnes 14597bb86f7SLois Curfman McInnes PETSc automatically logs library events if the code has been 14697bb86f7SLois Curfman McInnes compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are 14797bb86f7SLois Curfman McInnes specified. PLogEventEnd() is intended for logging user events 14897bb86f7SLois Curfman McInnes to supplement this PETSc information. 14997bb86f7SLois Curfman McInnes 15097bb86f7SLois Curfman McInnes Example of Usage: 15197bb86f7SLois Curfman McInnes $ #define USER_EVENT 75 1520eb211faSLois Curfman McInnes $ int user_event_flops; 15397bb86f7SLois Curfman McInnes $ PLogEventRegister(USER_EVENT,"User event"); 15497bb86f7SLois Curfman McInnes $ PLogEventBegin(USER_EVENT,0,0,0,0); 15597bb86f7SLois Curfman McInnes $ [code segment to monitor] 1560eb211faSLois Curfman McInnes $ PLogFlops(user_event_flops); 15797bb86f7SLois Curfman McInnes $ PLogEventEnd(USER_EVENT,0,0,0,0); 15897bb86f7SLois Curfman McInnes 15997bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops() 16097bb86f7SLois Curfman McInnes 16197bb86f7SLois Curfman McInnes .keywords: log, event, end 16297bb86f7SLois Curfman McInnes M*/ 16397bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) \ 16497bb86f7SLois Curfman McInnes { if (_PLE) (*_PLE)(e,_tacky,(PetscObject)o1,(PetscObject)o2,\ 16597bb86f7SLois Curfman McInnes (PetscObject)o3,(PetscObject)o4);} _tacky--;} 16697bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) {((PetscObject)(c))->parent = (PetscObject) p;} 16797bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \ 16897bb86f7SLois Curfman McInnes PLogObjectParent(p,(d)[_i]);} 16997bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);} 17097bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);} 171*88cf3e7dSBarry Smith #define PLogObjectMemory(p,m) {((PetscObject)(p))->mem += (m);} 17297bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...); 17397bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 17497bb86f7SLois Curfman McInnes 17597bb86f7SLois Curfman McInnes #else 17697bb86f7SLois Curfman McInnes 17797bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) 17897bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) 17997bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) 18097bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) 18197bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) 18297bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c) 18397bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...); 18497bb86f7SLois Curfman McInnes #endif 18597bb86f7SLois Curfman McInnes 18697bb86f7SLois Curfman McInnes #endif 187