xref: /petsc/include/petsclog.h (revision 6f1e8a0f5d71de07c4598e909759db3fc5f8317d)
1*6f1e8a0fSLois Curfman McInnes /* $Id: plog.h,v 1.13 1995/08/15 20:29:32 bsmith 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 /*
12*6f1e8a0fSLois Curfman McInnes   If you add it here, make sure you add to petsc/bin/petscsim.cfg
13*6f1e8a0fSLois Curfman McInnes   and src/sys/src/plog.c!!
1497bb86f7SLois Curfman McInnes */
1597bb86f7SLois Curfman McInnes #define MAT_Mult                                0
16*6f1e8a0fSLois Curfman McInnes #define MAT_AssemblyBegin                       1
17*6f1e8a0fSLois 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
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
57*6f1e8a0fSLois Curfman McInnes #define VEC_AssemblyBegin                       44
58*6f1e8a0fSLois Curfman McInnes #define VEC_AssemblyEnd                         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 
7919b02663SBarry Smith /* Global flop counter */
8019b02663SBarry Smith extern double _TotalFlops;
8119b02663SBarry Smith #if defined(PETSC_LOG)
8219b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;}
8319b02663SBarry Smith #else
8419b02663SBarry Smith #define PLogFlops(n)
8519b02663SBarry Smith #endif
8619b02663SBarry Smith 
8719b02663SBarry Smith /*M
8819b02663SBarry Smith    PLogFlops - Adds floating point operations to the global counter.
8919b02663SBarry Smith 
9019b02663SBarry Smith    Input Parameter:
9119b02663SBarry Smith .  f - flop counter
9219b02663SBarry Smith 
9319b02663SBarry Smith    Synopsis:
9419b02663SBarry Smith    PLogFlops(int f)
9519b02663SBarry Smith 
9619b02663SBarry Smith    Notes:
9719b02663SBarry Smith    A global counter logs all PETSc flop counts.  The user can use
9819b02663SBarry Smith    PLogFlops() to increment this counter to include flops for the
9919b02663SBarry Smith    application code.
10019b02663SBarry Smith 
10119b02663SBarry Smith    PETSc automatically logs library events if the code has been
10219b02663SBarry Smith    compiled with -DPETSC_LOG (which is the default), and -log,
10319b02663SBarry Smith    -log_summary, or -log_all are specified.  PLogFlops() is
10419b02663SBarry Smith    intended for logging user flops to supplement this PETSc
10519b02663SBarry Smith    information.
10619b02663SBarry Smith 
10719b02663SBarry Smith     Example of Usage:
10819b02663SBarry Smith $     #define USER_EVENT 75
10919b02663SBarry Smith $     PLogEventRegister(USER_EVENT,"User event");
11019b02663SBarry Smith $     PLogEventBegin(USER_EVENT,0,0,0,0);
11119b02663SBarry Smith $     [code segment to monitor]
11219b02663SBarry Smith $     PLogFlops(user_flops)
11319b02663SBarry Smith $     PLogEventEnd(USER_EVENT,0,0,0,0);
11419b02663SBarry Smith 
11519b02663SBarry Smith .seealso:  PLogEventRegister(), PLogEventBegin(), PLogEventEnd()
11619b02663SBarry Smith 
11719b02663SBarry Smith .keywords:  Petsc, log, flops, floating point operations
11819b02663SBarry Smith M*/
11919b02663SBarry Smith 
12019b02663SBarry Smith extern int PLogPrint(MPI_Comm,FILE *);
12119b02663SBarry Smith extern int PLogBegin();
12219b02663SBarry Smith extern int PLogAllBegin();
12319b02663SBarry Smith extern int PLogDump(char*);
12419b02663SBarry 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
13419b02663SBarry 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
17219b02663SBarry 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--;}
208464493b3SBarry Smith #define PLogObjectParent(p,c) {PETSCVALIDHEADER((PetscObject)c); \
209464493b3SBarry Smith                                PETSCVALIDHEADER((PetscObject)p);\
210bfce26a3SBarry Smith                                ((PetscObject)(c))->parent = (PetscObject) p;}
21197bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d) {int _i; for ( _i=0; _i<n; _i++ ) \
21297bb86f7SLois Curfman McInnes           PLogObjectParent(p,(d)[_i]);}
21397bb86f7SLois Curfman McInnes #define PLogObjectCreate(h) {if (_PHC) (*_PHC)((PetscObject)h);}
21497bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h) {if (_PHD) (*_PHD)((PetscObject)h);}
21588cf3e7dSBarry Smith #define PLogObjectMemory(p,m) {((PetscObject)(p))->mem += (m);}
21697bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...);
21797bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
218c5d91301SLois Curfman McInnes extern int PLogDestroy();
21997bb86f7SLois Curfman McInnes 
22097bb86f7SLois Curfman McInnes #else
22197bb86f7SLois Curfman McInnes 
22297bb86f7SLois Curfman McInnes #define PLogObjectCreate(h)
22397bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h)
224a311837eSLois Curfman McInnes #define PLogObjectMemory(p,m)
22597bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
22697bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
22797bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c)
22897bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c)
22997bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
23097bb86f7SLois Curfman McInnes #endif
23197bb86f7SLois Curfman McInnes 
23297bb86f7SLois Curfman McInnes #endif
233