xref: /petsc/include/petsclog.h (revision edde42fc28bac63dd53b0b8d6cb07b743919f096)
1*edde42fcSLois Curfman McInnes /* $Id: plog.h,v 1.63 1996/03/22 19:56:40 curfman 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 /*
12c43cb918SSatish Balay   If you add an event here, make sure you add to petsc/bin/petscview.cfg,
13694f041aSBarry Smith   petsc/bin/petscview, petsc/src/sys/src/plog.c, and
14a2e52947SBarry Smith   petsc/src/sys/src/plogmpe.c!!!
1597bb86f7SLois Curfman McInnes */
1697bb86f7SLois Curfman McInnes #define MAT_Mult                                0
171ff317f7SLois Curfman McInnes #define MAT_MatrixFreeMult                      1
181ff317f7SLois Curfman McInnes #define MAT_AssemblyBegin                       2
191ff317f7SLois Curfman McInnes #define MAT_AssemblyEnd                         3
201ff317f7SLois Curfman McInnes #define MAT_GetReordering                       4
211ff317f7SLois Curfman McInnes #define MAT_MultTrans                           5
221ff317f7SLois Curfman McInnes #define MAT_MultAdd                             6
231ff317f7SLois Curfman McInnes #define MAT_MultTransAdd                        7
241ff317f7SLois Curfman McInnes #define MAT_LUFactor                            8
251ff317f7SLois Curfman McInnes #define MAT_CholeskyFactor                      9
261ff317f7SLois Curfman McInnes #define MAT_LUFactorSymbolic                    10
271ff317f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic                   11
281ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic              12
291ff317f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic    13
301ff317f7SLois Curfman McInnes #define MAT_LUFactorNumeric                     14
311ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric               15
321ff317f7SLois Curfman McInnes #define MAT_Relax                               16
331ff317f7SLois Curfman McInnes #define MAT_Copy                                17
341ff317f7SLois Curfman McInnes #define MAT_Convert                             18
351ff317f7SLois Curfman McInnes #define MAT_Scale                               19
361ff317f7SLois Curfman McInnes #define MAT_ZeroEntries                         20
371ff317f7SLois Curfman McInnes #define MAT_Solve                               21
381ff317f7SLois Curfman McInnes #define MAT_SolveAdd                            22
391ff317f7SLois Curfman McInnes #define MAT_SolveTrans                          23
401ff317f7SLois Curfman McInnes #define MAT_SolveTransAdd                       24
411ff317f7SLois Curfman McInnes #define MAT_SetValues                           25
421ff317f7SLois Curfman McInnes #define MAT_ForwardSolve                        26
431ff317f7SLois Curfman McInnes #define MAT_BackwardSolve                       27
441ff317f7SLois Curfman McInnes #define MAT_Load                                28
451ff317f7SLois Curfman McInnes #define MAT_View                                29
461ff317f7SLois Curfman McInnes #define MAT_ILUFactor                           30
471ff317f7SLois Curfman McInnes #define MAT_GetSubMatrix                        31
481ff317f7SLois Curfman McInnes #define MAT_GetSubMatrices                      32
491ff317f7SLois Curfman McInnes #define MAT_GetValues                           33
501ff317f7SLois Curfman McInnes #define MAT_IncreaseOverlap                     34
51dd8bebb4SSatish Balay #define MAT_GetRow                              35
5297bb86f7SLois Curfman McInnes 
534dcbc457SBarry Smith #define VEC_Dot                                 40
544dcbc457SBarry Smith #define VEC_Norm                                41
554dcbc457SBarry Smith #define VEC_Max                                 42
564dcbc457SBarry Smith #define VEC_Min                                 43
574dcbc457SBarry Smith #define VEC_TDot                                44
584dcbc457SBarry Smith #define VEC_Scale                               45
594dcbc457SBarry Smith #define VEC_Copy                                46
604dcbc457SBarry Smith #define VEC_Set                                 47
614dcbc457SBarry Smith #define VEC_AXPY                                48
624dcbc457SBarry Smith #define VEC_AYPX                                49
634dcbc457SBarry Smith #define VEC_Swap                                50
644dcbc457SBarry Smith #define VEC_WAXPY                               51
654dcbc457SBarry Smith #define VEC_AssemblyBegin                       52
664dcbc457SBarry Smith #define VEC_AssemblyEnd                         53
674dcbc457SBarry Smith #define VEC_MTDot                               54
684dcbc457SBarry Smith #define VEC_MDot                                55
694dcbc457SBarry Smith #define VEC_MAXPY                               56
704dcbc457SBarry Smith #define VEC_PMult                               57
714dcbc457SBarry Smith #define VEC_SetValues                           58
724dcbc457SBarry Smith #define VEC_Load                                59
734dcbc457SBarry Smith #define VEC_View                                60
744dcbc457SBarry Smith #define VEC_ScatterBegin                        61
754dcbc457SBarry Smith #define VEC_ScatterEnd                          62
76bf5bf444SLois Curfman McInnes #define VEC_SetRandom                           63
7797bb86f7SLois Curfman McInnes 
784dcbc457SBarry Smith #define SLES_Solve                              70
794dcbc457SBarry Smith #define SLES_SetUp                              71
8097bb86f7SLois Curfman McInnes 
814dcbc457SBarry Smith #define KSP_GMRESOrthogonalization              72
8297bb86f7SLois Curfman McInnes 
834dcbc457SBarry Smith #define PC_SetUp                                75
8436058207SBarry Smith #define PC_SetUpOnBlocks                        76
8532284f49SSatish Balay #define PC_Apply                                77
8632284f49SSatish Balay #define PC_ApplySymmLeft                        78
8732284f49SSatish Balay #define PC_ApplySymmRight                       79
884dcbc457SBarry Smith 
894dcbc457SBarry Smith #define SNES_Solve                              80
904dcbc457SBarry Smith #define SNES_LineSearch                         81
914dcbc457SBarry Smith #define SNES_FunctionEval                       82
924dcbc457SBarry Smith #define SNES_JacobianEval                       83
934dcbc457SBarry Smith #define SNES_MinimizationFunctionEval           84
944dcbc457SBarry Smith #define SNES_GradientEval                       85
954dcbc457SBarry Smith #define SNES_HessianEval                        86
964dcbc457SBarry Smith 
97682d7d0cSBarry Smith #define TS_Step                                 90
9872936c9dSBarry Smith 
9972936c9dSBarry Smith #define Petsc_Barrier                           100
10041debaddSBarry Smith /*
101b3b1b5bfSLois Curfman McInnes    Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved
10277c4ece6SBarry Smith    for applications.  Make sure that src/plog/src/plog.c defines enough
103b3b1b5bfSLois Curfman McInnes    entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH.
10441debaddSBarry Smith */
10535aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC              120
1064dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH                    200
10797bb86f7SLois Curfman McInnes 
10819b02663SBarry Smith /* Global flop counter */
10919b02663SBarry Smith extern double _TotalFlops;
11019b02663SBarry Smith #if defined(PETSC_LOG)
11119b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;}
11219b02663SBarry Smith #else
11319b02663SBarry Smith #define PLogFlops(n)
11419b02663SBarry Smith #endif
11519b02663SBarry Smith 
116*edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */
117*edde42fcSLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
11877c4ece6SBarry Smith 
11977c4ece6SBarry Smith #if defined (HAVE_MPE)
12077c4ece6SBarry Smith #include "mpe.h"
12177c4ece6SBarry Smith extern int PLogMPEBegin();
12277c4ece6SBarry Smith extern int PLogMPEDump(char *);
12377c4ece6SBarry Smith extern int UseMPE,MPEFlags[];
12477c4ece6SBarry Smith #define MPEBEGIN    1000
12577c4ece6SBarry Smith #endif
12677c4ece6SBarry Smith 
12777c4ece6SBarry Smith #if defined(PETSC_LOG)
12877c4ece6SBarry Smith extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
12977c4ece6SBarry Smith extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
13077c4ece6SBarry Smith extern int (*_PHC)(PetscObject);
13177c4ece6SBarry Smith extern int (*_PHD)(PetscObject);
13277c4ece6SBarry Smith 
13377c4ece6SBarry Smith #if defined(HAVE_MPE)
13477c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \
13577c4ece6SBarry Smith   { _tacky++; \
13677c4ece6SBarry Smith    if (_PLB) \
13777c4ece6SBarry Smith      (*_PLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
13877c4ece6SBarry Smith    if (_tacky == 1 && UseMPE && MPEFlags[e])\
13977c4ece6SBarry Smith      MPE_Log_event(MPEBEGIN+2*e,0,"");\
14077c4ece6SBarry Smith   }
14177c4ece6SBarry Smith #else
14277c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \
14377c4ece6SBarry Smith   { _tacky++; \
14477c4ece6SBarry Smith    if (_PLB) \
14577c4ece6SBarry Smith      (*_PLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
14677c4ece6SBarry Smith   }
14777c4ece6SBarry Smith #endif
14877c4ece6SBarry Smith 
14977c4ece6SBarry Smith #if defined(HAVE_MPE)
15077c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
15177c4ece6SBarry Smith   if (_PLE) \
15277c4ece6SBarry Smith     (*_PLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
15377c4ece6SBarry Smith   if (_tacky == 1 && UseMPE && MPEFlags[e])\
15477c4ece6SBarry Smith      MPE_Log_event(MPEBEGIN+2*e+1,0,"");\
15577c4ece6SBarry Smith   }  _tacky--;}
15677c4ece6SBarry Smith #else
15777c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
15877c4ece6SBarry Smith   if (_PLE) \
15977c4ece6SBarry Smith     (*_PLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
16077c4ece6SBarry Smith   } _tacky--;}
16177c4ece6SBarry Smith #endif
16277c4ece6SBarry Smith 
16377c4ece6SBarry Smith 
16477c4ece6SBarry Smith #define PLogObjectParent(p,c)       {PetscValidHeader((PetscObject)c); \
16577c4ece6SBarry Smith                                      PetscValidHeader((PetscObject)p);\
16677c4ece6SBarry Smith                                      ((PetscObject)(c))->parent = (PetscObject) p;}
16777c4ece6SBarry Smith #define PLogObjectParents(p,n,d)    {int _i; for ( _i=0; _i<n; _i++ ) \
16877c4ece6SBarry Smith                                     PLogObjectParent(p,(d)[_i]);}
16977c4ece6SBarry Smith #define PLogObjectCreate(h)         {if (_PHC) (*_PHC)((PetscObject)h);}
17077c4ece6SBarry Smith #define PLogObjectDestroy(h)        {if (_PHD) (*_PHD)((PetscObject)h);}
17177c4ece6SBarry Smith #define PLogObjectMemory(p,m)       {PetscValidHeader((PetscObject)p);\
17277c4ece6SBarry Smith                                     ((PetscObject)(p))->mem += (m);}
17377c4ece6SBarry Smith extern int PLogObjectState(PetscObject,char *,...);
17477c4ece6SBarry Smith extern int PLogDestroy();
17577c4ece6SBarry Smith extern int PLogStagePush(int);
17677c4ece6SBarry Smith extern int PLogStagePop();
17777c4ece6SBarry Smith extern int PLogStageRegister(int,char*);
178*edde42fcSLois Curfman McInnes extern int PLogPrintSummary(MPI_Comm,FILE *);
179*edde42fcSLois Curfman McInnes extern int PLogBegin();
180*edde42fcSLois Curfman McInnes extern int PLogAllBegin();
181*edde42fcSLois Curfman McInnes extern int PLogDump(char*);
182*edde42fcSLois Curfman McInnes extern int PLogEventRegister(int*,char*,char*);
18377c4ece6SBarry Smith 
18477c4ece6SBarry Smith #else
18577c4ece6SBarry Smith 
18677c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4)
18777c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4)
18877c4ece6SBarry Smith #define PLogObjectParent(p,c)
18977c4ece6SBarry Smith #define PLogObjectParents(p,n,c)
190*edde42fcSLois Curfman McInnes #define PLogObjectCreate(h)
191*edde42fcSLois Curfman McInnes #define PLogObjectDestroy(h)
192*edde42fcSLois Curfman McInnes #define PLogObjectMemory(p,m)
193*edde42fcSLois Curfman McInnes /* #define PLogObjectState(a,b,...) */
194*edde42fcSLois Curfman McInnes #define PLogDestroy()
195*edde42fcSLois Curfman McInnes #define PLogStagePush(int)
196*edde42fcSLois Curfman McInnes #define PLogStagePop()
197*edde42fcSLois Curfman McInnes #define PLogStageRegister(a,b)
198*edde42fcSLois Curfman McInnes #define PLogPrintSummary(comm,file)
199*edde42fcSLois Curfman McInnes #define PLogBegin()
200*edde42fcSLois Curfman McInnes #define PLogAllBegin()
201*edde42fcSLois Curfman McInnes #define PLogDump(char)
202*edde42fcSLois Curfman McInnes #define PLogEventRegister(a,b,c)
203*edde42fcSLois Curfman McInnes #define PLogMPEBegin()
204*edde42fcSLois Curfman McInnes #define PLogMPEDump(a)
205*edde42fcSLois Curfman McInnes 
20677c4ece6SBarry Smith #endif
2076daaf66cSBarry Smith 
20819b02663SBarry Smith /*M
20919b02663SBarry Smith    PLogFlops - Adds floating point operations to the global counter.
21019b02663SBarry Smith 
21119b02663SBarry Smith    Input Parameter:
21219b02663SBarry Smith .  f - flop counter
21319b02663SBarry Smith 
21419b02663SBarry Smith    Synopsis:
215682ac3c9SWilliam Gropp    void PLogFlops(int f)
21619b02663SBarry Smith 
21719b02663SBarry Smith    Notes:
21819b02663SBarry Smith    A global counter logs all PETSc flop counts.  The user can use
21919b02663SBarry Smith    PLogFlops() to increment this counter to include flops for the
22019b02663SBarry Smith    application code.
22119b02663SBarry Smith 
22219b02663SBarry Smith    PETSc automatically logs library events if the code has been
22319b02663SBarry Smith    compiled with -DPETSC_LOG (which is the default), and -log,
22419b02663SBarry Smith    -log_summary, or -log_all are specified.  PLogFlops() is
22519b02663SBarry Smith    intended for logging user flops to supplement this PETSc
22619b02663SBarry Smith    information.
22719b02663SBarry Smith 
22819b02663SBarry Smith     Example of Usage:
22935aab85fSBarry Smith $     int USER_EVENT;
230b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
23119b02663SBarry Smith $     PLogEventBegin(USER_EVENT,0,0,0,0);
23219b02663SBarry Smith $        [code segment to monitor]
23319b02663SBarry Smith $        PLogFlops(user_flops)
23419b02663SBarry Smith $     PLogEventEnd(USER_EVENT,0,0,0,0);
23519b02663SBarry Smith 
23619b02663SBarry Smith .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd()
23719b02663SBarry Smith 
238*edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations
23919b02663SBarry Smith M*/
24019b02663SBarry Smith 
24197bb86f7SLois Curfman McInnes 
24297bb86f7SLois Curfman McInnes /*M
24319b02663SBarry Smith    PLogEventBegin - Logs the beginning of a user event.
24497bb86f7SLois Curfman McInnes 
24597bb86f7SLois Curfman McInnes    Input Parameters:
24635aab85fSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
24797bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
24897bb86f7SLois Curfman McInnes 
24997bb86f7SLois Curfman McInnes    Synopsis:
250682ac3c9SWilliam Gropp    void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
25197bb86f7SLois Curfman McInnes                   PetscObject o4)
25297bb86f7SLois Curfman McInnes 
25397bb86f7SLois Curfman McInnes    Notes:
25497bb86f7SLois Curfman McInnes    You should also register each integer event with the command
25597bb86f7SLois Curfman McInnes    PLogRegisterEvent().  The source code must be compiled with
25697bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
25797bb86f7SLois Curfman McInnes 
25897bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
25997bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
26097bb86f7SLois Curfman McInnes    specified.  PLogEventBegin() is intended for logging user events
26197bb86f7SLois Curfman McInnes    to supplement this PETSc information.
26297bb86f7SLois Curfman McInnes 
26397bb86f7SLois Curfman McInnes     Example of Usage:
26435aab85fSBarry Smith $     int USER_EVENT;
2650eb211faSLois Curfman McInnes $     int user_event_flops;
266b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
26735aab85fSBarry Smith $     PLogEventBegin(&USER_EVENT,0,0,0,0);
26897bb86f7SLois Curfman McInnes $        [code segment to monitor]
2690eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
27035aab85fSBarry Smith $     PLogEventEnd(&USER_EVENT,0,0,0,0);
27197bb86f7SLois Curfman McInnes 
27297bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops()
27397bb86f7SLois Curfman McInnes 
27497bb86f7SLois Curfman McInnes .keywords: log, event, begin
27597bb86f7SLois Curfman McInnes M*/
27697bb86f7SLois Curfman McInnes 
27797bb86f7SLois Curfman McInnes /*M
27819b02663SBarry Smith    PLogEventEnd - Log the end of a user event.
27997bb86f7SLois Curfman McInnes 
28097bb86f7SLois Curfman McInnes    Input Parameters:
28135aab85fSBarry Smith .  e - integer associated with the event obtained with PLogEventRegister()
28297bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
28397bb86f7SLois Curfman McInnes 
28497bb86f7SLois Curfman McInnes    Synopsis:
285682ac3c9SWilliam Gropp    void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
28697bb86f7SLois Curfman McInnes                 PetscObject o4)
28797bb86f7SLois Curfman McInnes 
28897bb86f7SLois Curfman McInnes    Notes:
28997bb86f7SLois Curfman McInnes    You should also register each integer event with the command
29097bb86f7SLois Curfman McInnes    PLogRegisterEvent(). Source code must be compiled with
29197bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
29297bb86f7SLois Curfman McInnes 
29397bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
29497bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
29597bb86f7SLois Curfman McInnes    specified.  PLogEventEnd() is intended for logging user events
29697bb86f7SLois Curfman McInnes    to supplement this PETSc information.
29797bb86f7SLois Curfman McInnes 
29897bb86f7SLois Curfman McInnes     Example of Usage:
29935aab85fSBarry Smith $     int USER_EVENT;
3000eb211faSLois Curfman McInnes $     int user_event_flops;
301b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
30297bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
30397bb86f7SLois Curfman McInnes $        [code segment to monitor]
3040eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
30597bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
30697bb86f7SLois Curfman McInnes 
30797bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops()
30897bb86f7SLois Curfman McInnes 
30997bb86f7SLois Curfman McInnes .keywords: log, event, end
31097bb86f7SLois Curfman McInnes M*/
31197bb86f7SLois Curfman McInnes 
31297bb86f7SLois Curfman McInnes #endif
31341debaddSBarry Smith 
31477c4ece6SBarry Smith 
31577c4ece6SBarry Smith 
316