xref: /petsc/include/petsclog.h (revision ce85283e2a9f1f2d094c393661172a6535052345)
1*ce85283eSBarry Smith /* $Id: plog.h,v 1.77 1996/07/28 16:07:13 bsmith 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 /*
12a2ce50c7SBarry Smith   If you add an event here, make sure you add it to
13a2ce50c7SBarry Smith   petsc/bin/petscview.cfg,
14a2ce50c7SBarry Smith   petsc/bin/petscview,
15a2ce50c7SBarry Smith   petsc/src/plog/src/plog.c,
16a2ce50c7SBarry Smith   petsc/src/plog/src/plogmpe.c and
17a2ce50c7SBarry Smith   petsc/include/FINCLUDE/plog.h!!!
1897bb86f7SLois Curfman McInnes */
1997bb86f7SLois Curfman McInnes #define MAT_Mult                                0
201ff317f7SLois Curfman McInnes #define MAT_MatrixFreeMult                      1
211ff317f7SLois Curfman McInnes #define MAT_AssemblyBegin                       2
221ff317f7SLois Curfman McInnes #define MAT_AssemblyEnd                         3
231ff317f7SLois Curfman McInnes #define MAT_GetReordering                       4
241ff317f7SLois Curfman McInnes #define MAT_MultTrans                           5
251ff317f7SLois Curfman McInnes #define MAT_MultAdd                             6
261ff317f7SLois Curfman McInnes #define MAT_MultTransAdd                        7
271ff317f7SLois Curfman McInnes #define MAT_LUFactor                            8
281ff317f7SLois Curfman McInnes #define MAT_CholeskyFactor                      9
291ff317f7SLois Curfman McInnes #define MAT_LUFactorSymbolic                    10
301ff317f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic                   11
311ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic              12
321ff317f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic    13
331ff317f7SLois Curfman McInnes #define MAT_LUFactorNumeric                     14
341ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric               15
351ff317f7SLois Curfman McInnes #define MAT_Relax                               16
361ff317f7SLois Curfman McInnes #define MAT_Copy                                17
371ff317f7SLois Curfman McInnes #define MAT_Convert                             18
381ff317f7SLois Curfman McInnes #define MAT_Scale                               19
391ff317f7SLois Curfman McInnes #define MAT_ZeroEntries                         20
401ff317f7SLois Curfman McInnes #define MAT_Solve                               21
411ff317f7SLois Curfman McInnes #define MAT_SolveAdd                            22
421ff317f7SLois Curfman McInnes #define MAT_SolveTrans                          23
431ff317f7SLois Curfman McInnes #define MAT_SolveTransAdd                       24
441ff317f7SLois Curfman McInnes #define MAT_SetValues                           25
451ff317f7SLois Curfman McInnes #define MAT_ForwardSolve                        26
461ff317f7SLois Curfman McInnes #define MAT_BackwardSolve                       27
471ff317f7SLois Curfman McInnes #define MAT_Load                                28
481ff317f7SLois Curfman McInnes #define MAT_View                                29
491ff317f7SLois Curfman McInnes #define MAT_ILUFactor                           30
501ff317f7SLois Curfman McInnes #define MAT_GetSubMatrix                        31
511ff317f7SLois Curfman McInnes #define MAT_GetSubMatrices                      32
521ff317f7SLois Curfman McInnes #define MAT_GetValues                           33
531ff317f7SLois Curfman McInnes #define MAT_IncreaseOverlap                     34
54dd8bebb4SSatish Balay #define MAT_GetRow                              35
5597bb86f7SLois Curfman McInnes 
564dcbc457SBarry Smith #define VEC_Dot                                 40
574dcbc457SBarry Smith #define VEC_Norm                                41
584dcbc457SBarry Smith #define VEC_Max                                 42
594dcbc457SBarry Smith #define VEC_Min                                 43
604dcbc457SBarry Smith #define VEC_TDot                                44
614dcbc457SBarry Smith #define VEC_Scale                               45
624dcbc457SBarry Smith #define VEC_Copy                                46
634dcbc457SBarry Smith #define VEC_Set                                 47
644dcbc457SBarry Smith #define VEC_AXPY                                48
654dcbc457SBarry Smith #define VEC_AYPX                                49
664dcbc457SBarry Smith #define VEC_Swap                                50
674dcbc457SBarry Smith #define VEC_WAXPY                               51
684dcbc457SBarry Smith #define VEC_AssemblyBegin                       52
694dcbc457SBarry Smith #define VEC_AssemblyEnd                         53
704dcbc457SBarry Smith #define VEC_MTDot                               54
714dcbc457SBarry Smith #define VEC_MDot                                55
724dcbc457SBarry Smith #define VEC_MAXPY                               56
734dcbc457SBarry Smith #define VEC_PMult                               57
744dcbc457SBarry Smith #define VEC_SetValues                           58
754dcbc457SBarry Smith #define VEC_Load                                59
764dcbc457SBarry Smith #define VEC_View                                60
774dcbc457SBarry Smith #define VEC_ScatterBegin                        61
784dcbc457SBarry Smith #define VEC_ScatterEnd                          62
79bf5bf444SLois Curfman McInnes #define VEC_SetRandom                           63
8097bb86f7SLois Curfman McInnes 
814dcbc457SBarry Smith #define SLES_Solve                              70
824dcbc457SBarry Smith #define SLES_SetUp                              71
8397bb86f7SLois Curfman McInnes 
844dcbc457SBarry Smith #define KSP_GMRESOrthogonalization              72
8597bb86f7SLois Curfman McInnes 
864dcbc457SBarry Smith #define PC_SetUp                                75
8736058207SBarry Smith #define PC_SetUpOnBlocks                        76
8832284f49SSatish Balay #define PC_Apply                                77
89614700edSBarry Smith #define PC_ApplySymmetricLeft                   78
90614700edSBarry Smith #define PC_ApplySymmetricRight                  79
914dcbc457SBarry Smith 
924dcbc457SBarry Smith #define SNES_Solve                              80
934dcbc457SBarry Smith #define SNES_LineSearch                         81
944dcbc457SBarry Smith #define SNES_FunctionEval                       82
954dcbc457SBarry Smith #define SNES_JacobianEval                       83
964dcbc457SBarry Smith #define SNES_MinimizationFunctionEval           84
974dcbc457SBarry Smith #define SNES_GradientEval                       85
984dcbc457SBarry Smith #define SNES_HessianEval                        86
994dcbc457SBarry Smith 
100682d7d0cSBarry Smith #define TS_Step                                 90
10172936c9dSBarry Smith 
10272936c9dSBarry Smith #define Petsc_Barrier                           100
10355206aebSLois Curfman McInnes 
10455206aebSLois Curfman McInnes #define DFVec_RefineVector                      110
10555206aebSLois Curfman McInnes #define DFVec_AssembleFullVector                111
10655206aebSLois Curfman McInnes #define DFVec_GetComponentVectors               112
10755206aebSLois Curfman McInnes #define DFVec_DrawContours                      113
10855206aebSLois Curfman McInnes 
10941debaddSBarry Smith /*
110b3b1b5bfSLois Curfman McInnes    Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved
11177c4ece6SBarry Smith    for applications.  Make sure that src/plog/src/plog.c defines enough
112b3b1b5bfSLois Curfman McInnes    entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH.
11341debaddSBarry Smith */
11435aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC              120
1154dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH                    200
11697bb86f7SLois Curfman McInnes 
11719b02663SBarry Smith /* Global flop counter */
11819b02663SBarry Smith extern double _TotalFlops;
11919b02663SBarry Smith 
120edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */
12194a424c1SBarry Smith extern int PLogInfo(void*,char*,...);
122cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int);
123614700edSBarry Smith extern int PLogInfoActivateClass(int);
124614700edSBarry Smith 
125614700edSBarry Smith #if defined(PETSC_LOG)  /* --------------------------------------------*/
126614700edSBarry Smith 
127a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);}
12877c4ece6SBarry Smith 
12977c4ece6SBarry Smith #if defined (HAVE_MPE)
13077c4ece6SBarry Smith #include "mpe.h"
131614700edSBarry Smith #define MPEBEGIN    1000
13277c4ece6SBarry Smith extern int PLogMPEBegin();
13377c4ece6SBarry Smith extern int PLogMPEDump(char *);
134614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[];
135614700edSBarry Smith extern int PLogEventMPEActivate(int);
136614700edSBarry Smith extern int PLogEventMPEDeActivate(int);
137614700edSBarry Smith #else
138614700edSBarry Smith #define PLogEventMPEActivate(a)
139614700edSBarry Smith #define PLogEventMPEDeActivate(a)
14077c4ece6SBarry Smith #endif
14177c4ece6SBarry Smith 
142614700edSBarry Smith extern int PLogEventActivate(int);
143614700edSBarry Smith extern int PLogEventDeActivate(int);
144614700edSBarry Smith 
145614700edSBarry Smith extern int PLogEventActivateClass();
146614700edSBarry Smith extern int PLogEventDeActivateClass();
147614700edSBarry Smith 
148614700edSBarry Smith extern int PLogEventFlags[];
14977c4ece6SBarry Smith extern int (*_PLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
15077c4ece6SBarry Smith extern int (*_PLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
15177c4ece6SBarry Smith extern int (*_PHC)(PetscObject);
15277c4ece6SBarry Smith extern int (*_PHD)(PetscObject);
15377c4ece6SBarry Smith 
15477c4ece6SBarry Smith #if defined(HAVE_MPE)
15577c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \
15677c4ece6SBarry Smith   { _tacky++; \
157614700edSBarry Smith    if (_PLB && PLogEventFlags[e]) \
15877c4ece6SBarry Smith      (*_PLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
159614700edSBarry Smith    if (_tacky == 1 && UseMPE && PLogEventMPEFlags[e])\
16077c4ece6SBarry Smith      MPE_Log_event(MPEBEGIN+2*e,0,"");\
16177c4ece6SBarry Smith   }
16277c4ece6SBarry Smith #else
16377c4ece6SBarry Smith #define PLogEventBegin(e,o1,o2,o3,o4) {static int _tacky = 0; \
16477c4ece6SBarry Smith   { _tacky++; \
165614700edSBarry Smith    if (_PLB && PLogEventFlags[e]) \
16677c4ece6SBarry Smith      (*_PLB)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
16777c4ece6SBarry Smith   }
16877c4ece6SBarry Smith #endif
16977c4ece6SBarry Smith 
17077c4ece6SBarry Smith #if defined(HAVE_MPE)
17177c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
172614700edSBarry Smith   if (_PLE && PLogEventFlags[e]) \
17377c4ece6SBarry Smith     (*_PLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
174614700edSBarry Smith   if (_tacky == 1 && UseMPE && PLogEventMPEFlags[e])\
17577c4ece6SBarry Smith      MPE_Log_event(MPEBEGIN+2*e+1,0,"");\
17677c4ece6SBarry Smith   }  _tacky--;}
17777c4ece6SBarry Smith #else
17877c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
179614700edSBarry Smith   if (_PLE && PLogEventFlags[e]) \
18077c4ece6SBarry Smith     (*_PLE)(e,_tacky,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
18177c4ece6SBarry Smith   } _tacky--;}
18277c4ece6SBarry Smith #endif
18377c4ece6SBarry Smith 
18477c4ece6SBarry Smith 
18577c4ece6SBarry Smith #define PLogObjectParent(p,c)       {PetscValidHeader((PetscObject)c); \
18677c4ece6SBarry Smith                                      PetscValidHeader((PetscObject)p);\
18777c4ece6SBarry Smith                                      ((PetscObject)(c))->parent = (PetscObject) p;}
18877c4ece6SBarry Smith #define PLogObjectParents(p,n,d)    {int _i; for ( _i=0; _i<n; _i++ ) \
18977c4ece6SBarry Smith                                     PLogObjectParent(p,(d)[_i]);}
19077c4ece6SBarry Smith #define PLogObjectCreate(h)         {if (_PHC) (*_PHC)((PetscObject)h);}
19177c4ece6SBarry Smith #define PLogObjectDestroy(h)        {if (_PHD) (*_PHD)((PetscObject)h);}
19277c4ece6SBarry Smith #define PLogObjectMemory(p,m)       {PetscValidHeader((PetscObject)p);\
19377c4ece6SBarry Smith                                     ((PetscObject)(p))->mem += (m);}
19477c4ece6SBarry Smith extern int PLogObjectState(PetscObject,char *,...);
19577c4ece6SBarry Smith extern int PLogDestroy();
19677c4ece6SBarry Smith extern int PLogStagePush(int);
19777c4ece6SBarry Smith extern int PLogStagePop();
19877c4ece6SBarry Smith extern int PLogStageRegister(int,char*);
199edde42fcSLois Curfman McInnes extern int PLogPrintSummary(MPI_Comm,FILE *);
200edde42fcSLois Curfman McInnes extern int PLogBegin();
201edde42fcSLois Curfman McInnes extern int PLogAllBegin();
202edde42fcSLois Curfman McInnes extern int PLogDump(char*);
203edde42fcSLois Curfman McInnes extern int PLogEventRegister(int*,char*,char*);
204e0937024SBarry Smith extern double PetscGetFlops();
20577c4ece6SBarry Smith 
206*ce85283eSBarry Smith /*
207*ce85283eSBarry Smith      This does not use for MPI-Uni because our src/mpiuni/mpi.h file
208*ce85283eSBarry Smith    uses macros to defined the MPI operations.
209*ce85283eSBarry Smith */
210*ce85283eSBarry Smith #if !defined(PETSC_USING_MPIUNI) && !defined(PARCH_hpux)
21177a39924SBarry Smith /*
21277a39924SBarry Smith    Logging of MPI activities
21377a39924SBarry Smith */
214e0937024SBarry Smith extern double irecv_ct,isend_ct,wait_ct,wait_any_ct,recv_ct,send_ct;
215e0937024SBarry Smith extern double irecv_len,isend_len,recv_len,send_len;
216e0937024SBarry Smith extern double wait_all_ct,allreduce_ct,sum_of_waits_ct;
21777a39924SBarry Smith 
21877a39924SBarry Smith #define TypeSize(buff,count,type) \
21977a39924SBarry Smith { \
22077a39924SBarry Smith   if (type == MPIU_SCALAR) { \
221*ce85283eSBarry Smith     buff += (double) ((count)*sizeof(Scalar)); \
22277a39924SBarry Smith   } else if (type == MPI_INT) { \
223*ce85283eSBarry Smith     buff += (double) ((count)*sizeof(int));  \
22477a39924SBarry Smith   } else { \
225*ce85283eSBarry Smith     int _size; MPI_Type_size(type,&_size); buff += (double) ((count)*_size); \
22677a39924SBarry Smith   } \
22777a39924SBarry Smith }
22877a39924SBarry Smith 
229*ce85283eSBarry Smith #if defined(PARCH_hpux)
230*ce85283eSBarry Smith /*
231*ce85283eSBarry Smith     This is a tacky fix. The CPP on HP-UX scans the macros twice
232*ce85283eSBarry Smith   thus it double counted the send/receive operations.
233*ce85283eSBarry Smith */
234*ce85283eSBarry Smith #define MPI_Irecv( buf, count,  datatype, source, tag, comm, request) \
235*ce85283eSBarry Smith { \
236*ce85283eSBarry Smith   MPI_Irecv( buf, count,  datatype, source, tag, comm, request);\
237*ce85283eSBarry Smith   irecv_ct += .5; TypeSize(irecv_len,.5*count,datatype); \
238*ce85283eSBarry Smith }
239*ce85283eSBarry Smith #define MPI_Isend( buf, count,  datatype, dest, tag, comm, request) \
240*ce85283eSBarry Smith { \
241*ce85283eSBarry Smith   MPI_Isend( buf, count,  datatype, dest, tag, comm, request); \
242*ce85283eSBarry Smith   isend_ct += .5;   TypeSize(isend_len,.5*count,datatype); \
243*ce85283eSBarry Smith }
244*ce85283eSBarry Smith #define MPI_Recv( buf, count,  datatype, source, tag, comm, status) \
245*ce85283eSBarry Smith { \
246*ce85283eSBarry Smith   MPI_Recv( buf, count,  datatype, source, tag, comm, status); \
247*ce85283eSBarry Smith   recv_ct += .5; TypeSize(recv_len,.5*count,datatype); \
248*ce85283eSBarry Smith }
249*ce85283eSBarry Smith #define MPI_Send( buf, count,  datatype, dest, tag, comm) \
250*ce85283eSBarry Smith { \
251*ce85283eSBarry Smith   MPI_Send( buf, count,  datatype, dest, tag, comm); \
252*ce85283eSBarry Smith   send_ct += .5;  TypeSize(send_len,.5*count,datatype); \
253*ce85283eSBarry Smith }
254*ce85283eSBarry Smith #else
25577a39924SBarry Smith #define MPI_Irecv( buf, count,  datatype, source, tag, comm, request) \
25677a39924SBarry Smith { \
25777a39924SBarry Smith   MPI_Irecv( buf, count,  datatype, source, tag, comm, request);\
25877a39924SBarry Smith   irecv_ct++; TypeSize(irecv_len,count,datatype); \
25977a39924SBarry Smith }
26077a39924SBarry Smith #define MPI_Isend( buf, count,  datatype, dest, tag, comm, request) \
26177a39924SBarry Smith { \
26277a39924SBarry Smith   MPI_Isend( buf, count,  datatype, dest, tag, comm, request); \
263e0937024SBarry Smith   isend_ct++;   TypeSize(isend_len,count,datatype); \
26477a39924SBarry Smith }
265*ce85283eSBarry Smith #define MPI_Recv( buf, count,  datatype, source, tag, comm, status) \
266*ce85283eSBarry Smith { \
267*ce85283eSBarry Smith   MPI_Recv( buf, count,  datatype, source, tag, comm, status); \
268*ce85283eSBarry Smith   recv_ct++; TypeSize(recv_len,count,datatype); \
269*ce85283eSBarry Smith }
27077a39924SBarry Smith #define MPI_Send( buf, count,  datatype, dest, tag, comm) \
27177a39924SBarry Smith { \
27277a39924SBarry Smith   MPI_Send( buf, count,  datatype, dest, tag, comm); \
273e0937024SBarry Smith   send_ct++;  TypeSize(send_len,count,datatype); \
27477a39924SBarry Smith }
275*ce85283eSBarry Smith #endif
27677a39924SBarry Smith 
27777a39924SBarry Smith #define MPI_Wait(request, status) \
27877a39924SBarry Smith ( \
279e0937024SBarry Smith   wait_ct++, sum_of_waits_ct++,\
28077a39924SBarry Smith   MPI_Wait(request, status)  \
28177a39924SBarry Smith )
28277a39924SBarry Smith 
28377a39924SBarry Smith #define MPI_Waitany(a, b, c, d) \
28477a39924SBarry Smith ( \
285e0937024SBarry Smith   wait_any_ct++, sum_of_waits_ct++,  \
28677a39924SBarry Smith   MPI_Waitany(a, b, c, d)\
28777a39924SBarry Smith )
28877a39924SBarry Smith 
28977a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \
29077a39924SBarry Smith ( \
291*ce85283eSBarry Smith   wait_all_ct++, sum_of_waits_ct += (double) (count),\
29277a39924SBarry Smith   MPI_Waitall(count, array_of_requests, array_of_statuses) \
29377a39924SBarry Smith )
29477a39924SBarry Smith 
29577a39924SBarry Smith #define MPI_Allreduce( sendbuf,  recvbuf, count, datatype, op, comm) \
29677a39924SBarry Smith ( \
29777a39924SBarry Smith   allreduce_ct++, \
29877a39924SBarry Smith   MPI_Allreduce( sendbuf,  recvbuf, count, datatype, op, comm) \
29977a39924SBarry Smith )
30077a39924SBarry Smith #endif /* ! PETSC_USING_MPIUNI */
301614700edSBarry Smith 
302614700edSBarry Smith #else  /* ------------------------------------------------------------*/
303614700edSBarry Smith 
304614700edSBarry Smith #define PLogFlops(n)
305614700edSBarry Smith 
306614700edSBarry Smith #if defined (HAVE_MPE)
307614700edSBarry Smith #define MPEBEGIN    1000
308614700edSBarry Smith extern int PLogMPEBegin();
309614700edSBarry Smith extern int PLogMPEDump(char *);
31077c4ece6SBarry Smith #else
311614700edSBarry Smith #define PLogEventMPEActivate(a)
312614700edSBarry Smith #define PLogEventMPEDeActivate(a)
313614700edSBarry Smith #endif
314614700edSBarry Smith 
315614700edSBarry Smith #define PLogEventActivate(a)
316614700edSBarry Smith #define PLogEventDeActivate(a)
317614700edSBarry Smith 
318614700edSBarry Smith #define PLogEventActivateClass()
319614700edSBarry Smith #define PLogEventDeActivateClass()
32077c4ece6SBarry Smith 
3217f8359c1SLois Curfman McInnes #define _PLB                          0
3227f8359c1SLois Curfman McInnes #define _PLE                          0
3237f8359c1SLois Curfman McInnes #define _PHC                          0
3247f8359c1SLois Curfman McInnes #define _PHD                          0
325e0937024SBarry Smith #define PetscGetFlops                 0.0
326d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
327d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
328d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c)
329d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c)
330d7a720efSLois Curfman McInnes #define PLogObjectCreate(h)
331d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h)
332d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m)
333d7a720efSLois Curfman McInnes #define PLogDestroy()
334d7a720efSLois Curfman McInnes #define PLogStagePush(int)
335d7a720efSLois Curfman McInnes #define PLogStagePop()
336d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b)
337d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file)
338d7a720efSLois Curfman McInnes #define PLogBegin()
339d7a720efSLois Curfman McInnes #define PLogAllBegin()
340d7a720efSLois Curfman McInnes #define PLogDump(char)
341d7a720efSLois Curfman McInnes #define PLogEventRegister(a,b,c)
342d7a720efSLois Curfman McInnes #define PLogMPEBegin()
343d7a720efSLois Curfman McInnes #define PLogMPEDump(a)
3447f8359c1SLois Curfman McInnes extern int PLogObjectState(PetscObject,char *,...);
34577c4ece6SBarry Smith #endif
3466daaf66cSBarry Smith 
3478b6d568bSLois Curfman McInnes /*MC
34819b02663SBarry Smith    PLogFlops - Adds floating point operations to the global counter.
34919b02663SBarry Smith 
35019b02663SBarry Smith    Input Parameter:
35119b02663SBarry Smith .  f - flop counter
35219b02663SBarry Smith 
35319b02663SBarry Smith    Synopsis:
354682ac3c9SWilliam Gropp    void PLogFlops(int f)
35519b02663SBarry Smith 
35619b02663SBarry Smith    Notes:
35719b02663SBarry Smith    A global counter logs all PETSc flop counts.  The user can use
35819b02663SBarry Smith    PLogFlops() to increment this counter to include flops for the
35919b02663SBarry Smith    application code.
36019b02663SBarry Smith 
36119b02663SBarry Smith    PETSc automatically logs library events if the code has been
36219b02663SBarry Smith    compiled with -DPETSC_LOG (which is the default), and -log,
36319b02663SBarry Smith    -log_summary, or -log_all are specified.  PLogFlops() is
36419b02663SBarry Smith    intended for logging user flops to supplement this PETSc
36519b02663SBarry Smith    information.
36619b02663SBarry Smith 
36719b02663SBarry Smith     Example of Usage:
36835aab85fSBarry Smith $     int USER_EVENT;
369b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
37019b02663SBarry Smith $     PLogEventBegin(USER_EVENT,0,0,0,0);
37119b02663SBarry Smith $        [code segment to monitor]
37219b02663SBarry Smith $        PLogFlops(user_flops)
37319b02663SBarry Smith $     PLogEventEnd(USER_EVENT,0,0,0,0);
37419b02663SBarry Smith 
37558cd8a20SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogEventEnd(), PetscGetFlops()
37619b02663SBarry Smith 
377edde42fcSLois Curfman McInnes .keywords: log, flops, floating point operations
37819b02663SBarry Smith M*/
37919b02663SBarry Smith 
38097bb86f7SLois Curfman McInnes 
381d7a720efSLois Curfman McInnes /*MC
38219b02663SBarry Smith    PLogEventBegin - Logs the beginning of a user event.
38397bb86f7SLois Curfman McInnes 
38497bb86f7SLois Curfman McInnes    Input Parameters:
38535aab85fSBarry Smith .  e - integer associated with the event obtained from PLogEventRegister()
38697bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
38797bb86f7SLois Curfman McInnes 
38897bb86f7SLois Curfman McInnes    Synopsis:
389682ac3c9SWilliam Gropp    void PLogEventBegin(int e,PetscObject o1,PetscObject o2,PetscObject o3,
39097bb86f7SLois Curfman McInnes                   PetscObject o4)
39197bb86f7SLois Curfman McInnes 
39297bb86f7SLois Curfman McInnes    Notes:
39397bb86f7SLois Curfman McInnes    You should also register each integer event with the command
39497bb86f7SLois Curfman McInnes    PLogRegisterEvent().  The source code must be compiled with
39597bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
39697bb86f7SLois Curfman McInnes 
39797bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
39897bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
39997bb86f7SLois Curfman McInnes    specified.  PLogEventBegin() is intended for logging user events
40097bb86f7SLois Curfman McInnes    to supplement this PETSc information.
40197bb86f7SLois Curfman McInnes 
40297bb86f7SLois Curfman McInnes     Example of Usage:
40335aab85fSBarry Smith $     int USER_EVENT;
4040eb211faSLois Curfman McInnes $     int user_event_flops;
405b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
40635aab85fSBarry Smith $     PLogEventBegin(&USER_EVENT,0,0,0,0);
40797bb86f7SLois Curfman McInnes $        [code segment to monitor]
4080eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
40935aab85fSBarry Smith $     PLogEventEnd(&USER_EVENT,0,0,0,0);
41097bb86f7SLois Curfman McInnes 
41197bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventEnd(), PLogFlops()
41297bb86f7SLois Curfman McInnes 
41397bb86f7SLois Curfman McInnes .keywords: log, event, begin
41497bb86f7SLois Curfman McInnes M*/
41597bb86f7SLois Curfman McInnes 
416d7a720efSLois Curfman McInnes /*MC
41719b02663SBarry Smith    PLogEventEnd - Log the end of a user event.
41897bb86f7SLois Curfman McInnes 
41997bb86f7SLois Curfman McInnes    Input Parameters:
42035aab85fSBarry Smith .  e - integer associated with the event obtained with PLogEventRegister()
42197bb86f7SLois Curfman McInnes .  o1,o2,o3,o4 - objects associated with the event, or 0
42297bb86f7SLois Curfman McInnes 
42397bb86f7SLois Curfman McInnes    Synopsis:
424682ac3c9SWilliam Gropp    void PLogEventEnd(int e,PetscObject o1,PetscObject o2,PetscObject o3,
42597bb86f7SLois Curfman McInnes                 PetscObject o4)
42697bb86f7SLois Curfman McInnes 
42797bb86f7SLois Curfman McInnes    Notes:
42897bb86f7SLois Curfman McInnes    You should also register each integer event with the command
42997bb86f7SLois Curfman McInnes    PLogRegisterEvent(). Source code must be compiled with
43097bb86f7SLois Curfman McInnes    -DPETSC_LOG, which is the default.
43197bb86f7SLois Curfman McInnes 
43297bb86f7SLois Curfman McInnes    PETSc automatically logs library events if the code has been
43397bb86f7SLois Curfman McInnes    compiled with -DPETSC_LOG, and -log, -log_summary, or -log_all are
43497bb86f7SLois Curfman McInnes    specified.  PLogEventEnd() is intended for logging user events
43597bb86f7SLois Curfman McInnes    to supplement this PETSc information.
43697bb86f7SLois Curfman McInnes 
43797bb86f7SLois Curfman McInnes     Example of Usage:
43835aab85fSBarry Smith $     int USER_EVENT;
4390eb211faSLois Curfman McInnes $     int user_event_flops;
440b045bd31SSatish Balay $     PLogEventRegister(&USER_EVENT,"User event","Color:");
44197bb86f7SLois Curfman McInnes $     PLogEventBegin(USER_EVENT,0,0,0,0);
44297bb86f7SLois Curfman McInnes $        [code segment to monitor]
4430eb211faSLois Curfman McInnes $        PLogFlops(user_event_flops);
44497bb86f7SLois Curfman McInnes $     PLogEventEnd(USER_EVENT,0,0,0,0);
44597bb86f7SLois Curfman McInnes 
44697bb86f7SLois Curfman McInnes .seealso: PLogEventRegister(), PLogEventBegin(), PLogFlops()
44797bb86f7SLois Curfman McInnes 
44897bb86f7SLois Curfman McInnes .keywords: log, event, end
44997bb86f7SLois Curfman McInnes M*/
45097bb86f7SLois Curfman McInnes 
451e0937024SBarry Smith 
45297bb86f7SLois Curfman McInnes #endif
45341debaddSBarry Smith 
45477c4ece6SBarry Smith 
45577c4ece6SBarry Smith 
456