xref: /petsc/include/petsclog.h (revision 694f041adc4f91e3c13b2d5bb4a6464062c0de2e)
1*694f041aSBarry Smith /* $Id: plog.h,v 1.51 1996/02/26 03:05:24 balay Exp bsmith $ */
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,
13*694f041aSBarry Smith   petsc/bin/petscview, petsc/src/sys/src/plog.c, and
14*694f041aSBarry Smith   petsc/src/sys/src/plgmpe.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
824dcbc457SBarry Smith #define KSP_Solve                               73
8397bb86f7SLois Curfman McInnes 
844dcbc457SBarry Smith #define PC_SetUp                                75
854dcbc457SBarry Smith #define PC_Apply                                76
869f0e5d82SLois Curfman McInnes #define PC_ApplySymmLeft                        77
879f0e5d82SLois Curfman McInnes #define PC_ApplySymmRight                       78
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
9841debaddSBarry Smith /*
99b3b1b5bfSLois Curfman McInnes    Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved
100b3b1b5bfSLois Curfman McInnes    for applications.  Make sure that src/sys/src/plog.c defines enough
101b3b1b5bfSLois Curfman McInnes    entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH.
10241debaddSBarry Smith */
10335aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC              120
1044dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH                    200
10597bb86f7SLois Curfman McInnes 
10619b02663SBarry Smith /* Global flop counter */
10719b02663SBarry Smith extern double _TotalFlops;
10819b02663SBarry Smith #if defined(PETSC_LOG)
10919b02663SBarry Smith #define PLogFlops(n) {_TotalFlops += n;}
11019b02663SBarry Smith #else
11119b02663SBarry Smith #define PLogFlops(n)
11219b02663SBarry Smith #endif
11319b02663SBarry Smith 
1146daaf66cSBarry Smith 
11519b02663SBarry Smith /*M
11619b02663SBarry Smith    PLogFlops - Adds floating point operations to the global counter.
1176daaf66cSBarry Smith                You must include "plog.h" to use this function.
11819b02663SBarry Smith 
11919b02663SBarry Smith    Input Parameter:
12019b02663SBarry Smith .  f - flop counter
12119b02663SBarry Smith 
12219b02663SBarry Smith    Synopsis:
12319b02663SBarry Smith    PLogFlops(int f)
12419b02663SBarry Smith 
12519b02663SBarry Smith    Notes:
12619b02663SBarry Smith    A global counter logs all PETSc flop counts.  The user can use
12719b02663SBarry Smith    PLogFlops() to increment this counter to include flops for the
12819b02663SBarry Smith    application code.
12919b02663SBarry Smith 
13019b02663SBarry Smith    PETSc automatically logs library events if the code has been
13119b02663SBarry Smith    compiled with -DPETSC_LOG (which is the default), and -log,
13219b02663SBarry Smith    -log_summary, or -log_all are specified.  PLogFlops() is
13319b02663SBarry Smith    intended for logging user flops to supplement this PETSc
13419b02663SBarry Smith    information.
13519b02663SBarry Smith 
13619b02663SBarry Smith     Example of Usage:
13735aab85fSBarry Smith $     int USER_EVENT;
13835aab85fSBarry Smith $     PLogEventRegister(&USER_EVENT,"User event");
13919b02663SBarry Smith $     PLogEventBegin(USER_EVENT,0,0,0,0);
14019b02663SBarry Smith $     [code segment to monitor]
14119b02663SBarry Smith $     PLogFlops(user_flops)
14219b02663SBarry Smith $     PLogEventEnd(USER_EVENT,0,0,0,0);
14319b02663SBarry Smith 
14419b02663SBarry Smith .seealso:  PLogEventRegister(), PLogEventBegin(), PLogEventEnd()
14519b02663SBarry Smith 
14619b02663SBarry Smith .keywords:  Petsc, log, flops, floating point operations
14719b02663SBarry Smith M*/
14819b02663SBarry Smith 
149*694f041aSBarry Smith extern int PLogPrintSummary(MPI_Comm,FILE *);
15019b02663SBarry Smith extern int PLogBegin();
15119b02663SBarry Smith extern int PLogAllBegin();
152ec181fdcSSatish Balay extern int PLogDump(char*);
153ec181fdcSSatish Balay 
154ec181fdcSSatish Balay #if defined (HAVE_MPE)
155*694f041aSBarry Smith extern int PLogMPEBegin();
156*694f041aSBarry Smith extern int PLogMPEDestroy();
157*694f041aSBarry Smith extern int UseMPE,MPEFlags[];
158*694f041aSBarry Smith #define MPEBEGIN    1000
159ec181fdcSSatish Balay #endif
16019b02663SBarry Smith 
16197bb86f7SLois Curfman McInnes #if defined(PETSC_LOG)
16297bb86f7SLois Curfman McInnes 
16397bb86f7SLois Curfman McInnes extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
16497bb86f7SLois Curfman McInnes extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
16597bb86f7SLois Curfman McInnes extern int (*_PHC)(PetscObject);
16697bb86f7SLois Curfman McInnes extern int (*_PHD)(PetscObject);
16735aab85fSBarry Smith extern int PLogEventRegister(int*,char*);
16897bb86f7SLois Curfman McInnes 
16997bb86f7SLois Curfman McInnes /*M
17019b02663SBarry Smith    PLogEventBegin - Logs the beginning of a user event.
17197bb86f7SLois Curfman McInnes 
17297bb86f7SLois Curfman McInnes    Input Parameters:
17335aab85fSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
17497bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
17597bb86f7SLois Curfman McInnes 
17697bb86f7SLois Curfman McInnes    Synopsis:
17797bb86f7SLois Curfman McInnes    PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
17897bb86f7SLois Curfman McInnes                   PetscObject o4)
17997bb86f7SLois Curfman McInnes 
18097bb86f7SLois Curfman McInnes    Notes:
18197bb86f7SLois Curfman McInnes    You should also register each integer event with the command
18297bb86f7SLois Curfman McInnes    PLogRegisterEvent().  The source code must be compiled with
18397bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
18497bb86f7SLois Curfman McInnes 
18597bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
18697bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
18797bb86f7SLois Curfman McInnes    specified.  PLogEventBegin() is intended for logging user events
18897bb86f7SLois Curfman McInnes    to supplement this PETSc information.
18997bb86f7SLois Curfman McInnes 
19097bb86f7SLois Curfman McInnes     Example of Usage:
19135aab85fSBarry Smith $     int USER_EVENT;
1920eb211faSLois Curfman McInnes $     int user_event_flops;
19335aab85fSBarry Smith $     PLogEventRegister(&USER_EVENT,"User event");
19435aab85fSBarry Smith $     PLogEventBegin(&USER_EVENT,0,0,0,0);
19597bb86f7SLois Curfman McInnes $        [code segment to monitor]
1960eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
19735aab85fSBarry Smith $     PLogEventEnd(&USER_EVENT,0,0,0,0);
19897bb86f7SLois Curfman McInnes 
19997bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops()
20097bb86f7SLois Curfman McInnes 
20197bb86f7SLois Curfman McInnes .keywords: log, event, begin
20297bb86f7SLois Curfman McInnes M*/
203*694f041aSBarry Smith #if defined(HAVE_MPE)
20497bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \
205*694f041aSBarry Smith   { _tacky++; \
206*694f041aSBarry Smith    if (_PLB) \
207*694f041aSBarry Smith      (*_PLB)(e,_tacky,(PetscObject)o1,(PetscObject)o2,(PetscObject)o3,(PetscObject)o4);\
208*694f041aSBarry Smith    if (tacky == 1 && && UseMPE && MPEFlag[e])\
209*694f041aSBarry Smith      MPE_Log_event(MPEBEGIN+2*e,0,"");\
210*694f041aSBarry Smith   }
211*694f041aSBarry Smith #else
212*694f041aSBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \
213*694f041aSBarry Smith   { _tacky++; \
214*694f041aSBarry Smith    if (_PLB) \
215*694f041aSBarry Smith      (*_PLB)(e,_tacky,(PetscObject)o1,(PetscObject)o2,(PetscObject)o3,(PetscObject)o4);\
216*694f041aSBarry Smith   }
217*694f041aSBarry Smith #endif
21897bb86f7SLois Curfman McInnes 
21997bb86f7SLois Curfman McInnes /*M
22019b02663SBarry Smith    PLogEventEnd - Log the end of a user event.
22197bb86f7SLois Curfman McInnes 
22297bb86f7SLois Curfman McInnes    Input Parameters:
22335aab85fSBarry Smith .  e - integer associated with the event obtained with PLogEventRegister()
22497bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
22597bb86f7SLois Curfman McInnes 
22697bb86f7SLois Curfman McInnes    Synopsis:
22797bb86f7SLois Curfman McInnes    PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
22897bb86f7SLois Curfman McInnes                 PetscObject o4)
22997bb86f7SLois Curfman McInnes 
23097bb86f7SLois Curfman McInnes    Notes:
23197bb86f7SLois Curfman McInnes    You should also register each integer event with the command
23297bb86f7SLois Curfman McInnes    PLogRegisterEvent(). Source code must be compiled with
23397bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
23497bb86f7SLois Curfman McInnes 
23597bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
23697bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
23797bb86f7SLois Curfman McInnes    specified.  PLogEventEnd() is intended for logging user events
23897bb86f7SLois Curfman McInnes    to supplement this PETSc information.
23997bb86f7SLois Curfman McInnes 
24097bb86f7SLois Curfman McInnes     Example of Usage:
24135aab85fSBarry Smith $     int USER_EVENT;
2420eb211faSLois Curfman McInnes $     int user_event_flops;
24335aab85fSBarry Smith $     PLogEventRegister(&USER_EVENT,"User event");
24497bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
24597bb86f7SLois Curfman McInnes $        [code segment to monitor]
2460eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
24797bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
24897bb86f7SLois Curfman McInnes 
24997bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops()
25097bb86f7SLois Curfman McInnes 
25197bb86f7SLois Curfman McInnes .keywords: log, event, end
25297bb86f7SLois Curfman McInnes M*/
253*694f041aSBarry Smith #if defined(HAVE_MPE)
254*694f041aSBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
255*694f041aSBarry Smith   if (_PLE) \
256*694f041aSBarry Smith     (*_PLE)(e,_tacky,(PetscObject)o1,(PetscObject)o2,(PetscObject)o3,(PetscObject)o4);\
257*694f041aSBarry Smith   if (tacky == 1 && && UseMPE && MPEFlag[e])\
258*694f041aSBarry Smith      MPE_Log_event(MPEBEGIN+2*e+1,0,"");\
259*694f041aSBarry Smith   }  _tacky--;}
260*694f041aSBarry Smith #else
261*694f041aSBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
262*694f041aSBarry Smith   if (_PLE) \
263*694f041aSBarry Smith     (*_PLE)(e,_tacky,(PetscObject)o1,(PetscObject)o2,(PetscObject)o3,(PetscObject)o4);\
264*694f041aSBarry Smith   } _tacky--;}
265*694f041aSBarry Smith #endif
266*694f041aSBarry Smith 
267*694f041aSBarry Smith 
268464493b3SBarry Smith #define PLogObjectParent(p,c)       {PETSCVALIDHEADER((PetscObject)c); \
269464493b3SBarry Smith                                      PETSCVALIDHEADER((PetscObject)p);\
270bfce26a3SBarry Smith                                      ((PetscObject)(c))->parent = (PetscObject) p;}
27197bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,d)    {int _i; for ( _i=0; _i<n; _i++ ) \
27297bb86f7SLois Curfman McInnes                                     PLogObjectParent(p,(d)[_i]);}
27397bb86f7SLois Curfman McInnes #define PLogObjectCreate(h)         {if (_PHC) (*_PHC)((PetscObject)h);}
27497bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h)        {if (_PHD) (*_PHD)((PetscObject)h);}
2756ac32965SLois Curfman McInnes #define PLogObjectMemory(p,m)       {PETSCVALIDHEADER((PetscObject)p);\
2766ac32965SLois Curfman McInnes                                     ((PetscObject)(p))->mem += (m);}
27797bb86f7SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...);
27897bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
279c5d91301SLois Curfman McInnes extern int PLogDestroy();
280ba7af9b1SBarry Smith extern int PLogStagePush(int);
281ba7af9b1SBarry Smith extern int PLogStagePop();
2824b0e389bSBarry Smith extern int PLogStageRegister(int,char*);
28397bb86f7SLois Curfman McInnes 
28497bb86f7SLois Curfman McInnes #else
28597bb86f7SLois Curfman McInnes 
28697bb86f7SLois Curfman McInnes #define PLogObjectCreate(h)
28797bb86f7SLois Curfman McInnes #define PLogObjectDestroy(h)
288a311837eSLois Curfman McInnes #define PLogObjectMemory(p,m)
28997bb86f7SLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
29097bb86f7SLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
29197bb86f7SLois Curfman McInnes #define PLogObjectParent(p,c)
29297bb86f7SLois Curfman McInnes #define PLogObjectParents(p,n,c)
29397bb86f7SLois Curfman McInnes extern int PLogInfo(PetscObject,char*,...);
2948b23fa05SBarry Smith extern int PLogDestroy();
295ba7af9b1SBarry Smith extern int PLogStagePush(int);
296ba7af9b1SBarry Smith extern int PLogStagePop();
2974b0e389bSBarry Smith extern int PLogStageRegister(int,char*);
29897bb86f7SLois Curfman McInnes #endif
29997bb86f7SLois Curfman McInnes 
30097bb86f7SLois Curfman McInnes #endif
30141debaddSBarry Smith 
302