xref: /petsc/include/petsclog.h (revision 41debadde1efca076ce2f4a91d7b1a12d61f70f4)
1*41debaddSBarry Smith /* $Id: plog.h,v 1.26 1995/11/15 01:18:35 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 /*
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
4597bb86f7SLois Curfman McInnes 
4697bb86f7SLois Curfman McInnes #define VEC_Dot                                 30
4797bb86f7SLois Curfman McInnes #define VEC_Norm                                31
4897bb86f7SLois Curfman McInnes #define VEC_Max                                 34
4997bb86f7SLois Curfman McInnes #define VEC_Min                                 35
5097bb86f7SLois Curfman McInnes #define VEC_TDot                                36
5197bb86f7SLois Curfman McInnes #define VEC_Scale                               37
5297bb86f7SLois Curfman McInnes #define VEC_Copy                                38
5397bb86f7SLois Curfman McInnes #define VEC_Set                                 39
5497bb86f7SLois Curfman McInnes #define VEC_AXPY                                40
5597bb86f7SLois Curfman McInnes #define VEC_AYPX                                41
5697bb86f7SLois Curfman McInnes #define VEC_Swap                                42
5797bb86f7SLois Curfman McInnes #define VEC_WAXPY                               43
586f1e8a0fSLois Curfman McInnes #define VEC_AssemblyBegin                       44
596f1e8a0fSLois Curfman McInnes #define VEC_AssemblyEnd                         45
6097bb86f7SLois Curfman McInnes #define VEC_MTDot                               46
6197bb86f7SLois Curfman McInnes #define VEC_MDot                                47
6297bb86f7SLois Curfman McInnes #define VEC_MAXPY                               48
6397bb86f7SLois Curfman McInnes #define VEC_PMult                               49
6463723609SBarry Smith #define VEC_SetValues                           50
65acac4784SBarry Smith #define VEC_Load                                51
66acac4784SBarry Smith #define VEC_View                                52
6797bb86f7SLois Curfman McInnes 
6897bb86f7SLois Curfman McInnes #define SLES_Solve                              55
6997bb86f7SLois Curfman McInnes #define PC_SetUp                                56
7097bb86f7SLois Curfman McInnes #define PC_Apply                                57
7197bb86f7SLois Curfman McInnes #define SLES_SetUp                              58
7297bb86f7SLois Curfman McInnes 
7397bb86f7SLois Curfman McInnes #define SNES_Solve                              60
7497bb86f7SLois Curfman McInnes #define SNES_LineSearch                         61
7597bb86f7SLois Curfman McInnes #define SNES_FunctionEval                       62
7697bb86f7SLois Curfman McInnes #define SNES_JacobianEval                       63
7765067f4aSLois Curfman McInnes #define SNES_MinimizationFunctionEval           64
7805c709e7SLois Curfman McInnes #define SNES_GradientEval                       65
7905c709e7SLois Curfman McInnes #define SNES_HessianEval                        66
8097bb86f7SLois Curfman McInnes 
8102834360SBarry Smith #define MAT_GetSubMatrix                        70
821987afe7SBarry Smith #define KSP_GMRESOrthogonalization              71
83bd3b412fSLois Curfman McInnes #define KSP_Solve                               72
84bd3b412fSLois Curfman McInnes #define MAT_GetSubMatrices                      73
85bd3b412fSLois Curfman McInnes #define VEC_ScatterBegin                        74
86bd3b412fSLois Curfman McInnes #define VEC_ScatterEnd                          75
8702834360SBarry Smith 
88*41debaddSBarry Smith /*
89*41debaddSBarry Smith    event numbers 80 to 99 are reserved for applications, make sure that
90*41debaddSBarry Smith    src/sys/src/plog.c defines enough entries in (*name)[] to go up to
91*41debaddSBarry Smith    PLOG_USER_EVENT_HIGH.
92*41debaddSBarry Smith */
93*41debaddSBarry Smith #define PLOG_USER_EVENT_LOW                     80
94*41debaddSBarry Smith #define PLOG_USER_EVENT_HIGH                    120
9597bb86f7SLois Curfman McInnes 
9619b02663SBarry Smith /* Global flop counter */
9719b02663SBarry Smith extern double _TotalFlops;
9819b02663SBarry Smith #if defined(PETSC_LOG)
9919b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;}
10019b02663SBarry Smith #else
10119b02663SBarry Smith #define PLogFlops(n)
10219b02663SBarry Smith #endif
10319b02663SBarry Smith 
10419b02663SBarry Smith /*M
10519b02663SBarry Smith    PLogFlops - Adds floating point operations to the global counter.
10619b02663SBarry Smith 
10719b02663SBarry Smith    Input Parameter:
10819b02663SBarry Smith .  f - flop counter
10919b02663SBarry Smith 
11019b02663SBarry Smith    Synopsis:
11119b02663SBarry Smith    PLogFlops(int f)
11219b02663SBarry Smith 
11319b02663SBarry Smith    Notes:
11419b02663SBarry Smith    A global counter logs all PETSc flop counts.  The user can use
11519b02663SBarry Smith    PLogFlops() to increment this counter to include flops for the
11619b02663SBarry Smith    application code.
11719b02663SBarry Smith 
11819b02663SBarry Smith    PETSc automatically logs library events if the code has been
11919b02663SBarry Smith    compiled with -DPETSC_LOG (which is the default), and -log,
12019b02663SBarry Smith    -log_summary, or -log_all are specified.  PLogFlops() is
12119b02663SBarry Smith    intended for logging user flops to supplement this PETSc
12219b02663SBarry Smith    information.
12319b02663SBarry Smith 
12419b02663SBarry Smith     Example of Usage:
125*41debaddSBarry Smith $     #define USER_EVENT PLOG_USER_EVENT_LOW
12619b02663SBarry Smith $     PLogEventRegister(USER_EVENT,"User event");
12719b02663SBarry Smith $     PLogEventBegin(USER_EVENT,0,0,0,0);
12819b02663SBarry Smith $     [code segment to monitor]
12919b02663SBarry Smith $     PLogFlops(user_flops)
13019b02663SBarry Smith $     PLogEventEnd(USER_EVENT,0,0,0,0);
13119b02663SBarry Smith 
13219b02663SBarry Smith .seealso:  PLogEventRegister(), PLogEventBegin(), PLogEventEnd()
13319b02663SBarry Smith 
13419b02663SBarry Smith .keywords:  Petsc, log, flops, floating point operations
13519b02663SBarry Smith M*/
13619b02663SBarry Smith 
13719b02663SBarry Smith extern int PLogPrint(MPI_Comm,FILE *);
13819b02663SBarry Smith extern int PLogBegin();
13919b02663SBarry Smith extern int PLogAllBegin();
14019b02663SBarry Smith extern int PLogDump(char*);
14119b02663SBarry Smith 
14297bb86f7SLois Curfman McInnes #if defined(PETSC_LOG)
14397bb86f7SLois Curfman McInnes 
14497bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
14597bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
14697bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject);
14797bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject);
14897bb86f7SLois Curfman McInnes extern int PLogEventRegister(int,char*);
14997bb86f7SLois Curfman McInnes 
15097bb86f7SLois Curfman McInnes /*M
15119b02663SBarry Smith    PLogEventBegin - Logs the beginning of a user event.
15297bb86f7SLois Curfman McInnes 
15397bb86f7SLois Curfman McInnes    Input Parameters:
154*41debaddSBarry Smith .  e - integer associated with the event (PLOG_USER_EVENT_LOW <= e < PLOG_USER_EVENT_HIGH)
15597bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
15697bb86f7SLois Curfman McInnes 
15797bb86f7SLois Curfman McInnes    Synopsis:
15897bb86f7SLois Curfman McInnes    PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
15997bb86f7SLois Curfman McInnes                   PetscObject o4)
16097bb86f7SLois Curfman McInnes 
16197bb86f7SLois Curfman McInnes    Notes:
16297bb86f7SLois Curfman McInnes    You should also register each integer event with the command
16397bb86f7SLois Curfman McInnes    PLogRegisterEvent().  The source code must be compiled with
16497bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
16597bb86f7SLois Curfman McInnes 
16697bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
16797bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
16897bb86f7SLois Curfman McInnes    specified.  PLogEventBegin() is intended for logging user events
16997bb86f7SLois Curfman McInnes    to supplement this PETSc information.
17097bb86f7SLois Curfman McInnes 
17197bb86f7SLois Curfman McInnes     Example of Usage:
172*41debaddSBarry Smith $     #define USER_EVENT PLOG_USER_EVENT_LOW
1730eb211faSLois Curfman McInnes $     int user_event_flops;
17497bb86f7SLois Curfman McInnes $     PLogEventRegister(USER_EVENT,"User event");
17597bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
17697bb86f7SLois Curfman McInnes $        [code segment to monitor]
1770eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
17897bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
17997bb86f7SLois Curfman McInnes 
18097bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops()
18197bb86f7SLois Curfman McInnes 
18297bb86f7SLois Curfman McInnes .keywords: log, event, begin
18397bb86f7SLois Curfman McInnes M*/
18497bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0;\
18597bb86f7SLois Curfman McInnes           { _tacky++;if (_PLB) (*_PLB)(e,_tacky,(PetscObject)o1,\
18697bb86f7SLois Curfman McInnes            (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);};
18797bb86f7SLois Curfman McInnes 
18897bb86f7SLois Curfman McInnes /*M
18919b02663SBarry Smith    PLogEventEnd - Log the end of a user event.
19097bb86f7SLois Curfman McInnes 
19197bb86f7SLois Curfman McInnes    Input Parameters:
192*41debaddSBarry Smith .  e - integer associated with the event (PLOG_USER_EVENT_LOW <= e < PLOG_USER_EVENT_HIGH)
19397bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
19497bb86f7SLois Curfman McInnes 
19597bb86f7SLois Curfman McInnes    Synopsis:
19697bb86f7SLois Curfman McInnes    PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
19797bb86f7SLois Curfman McInnes                 PetscObject o4)
19897bb86f7SLois Curfman McInnes 
19997bb86f7SLois Curfman McInnes    Notes:
20097bb86f7SLois Curfman McInnes    You should also register each integer event with the command
20197bb86f7SLois Curfman McInnes    PLogRegisterEvent(). Source code must be compiled with
20297bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
20397bb86f7SLois Curfman McInnes 
20497bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
20597bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
20697bb86f7SLois Curfman McInnes    specified.  PLogEventEnd() is intended for logging user events
20797bb86f7SLois Curfman McInnes    to supplement this PETSc information.
20897bb86f7SLois Curfman McInnes 
20997bb86f7SLois Curfman McInnes     Example of Usage:
210*41debaddSBarry Smith $     #define USER_EVENT PLOG_EVENT_USER_LOW
2110eb211faSLois Curfman McInnes $     int user_event_flops;
21297bb86f7SLois Curfman McInnes $     PLogEventRegister(USER_EVENT,"User event");
21397bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
21497bb86f7SLois Curfman McInnes $        [code segment to monitor]
2150eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
21697bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
21797bb86f7SLois Curfman McInnes 
21897bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops()
21997bb86f7SLois Curfman McInnes 
22097bb86f7SLois Curfman McInnes .keywords: log, event, end
22197bb86f7SLois Curfman McInnes M*/
222416022c9SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {if (_PLE) (*_PLE)(e,_tacky,(PetscObject)o1,\
223416022c9SBarry Smith                                     (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}\
224416022c9SBarry Smith                                     _tacky--;}
225464493b3SBarry Smith #define PLogObjectParent(p,c)       {PETSCVALIDHEADER((PetscObject)c); \
226464493b3SBarry Smith                                      PETSCVALIDHEADER((PetscObject)p);\
227bfce26a3SBarry Smith                                      ((PetscObject)(c))->parent = (PetscObject) p;}
22897bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d)    {int _i; for ( _i=0; _i<n; _i++ ) \
22997bb86f7SLois Curfman McInnes                                     PLogObjectParent(p,(d)[_i]);}
23097bb86f7SLois Curfman McInnes #define PLogObjectCreate(h)         {if (_PHC) (*_PHC)((PetscObject)h);}
23197bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h)        {if (_PHD) (*_PHD)((PetscObject)h);}
2326ac32965SLois Curfman McInnes #define PLogObjectMemory(p,m)       {PETSCVALIDHEADER((PetscObject)p);\
2336ac32965SLois Curfman McInnes                                     ((PetscObject)(p))->mem += (m);}
23497bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...);
23597bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
236c5d91301SLois Curfman McInnes extern int PLogDestroy();
23797bb86f7SLois Curfman McInnes 
23897bb86f7SLois Curfman McInnes #else
23997bb86f7SLois Curfman McInnes 
24097bb86f7SLois Curfman McInnes #define PLogObjectCreate(h)
24197bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h)
242a311837eSLois Curfman McInnes #define PLogObjectMemory(p,m)
24397bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
24497bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
24597bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c)
24697bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c)
24797bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
24897bb86f7SLois Curfman McInnes #endif
24997bb86f7SLois Curfman McInnes 
25097bb86f7SLois Curfman McInnes #endif
251*41debaddSBarry Smith 
252