xref: /petsc/include/petsclog.h (revision 19b02663486cac44e472f74803a9e3126f30ce1d)
1*19b02663SBarry Smith /* $Id: plog.h,v 1.10 1995/08/06 20:01:05 curfman 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 
79*19b02663SBarry Smith /* Global flop counter */
80*19b02663SBarry Smith extern double _TotalFlops;
81*19b02663SBarry Smith #if defined(PETSC_LOG)
82*19b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;}
83*19b02663SBarry Smith #else
84*19b02663SBarry Smith #define PLogFlops(n)
85*19b02663SBarry Smith #endif
86*19b02663SBarry Smith 
87*19b02663SBarry Smith /*M
88*19b02663SBarry Smith    PLogFlops - Adds floating point operations to the global counter.
89*19b02663SBarry Smith 
90*19b02663SBarry Smith    Input Parameter:
91*19b02663SBarry Smith .  f - flop counter
92*19b02663SBarry Smith 
93*19b02663SBarry Smith    Synopsis:
94*19b02663SBarry Smith    PLogFlops(int f)
95*19b02663SBarry Smith 
96*19b02663SBarry Smith    Notes:
97*19b02663SBarry Smith    A global counter logs all PETSc flop counts.  The user can use
98*19b02663SBarry Smith    PLogFlops() to increment this counter to include flops for the
99*19b02663SBarry Smith    application code.
100*19b02663SBarry Smith 
101*19b02663SBarry Smith    PETSc automatically logs library events if the code has been
102*19b02663SBarry Smith    compiled with -DPETSC_LOG (which is the default), and -log,
103*19b02663SBarry Smith    -log_summary, or -log_all are specified.  PLogFlops() is
104*19b02663SBarry Smith    intended for logging user flops to supplement this PETSc
105*19b02663SBarry Smith    information.
106*19b02663SBarry Smith 
107*19b02663SBarry Smith     Example of Usage:
108*19b02663SBarry Smith $     #define USER_EVENT 75
109*19b02663SBarry Smith $     PLogEventRegister(USER_EVENT,"User event");
110*19b02663SBarry Smith $     PLogEventBegin(USER_EVENT,0,0,0,0);
111*19b02663SBarry Smith $     [code segment to monitor]
112*19b02663SBarry Smith $     PLogFlops(user_flops)
113*19b02663SBarry Smith $     PLogEventEnd(USER_EVENT,0,0,0,0);
114*19b02663SBarry Smith 
115*19b02663SBarry Smith .seealso:  PLogEventRegister(), PLogEventBegin(), PLogEventEnd()
116*19b02663SBarry Smith 
117*19b02663SBarry Smith .keywords:  Petsc, log, flops, floating point operations
118*19b02663SBarry Smith M*/
119*19b02663SBarry Smith 
120*19b02663SBarry Smith extern int PLogPrint(MPI_Comm,FILE *);
121*19b02663SBarry Smith extern int PLogBegin();
122*19b02663SBarry Smith extern int PLogAllBegin();
123*19b02663SBarry Smith extern int PLogDump(char*);
124*19b02663SBarry Smith 
12597bb86f7SLois Curfman McInnes #if defined(PETSC_LOG)
12697bb86f7SLois Curfman McInnes 
12797bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
12897bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
12997bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject);
13097bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject);
13197bb86f7SLois Curfman McInnes extern int PLogEventRegister(int,char*);
13297bb86f7SLois Curfman McInnes 
13397bb86f7SLois Curfman McInnes /*M
134*19b02663SBarry Smith    PLogEventBegin - Logs the beginning of a user event.
13597bb86f7SLois Curfman McInnes 
13697bb86f7SLois Curfman McInnes    Input Parameters:
13797bb86f7SLois Curfman McInnes .  e - integer associated with the event (69 < e < 89)
13897bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
13997bb86f7SLois Curfman McInnes 
14097bb86f7SLois Curfman McInnes    Synopsis:
14197bb86f7SLois Curfman McInnes    PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
14297bb86f7SLois Curfman McInnes                   PetscObject o4)
14397bb86f7SLois Curfman McInnes 
14497bb86f7SLois Curfman McInnes    Notes:
14597bb86f7SLois Curfman McInnes    You should also register each integer event with the command
14697bb86f7SLois Curfman McInnes    PLogRegisterEvent().  The source code must be compiled with
14797bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
14897bb86f7SLois Curfman McInnes 
14997bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
15097bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
15197bb86f7SLois Curfman McInnes    specified.  PLogEventBegin() is intended for logging user events
15297bb86f7SLois Curfman McInnes    to supplement this PETSc information.
15397bb86f7SLois Curfman McInnes 
15497bb86f7SLois Curfman McInnes     Example of Usage:
15597bb86f7SLois Curfman McInnes $     #define USER_EVENT 75
1560eb211faSLois Curfman McInnes $     int user_event_flops;
15797bb86f7SLois Curfman McInnes $     PLogEventRegister(USER_EVENT,"User event");
15897bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
15997bb86f7SLois Curfman McInnes $        [code segment to monitor]
1600eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
16197bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
16297bb86f7SLois Curfman McInnes 
16397bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops()
16497bb86f7SLois Curfman McInnes 
16597bb86f7SLois Curfman McInnes .keywords: log, event, begin
16697bb86f7SLois Curfman McInnes M*/
16797bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0;\
16897bb86f7SLois Curfman McInnes           { _tacky++;if (_PLB) (*_PLB)(e,_tacky,(PetscObject)o1,\
16997bb86f7SLois Curfman McInnes            (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);};
17097bb86f7SLois Curfman McInnes 
17197bb86f7SLois Curfman McInnes /*M
172*19b02663SBarry Smith    PLogEventEnd - Log the end of a user event.
17397bb86f7SLois Curfman McInnes 
17497bb86f7SLois Curfman McInnes    Input Parameters:
17597bb86f7SLois Curfman McInnes .  e - integer associated with the event (69 < e < 89)
17697bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
17797bb86f7SLois Curfman McInnes 
17897bb86f7SLois Curfman McInnes    Synopsis:
17997bb86f7SLois Curfman McInnes    PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
18097bb86f7SLois Curfman McInnes                 PetscObject o4)
18197bb86f7SLois Curfman McInnes 
18297bb86f7SLois Curfman McInnes    Notes:
18397bb86f7SLois Curfman McInnes    You should also register each integer event with the command
18497bb86f7SLois Curfman McInnes    PLogRegisterEvent(). Source code must be compiled with
18597bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
18697bb86f7SLois Curfman McInnes 
18797bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
18897bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
18997bb86f7SLois Curfman McInnes    specified.  PLogEventEnd() is intended for logging user events
19097bb86f7SLois Curfman McInnes    to supplement this PETSc information.
19197bb86f7SLois Curfman McInnes 
19297bb86f7SLois Curfman McInnes     Example of Usage:
19397bb86f7SLois Curfman McInnes $     #define USER_EVENT 75
1940eb211faSLois Curfman McInnes $     int user_event_flops;
19597bb86f7SLois Curfman McInnes $     PLogEventRegister(USER_EVENT,"User event");
19697bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
19797bb86f7SLois Curfman McInnes $        [code segment to monitor]
1980eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
19997bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
20097bb86f7SLois Curfman McInnes 
20197bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops()
20297bb86f7SLois Curfman McInnes 
20397bb86f7SLois Curfman McInnes .keywords: log, event, end
20497bb86f7SLois Curfman McInnes M*/
20597bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4) \
20697bb86f7SLois Curfman McInnes           { if (_PLE) (*_PLE)(e,_tacky,(PetscObject)o1,(PetscObject)o2,\
20797bb86f7SLois Curfman McInnes                              (PetscObject)o3,(PetscObject)o4);} _tacky--;}
20897bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c) {((PetscObject)(c))->parent = (PetscObject) p;}
20997bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \
21097bb86f7SLois Curfman McInnes           PLogObjectParent(p,(d)[_i]);}
21197bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);}
21297bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);}
21388cf3e7dSBarry Smith #define PLogObjectMemory(p,m) {((PetscObject)(p))->mem += (m);}
21497bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...);
21597bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
216c5d91301SLois Curfman McInnes extern int PLogDestroy();
21797bb86f7SLois Curfman McInnes 
21897bb86f7SLois Curfman McInnes #else
21997bb86f7SLois Curfman McInnes 
22097bb86f7SLois Curfman McInnes #define PLogObjectCreate(h)
22197bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h)
222a311837eSLois Curfman McInnes #define PLogObjectMemory(p,m)
22397bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
22497bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
22597bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c)
22697bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c)
22797bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
22897bb86f7SLois Curfman McInnes #endif
22997bb86f7SLois Curfman McInnes 
23097bb86f7SLois Curfman McInnes #endif
231