xref: /petsc/include/petsclog.h (revision bf5bf444acd538ac2d7e8313ff97568e02de79c3)
1*bf5bf444SLois Curfman McInnes /* $Id: plog.h,v 1.42 1996/01/12 03:56:30 bsmith Exp curfman $ */
297bb86f7SLois Curfman McInnes 
397bb86f7SLois Curfman McInnes /*
44c1da538SLois 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
454dcbc457SBarry Smith #define MAT_GetSubMatrix                        30
464dcbc457SBarry Smith #define MAT_GetSubMatrices                      31
47d7524bf0SBarry Smith #define MAT_GetValues                           32
4897bb86f7SLois Curfman McInnes 
494dcbc457SBarry Smith #define VEC_Dot                                 40
504dcbc457SBarry Smith #define VEC_Norm                                41
514dcbc457SBarry Smith #define VEC_Max                                 42
524dcbc457SBarry Smith #define VEC_Min                                 43
534dcbc457SBarry Smith #define VEC_TDot                                44
544dcbc457SBarry Smith #define VEC_Scale                               45
554dcbc457SBarry Smith #define VEC_Copy                                46
564dcbc457SBarry Smith #define VEC_Set                                 47
574dcbc457SBarry Smith #define VEC_AXPY                                48
584dcbc457SBarry Smith #define VEC_AYPX                                49
594dcbc457SBarry Smith #define VEC_Swap                                50
604dcbc457SBarry Smith #define VEC_WAXPY                               51
614dcbc457SBarry Smith #define VEC_AssemblyBegin                       52
624dcbc457SBarry Smith #define VEC_AssemblyEnd                         53
634dcbc457SBarry Smith #define VEC_MTDot                               54
644dcbc457SBarry Smith #define VEC_MDot                                55
654dcbc457SBarry Smith #define VEC_MAXPY                               56
664dcbc457SBarry Smith #define VEC_PMult                               57
674dcbc457SBarry Smith #define VEC_SetValues                           58
684dcbc457SBarry Smith #define VEC_Load                                59
694dcbc457SBarry Smith #define VEC_View                                60
704dcbc457SBarry Smith #define VEC_ScatterBegin                        61
714dcbc457SBarry Smith #define VEC_ScatterEnd                          62
72*bf5bf444SLois Curfman McInnes #define VEC_SetRandom                           63
7397bb86f7SLois Curfman McInnes 
744dcbc457SBarry Smith #define SLES_Solve                              70
754dcbc457SBarry Smith #define SLES_SetUp                              71
7697bb86f7SLois Curfman McInnes 
774dcbc457SBarry Smith #define KSP_GMRESOrthogonalization              72
784dcbc457SBarry Smith #define KSP_Solve                               73
7997bb86f7SLois Curfman McInnes 
804dcbc457SBarry Smith #define PC_SetUp                                75
814dcbc457SBarry Smith #define PC_Apply                                76
829f0e5d82SLois Curfman McInnes #define PC_ApplySymmLeft                        77
839f0e5d82SLois Curfman McInnes #define PC_ApplySymmRight                       78
844dcbc457SBarry Smith 
854dcbc457SBarry Smith #define SNES_Solve                              80
864dcbc457SBarry Smith #define SNES_LineSearch                         81
874dcbc457SBarry Smith #define SNES_FunctionEval                       82
884dcbc457SBarry Smith #define SNES_JacobianEval                       83
894dcbc457SBarry Smith #define SNES_MinimizationFunctionEval           84
904dcbc457SBarry Smith #define SNES_GradientEval                       85
914dcbc457SBarry Smith #define SNES_HessianEval                        86
924dcbc457SBarry Smith 
93682d7d0cSBarry Smith #define TS_Step                                 90
9441debaddSBarry Smith /*
95b3b1b5bfSLois Curfman McInnes    Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved
96b3b1b5bfSLois Curfman McInnes    for applications.  Make sure that src/sys/src/plog.c defines enough
97b3b1b5bfSLois Curfman McInnes    entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH.
9841debaddSBarry Smith */
994dcbc457SBarry Smith #define PLOG_USER_EVENT_LOW                     120
1004dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH                    200
10197bb86f7SLois Curfman McInnes 
10219b02663SBarry Smith /* Global flop counter */
10319b02663SBarry Smith extern double _TotalFlops;
10419b02663SBarry Smith #if defined(PETSC_LOG)
10519b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;}
10619b02663SBarry Smith #else
10719b02663SBarry Smith #define PLogFlops(n)
10819b02663SBarry Smith #endif
10919b02663SBarry Smith 
1106daaf66cSBarry Smith 
11119b02663SBarry Smith /*M
11219b02663SBarry Smith    PLogFlops - Adds floating point operations to the global counter.
1136daaf66cSBarry Smith                You must include "plog.h" to use this function.
11419b02663SBarry Smith 
11519b02663SBarry Smith    Input Parameter:
11619b02663SBarry Smith .  f - flop counter
11719b02663SBarry Smith 
11819b02663SBarry Smith    Synopsis:
11919b02663SBarry Smith    PLogFlops(int f)
12019b02663SBarry Smith 
12119b02663SBarry Smith    Notes:
12219b02663SBarry Smith    A global counter logs all PETSc flop counts.  The user can use
12319b02663SBarry Smith    PLogFlops() to increment this counter to include flops for the
12419b02663SBarry Smith    application code.
12519b02663SBarry Smith 
12619b02663SBarry Smith    PETSc automatically logs library events if the code has been
12719b02663SBarry Smith    compiled with -DPETSC_LOG (which is the default), and -log,
12819b02663SBarry Smith    -log_summary, or -log_all are specified.  PLogFlops() is
12919b02663SBarry Smith    intended for logging user flops to supplement this PETSc
13019b02663SBarry Smith    information.
13119b02663SBarry Smith 
13219b02663SBarry Smith     Example of Usage:
13341debaddSBarry Smith $     #define USER_EVENT PLOG_USER_EVENT_LOW
13419b02663SBarry Smith $     PLogEventRegister(USER_EVENT,"User event");
13519b02663SBarry Smith $     PLogEventBegin(USER_EVENT,0,0,0,0);
13619b02663SBarry Smith $     [code segment to monitor]
13719b02663SBarry Smith $     PLogFlops(user_flops)
13819b02663SBarry Smith $     PLogEventEnd(USER_EVENT,0,0,0,0);
13919b02663SBarry Smith 
14019b02663SBarry Smith .seealso:  PLogEventRegister(), PLogEventBegin(), PLogEventEnd()
14119b02663SBarry Smith 
14219b02663SBarry Smith .keywords:  Petsc, log, flops, floating point operations
14319b02663SBarry Smith M*/
14419b02663SBarry Smith 
14519b02663SBarry Smith extern int PLogPrint(MPI_Comm,FILE *);
14619b02663SBarry Smith extern int PLogBegin();
14719b02663SBarry Smith extern int PLogAllBegin();
14819b02663SBarry Smith extern int PLogDump(char*);
14919b02663SBarry Smith 
15097bb86f7SLois Curfman McInnes #if defined(PETSC_LOG)
15197bb86f7SLois Curfman McInnes 
15297bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
15397bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
15497bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject);
15597bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject);
15697bb86f7SLois Curfman McInnes extern int PLogEventRegister(int,char*);
15797bb86f7SLois Curfman McInnes 
15897bb86f7SLois Curfman McInnes /*M
15919b02663SBarry Smith    PLogEventBegin - Logs the beginning of a user event.
16097bb86f7SLois Curfman McInnes 
16197bb86f7SLois Curfman McInnes    Input Parameters:
16241debaddSBarry Smith .  e - integer associated with the event (PLOG_USER_EVENT_LOW <= e < PLOG_USER_EVENT_HIGH)
16397bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
16497bb86f7SLois Curfman McInnes 
16597bb86f7SLois Curfman McInnes    Synopsis:
16697bb86f7SLois Curfman McInnes    PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
16797bb86f7SLois Curfman McInnes                   PetscObject o4)
16897bb86f7SLois Curfman McInnes 
16997bb86f7SLois Curfman McInnes    Notes:
17097bb86f7SLois Curfman McInnes    You should also register each integer event with the command
17197bb86f7SLois Curfman McInnes    PLogRegisterEvent().  The source code must be compiled with
17297bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
17397bb86f7SLois Curfman McInnes 
17497bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
17597bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
17697bb86f7SLois Curfman McInnes    specified.  PLogEventBegin() is intended for logging user events
17797bb86f7SLois Curfman McInnes    to supplement this PETSc information.
17897bb86f7SLois Curfman McInnes 
17997bb86f7SLois Curfman McInnes     Example of Usage:
18041debaddSBarry Smith $     #define USER_EVENT PLOG_USER_EVENT_LOW
1810eb211faSLois Curfman McInnes $     int user_event_flops;
18297bb86f7SLois Curfman McInnes $     PLogEventRegister(USER_EVENT,"User event");
18397bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
18497bb86f7SLois Curfman McInnes $        [code segment to monitor]
1850eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
18697bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
18797bb86f7SLois Curfman McInnes 
18897bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops()
18997bb86f7SLois Curfman McInnes 
19097bb86f7SLois Curfman McInnes .keywords: log, event, begin
19197bb86f7SLois Curfman McInnes M*/
19297bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0;\
19397bb86f7SLois Curfman McInnes           { _tacky++;if (_PLB) (*_PLB)(e,_tacky,(PetscObject)o1,\
19497bb86f7SLois Curfman McInnes            (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);};
19597bb86f7SLois Curfman McInnes 
19697bb86f7SLois Curfman McInnes /*M
19719b02663SBarry Smith    PLogEventEnd - Log the end of a user event.
19897bb86f7SLois Curfman McInnes 
19997bb86f7SLois Curfman McInnes    Input Parameters:
20041debaddSBarry Smith .  e - integer associated with the event (PLOG_USER_EVENT_LOW <= e < PLOG_USER_EVENT_HIGH)
20197bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
20297bb86f7SLois Curfman McInnes 
20397bb86f7SLois Curfman McInnes    Synopsis:
20497bb86f7SLois Curfman McInnes    PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
20597bb86f7SLois Curfman McInnes                 PetscObject o4)
20697bb86f7SLois Curfman McInnes 
20797bb86f7SLois Curfman McInnes    Notes:
20897bb86f7SLois Curfman McInnes    You should also register each integer event with the command
20997bb86f7SLois Curfman McInnes    PLogRegisterEvent(). Source code must be compiled with
21097bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
21197bb86f7SLois Curfman McInnes 
21297bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
21397bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
21497bb86f7SLois Curfman McInnes    specified.  PLogEventEnd() is intended for logging user events
21597bb86f7SLois Curfman McInnes    to supplement this PETSc information.
21697bb86f7SLois Curfman McInnes 
21797bb86f7SLois Curfman McInnes     Example of Usage:
21841debaddSBarry Smith $     #define USER_EVENT PLOG_EVENT_USER_LOW
2190eb211faSLois Curfman McInnes $     int user_event_flops;
22097bb86f7SLois Curfman McInnes $     PLogEventRegister(USER_EVENT,"User event");
22197bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
22297bb86f7SLois Curfman McInnes $        [code segment to monitor]
2230eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
22497bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
22597bb86f7SLois Curfman McInnes 
22697bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops()
22797bb86f7SLois Curfman McInnes 
22897bb86f7SLois Curfman McInnes .keywords: log, event, end
22997bb86f7SLois Curfman McInnes M*/
230416022c9SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {if (_PLE) (*_PLE)(e,_tacky,(PetscObject)o1,\
231416022c9SBarry Smith                                     (PetscObject)o2,(PetscObject)o3,(PetscObject)o4);}\
232416022c9SBarry Smith                                     _tacky--;}
233464493b3SBarry Smith #define PLogObjectParent(p,c)       {PETSCVALIDHEADER((PetscObject)c); \
234464493b3SBarry Smith                                      PETSCVALIDHEADER((PetscObject)p);\
235bfce26a3SBarry Smith                                      ((PetscObject)(c))->parent = (PetscObject) p;}
23697bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d)    {int _i; for ( _i=0; _i<n; _i++ ) \
23797bb86f7SLois Curfman McInnes                                     PLogObjectParent(p,(d)[_i]);}
23897bb86f7SLois Curfman McInnes #define PLogObjectCreate(h)         {if (_PHC) (*_PHC)((PetscObject)h);}
23997bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h)        {if (_PHD) (*_PHD)((PetscObject)h);}
2406ac32965SLois Curfman McInnes #define PLogObjectMemory(p,m)       {PETSCVALIDHEADER((PetscObject)p);\
2416ac32965SLois Curfman McInnes                                     ((PetscObject)(p))->mem += (m);}
24297bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...);
24397bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
244c5d91301SLois Curfman McInnes extern int PLogDestroy();
245ba7af9b1SBarry Smith extern int PLogStagePush(int);
246ba7af9b1SBarry Smith extern int PLogStagePop();
2474b0e389bSBarry Smith extern int PLogStageRegister(int,char*);
24897bb86f7SLois Curfman McInnes 
24997bb86f7SLois Curfman McInnes #else
25097bb86f7SLois Curfman McInnes 
25197bb86f7SLois Curfman McInnes #define PLogObjectCreate(h)
25297bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h)
253a311837eSLois Curfman McInnes #define PLogObjectMemory(p,m)
25497bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
25597bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
25697bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c)
25797bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c)
25897bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
2598b23fa05SBarry Smith extern int PLogDestroy();
260ba7af9b1SBarry Smith extern int PLogStagePush(int);
261ba7af9b1SBarry Smith extern int PLogStagePop();
2624b0e389bSBarry Smith extern int PLogStageRegister(int,char*);
26397bb86f7SLois Curfman McInnes #endif
26497bb86f7SLois Curfman McInnes 
26597bb86f7SLois Curfman McInnes #endif
26641debaddSBarry Smith 
267