xref: /petsc/include/petsclog.h (revision 4dcbc457900146ef5d50d73d5ac8c30833b59605)
1*4dcbc457SBarry Smith /* $Id: plog.h,v 1.27 1995/11/19 23:30:57 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 /*
12bd3b412fSLois Curfman McInnes   If you add an event here, make sure you add to petsc/bin/petscview.cfg
13bd3b412fSLois Curfman McInnes   and petsc/src/sys/src/plog.c!!
1497bb86f7SLois Curfman McInnes */
1597bb86f7SLois Curfman McInnes #define MAT_Mult                                0
166f1e8a0fSLois Curfman McInnes #define MAT_AssemblyBegin                       1
176f1e8a0fSLois Curfman McInnes #define MAT_AssemblyEnd                         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
42acac4784SBarry Smith #define MAT_Load                                27
43acac4784SBarry Smith #define MAT_View                                28
4402834360SBarry Smith #define MAT_ILUFactor                           29
45*4dcbc457SBarry Smith #define MAT_GetSubMatrix                        30
46*4dcbc457SBarry Smith #define MAT_GetSubMatrices                      31
4797bb86f7SLois Curfman McInnes 
48*4dcbc457SBarry Smith #define VEC_Dot                                 40
49*4dcbc457SBarry Smith #define VEC_Norm                                41
50*4dcbc457SBarry Smith #define VEC_Max                                 42
51*4dcbc457SBarry Smith #define VEC_Min                                 43
52*4dcbc457SBarry Smith #define VEC_TDot                                44
53*4dcbc457SBarry Smith #define VEC_Scale                               45
54*4dcbc457SBarry Smith #define VEC_Copy                                46
55*4dcbc457SBarry Smith #define VEC_Set                                 47
56*4dcbc457SBarry Smith #define VEC_AXPY                                48
57*4dcbc457SBarry Smith #define VEC_AYPX                                49
58*4dcbc457SBarry Smith #define VEC_Swap                                50
59*4dcbc457SBarry Smith #define VEC_WAXPY                               51
60*4dcbc457SBarry Smith #define VEC_AssemblyBegin                       52
61*4dcbc457SBarry Smith #define VEC_AssemblyEnd                         53
62*4dcbc457SBarry Smith #define VEC_MTDot                               54
63*4dcbc457SBarry Smith #define VEC_MDot                                55
64*4dcbc457SBarry Smith #define VEC_MAXPY                               56
65*4dcbc457SBarry Smith #define VEC_PMult                               57
66*4dcbc457SBarry Smith #define VEC_SetValues                           58
67*4dcbc457SBarry Smith #define VEC_Load                                59
68*4dcbc457SBarry Smith #define VEC_View                                60
69*4dcbc457SBarry Smith #define VEC_ScatterBegin                        61
70*4dcbc457SBarry Smith #define VEC_ScatterEnd                          62
7197bb86f7SLois Curfman McInnes 
72*4dcbc457SBarry Smith #define SLES_Solve                              70
73*4dcbc457SBarry Smith #define SLES_SetUp                              71
7497bb86f7SLois Curfman McInnes 
75*4dcbc457SBarry Smith #define KSP_GMRESOrthogonalization              72
76*4dcbc457SBarry Smith #define KSP_Solve                               73
7797bb86f7SLois Curfman McInnes 
78*4dcbc457SBarry Smith #define PC_SetUp                                75
79*4dcbc457SBarry Smith #define PC_Apply                                76
80*4dcbc457SBarry Smith 
81*4dcbc457SBarry Smith #define SNES_Solve                              80
82*4dcbc457SBarry Smith #define SNES_LineSearch                         81
83*4dcbc457SBarry Smith #define SNES_FunctionEval                       82
84*4dcbc457SBarry Smith #define SNES_JacobianEval                       83
85*4dcbc457SBarry Smith #define SNES_MinimizationFunctionEval           84
86*4dcbc457SBarry Smith #define SNES_GradientEval                       85
87*4dcbc457SBarry Smith #define SNES_HessianEval                        86
88*4dcbc457SBarry Smith 
8902834360SBarry Smith 
9041debaddSBarry Smith /*
91*4dcbc457SBarry Smith    event numbers  PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved
92*4dcbc457SBarry Smith    for applications, make sure that src/sys/src/plog.c defines enough entries
93*4dcbc457SBarry Smith    in (*name)[] to go up to PLOG_USER_EVENT_HIGH.
9441debaddSBarry Smith */
95*4dcbc457SBarry Smith #define PLOG_USER_EVENT_LOW                     120
96*4dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH                    200
9797bb86f7SLois Curfman McInnes 
9819b02663SBarry Smith /* Global flop counter */
9919b02663SBarry Smith extern double _TotalFlops;
10019b02663SBarry Smith #if defined(PETSC_LOG)
10119b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;}
10219b02663SBarry Smith #else
10319b02663SBarry Smith #define PLogFlops(n)
10419b02663SBarry Smith #endif
10519b02663SBarry Smith 
10619b02663SBarry Smith /*M
10719b02663SBarry Smith    PLogFlops - Adds floating point operations to the global counter.
10819b02663SBarry Smith 
10919b02663SBarry Smith    Input Parameter:
11019b02663SBarry Smith .  f - flop counter
11119b02663SBarry Smith 
11219b02663SBarry Smith    Synopsis:
11319b02663SBarry Smith    PLogFlops(int f)
11419b02663SBarry Smith 
11519b02663SBarry Smith    Notes:
11619b02663SBarry Smith    A global counter logs all PETSc flop counts.  The user can use
11719b02663SBarry Smith    PLogFlops() to increment this counter to include flops for the
11819b02663SBarry Smith    application code.
11919b02663SBarry Smith 
12019b02663SBarry Smith    PETSc automatically logs library events if the code has been
12119b02663SBarry Smith    compiled with -DPETSC_LOG (which is the default), and -log,
12219b02663SBarry Smith    -log_summary, or -log_all are specified.  PLogFlops() is
12319b02663SBarry Smith    intended for logging user flops to supplement this PETSc
12419b02663SBarry Smith    information.
12519b02663SBarry Smith 
12619b02663SBarry Smith     Example of Usage:
12741debaddSBarry Smith $     #define USER_EVENT PLOG_USER_EVENT_LOW
12819b02663SBarry Smith $     PLogEventRegister(USER_EVENT,"User event");
12919b02663SBarry Smith $     PLogEventBegin(USER_EVENT,0,0,0,0);
13019b02663SBarry Smith $     [code segment to monitor]
13119b02663SBarry Smith $     PLogFlops(user_flops)
13219b02663SBarry Smith $     PLogEventEnd(USER_EVENT,0,0,0,0);
13319b02663SBarry Smith 
13419b02663SBarry Smith .seealso:  PLogEventRegister(), PLogEventBegin(), PLogEventEnd()
13519b02663SBarry Smith 
13619b02663SBarry Smith .keywords:  Petsc, log, flops, floating point operations
13719b02663SBarry Smith M*/
13819b02663SBarry Smith 
13919b02663SBarry Smith extern int PLogPrint(MPI_Comm,FILE *);
14019b02663SBarry Smith extern int PLogBegin();
14119b02663SBarry Smith extern int PLogAllBegin();
14219b02663SBarry Smith extern int PLogDump(char*);
14319b02663SBarry Smith 
14497bb86f7SLois Curfman McInnes #if defined(PETSC_LOG)
14597bb86f7SLois Curfman McInnes 
14697bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
14797bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
14897bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject);
14997bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject);
15097bb86f7SLois Curfman McInnes extern int PLogEventRegister(int,char*);
15197bb86f7SLois Curfman McInnes 
15297bb86f7SLois Curfman McInnes /*M
15319b02663SBarry Smith    PLogEventBegin - Logs the beginning of a user event.
15497bb86f7SLois Curfman McInnes 
15597bb86f7SLois Curfman McInnes    Input Parameters:
15641debaddSBarry Smith .  e - integer associated with the event (PLOG_USER_EVENT_LOW <= e < PLOG_USER_EVENT_HIGH)
15797bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
15897bb86f7SLois Curfman McInnes 
15997bb86f7SLois Curfman McInnes    Synopsis:
16097bb86f7SLois Curfman McInnes    PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
16197bb86f7SLois Curfman McInnes                   PetscObject o4)
16297bb86f7SLois Curfman McInnes 
16397bb86f7SLois Curfman McInnes    Notes:
16497bb86f7SLois Curfman McInnes    You should also register each integer event with the command
16597bb86f7SLois Curfman McInnes    PLogRegisterEvent().  The source code must be compiled with
16697bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
16797bb86f7SLois Curfman McInnes 
16897bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
16997bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
17097bb86f7SLois Curfman McInnes    specified.  PLogEventBegin() is intended for logging user events
17197bb86f7SLois Curfman McInnes    to supplement this PETSc information.
17297bb86f7SLois Curfman McInnes 
17397bb86f7SLois Curfman McInnes     Example of Usage:
17441debaddSBarry Smith $     #define USER_EVENT PLOG_USER_EVENT_LOW
1750eb211faSLois Curfman McInnes $     int user_event_flops;
17697bb86f7SLois Curfman McInnes $     PLogEventRegister(USER_EVENT,"User event");
17797bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
17897bb86f7SLois Curfman McInnes $        [code segment to monitor]
1790eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
18097bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
18197bb86f7SLois Curfman McInnes 
18297bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops()
18397bb86f7SLois Curfman McInnes 
18497bb86f7SLois Curfman McInnes .keywords: log, event, begin
18597bb86f7SLois Curfman McInnes M*/
18697bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0;\
18797bb86f7SLois Curfman McInnes           { _tacky++;if (_PLB) (*_PLB)(e,_tacky,(PetscObject)o1,\
18897bb86f7SLois Curfman McInnes            (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);};
18997bb86f7SLois Curfman McInnes 
19097bb86f7SLois Curfman McInnes /*M
19119b02663SBarry Smith    PLogEventEnd - Log the end of a user event.
19297bb86f7SLois Curfman McInnes 
19397bb86f7SLois Curfman McInnes    Input Parameters:
19441debaddSBarry Smith .  e - integer associated with the event (PLOG_USER_EVENT_LOW <= e < PLOG_USER_EVENT_HIGH)
19597bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
19697bb86f7SLois Curfman McInnes 
19797bb86f7SLois Curfman McInnes    Synopsis:
19897bb86f7SLois Curfman McInnes    PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
19997bb86f7SLois Curfman McInnes                 PetscObject o4)
20097bb86f7SLois Curfman McInnes 
20197bb86f7SLois Curfman McInnes    Notes:
20297bb86f7SLois Curfman McInnes    You should also register each integer event with the command
20397bb86f7SLois Curfman McInnes    PLogRegisterEvent(). Source code must be compiled with
20497bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
20597bb86f7SLois Curfman McInnes 
20697bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
20797bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
20897bb86f7SLois Curfman McInnes    specified.  PLogEventEnd() is intended for logging user events
20997bb86f7SLois Curfman McInnes    to supplement this PETSc information.
21097bb86f7SLois Curfman McInnes 
21197bb86f7SLois Curfman McInnes     Example of Usage:
21241debaddSBarry Smith $     #define USER_EVENT PLOG_EVENT_USER_LOW
2130eb211faSLois Curfman McInnes $     int user_event_flops;
21497bb86f7SLois Curfman McInnes $     PLogEventRegister(USER_EVENT,"User event");
21597bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
21697bb86f7SLois Curfman McInnes $        [code segment to monitor]
2170eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
21897bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
21997bb86f7SLois Curfman McInnes 
22097bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops()
22197bb86f7SLois Curfman McInnes 
22297bb86f7SLois Curfman McInnes .keywords: log, event, end
22397bb86f7SLois Curfman McInnes M*/
224416022c9SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {if (_PLE) (*_PLE)(e,_tacky,(PetscObject)o1,\
225416022c9SBarry Smith                                     (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}\
226416022c9SBarry Smith                                     _tacky--;}
227464493b3SBarry Smith #define PLogObjectParent(p,c)       {PETSCVALIDHEADER((PetscObject)c); \
228464493b3SBarry Smith                                      PETSCVALIDHEADER((PetscObject)p);\
229bfce26a3SBarry Smith                                      ((PetscObject)(c))->parent = (PetscObject) p;}
23097bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d)    {int _i; for ( _i=0; _i<n; _i++ ) \
23197bb86f7SLois Curfman McInnes                                     PLogObjectParent(p,(d)[_i]);}
23297bb86f7SLois Curfman McInnes #define PLogObjectCreate(h)         {if (_PHC) (*_PHC)((PetscObject)h);}
23397bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h)        {if (_PHD) (*_PHD)((PetscObject)h);}
2346ac32965SLois Curfman McInnes #define PLogObjectMemory(p,m)       {PETSCVALIDHEADER((PetscObject)p);\
2356ac32965SLois Curfman McInnes                                     ((PetscObject)(p))->mem += (m);}
23697bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...);
23797bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
238c5d91301SLois Curfman McInnes extern int PLogDestroy();
23997bb86f7SLois Curfman McInnes 
24097bb86f7SLois Curfman McInnes #else
24197bb86f7SLois Curfman McInnes 
24297bb86f7SLois Curfman McInnes #define PLogObjectCreate(h)
24397bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h)
244a311837eSLois Curfman McInnes #define PLogObjectMemory(p,m)
24597bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
24697bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
24797bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c)
24897bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c)
24997bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
25097bb86f7SLois Curfman McInnes #endif
25197bb86f7SLois Curfman McInnes 
25297bb86f7SLois Curfman McInnes #endif
25341debaddSBarry Smith 
254