xref: /petsc/include/petsclog.h (revision 91e9ee9fc0200d5446579c7185d9e655300e8525)
1*91e9ee9fSBarry Smith /* $Id: petsclog.h,v 1.126 1999/03/01 04:59:18 bsmith Exp bsmith $ */
297bb86f7SLois Curfman McInnes 
397bb86f7SLois Curfman McInnes /*
47588ac45SBarry Smith     Defines profile/logging in PETSc.
597bb86f7SLois Curfman McInnes */
697bb86f7SLois Curfman McInnes 
788d459dfSBarry Smith #if !defined(__PLOG_H)
888d459dfSBarry Smith #define __PLOG_H
997bb86f7SLois Curfman McInnes #include "petsc.h"
1097bb86f7SLois Curfman McInnes 
1197bb86f7SLois Curfman McInnes /*
127588ac45SBarry Smith   Lists all PETSc events that are logged/profiled.
137588ac45SBarry Smith 
14a2ce50c7SBarry Smith   If you add an event here, make sure you add it to
15a2ce50c7SBarry Smith   petsc/bin/petscview.cfg,
16a2ce50c7SBarry Smith   petsc/bin/petscview,
17a2ce50c7SBarry Smith   petsc/src/plog/src/plog.c,
182ee1dbe0SBarry Smith   petsc/src/plog/src/plogmpe.c, and
1926cd32c0SSatish Balay   petsc/include/finclude/petsclog.h!!!
2097bb86f7SLois Curfman McInnes */
2197bb86f7SLois Curfman McInnes #define MAT_Mult                                0
221ff317f7SLois Curfman McInnes #define MAT_MatrixFreeMult                      1
231ff317f7SLois Curfman McInnes #define MAT_AssemblyBegin                       2
241ff317f7SLois Curfman McInnes #define MAT_AssemblyEnd                         3
25*91e9ee9fSBarry Smith #define MAT_GetOrdering                         4
261ff317f7SLois Curfman McInnes #define MAT_MultTrans                           5
271ff317f7SLois Curfman McInnes #define MAT_MultAdd                             6
281ff317f7SLois Curfman McInnes #define MAT_MultTransAdd                        7
291ff317f7SLois Curfman McInnes #define MAT_LUFactor                            8
301ff317f7SLois Curfman McInnes #define MAT_CholeskyFactor                      9
311ff317f7SLois Curfman McInnes #define MAT_LUFactorSymbolic                    10
321ff317f7SLois Curfman McInnes #define MAT_ILUFactorSymbolic                   11
331ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorSymbolic              12
341ff317f7SLois Curfman McInnes #define MAT_IncompleteCholeskyFactorSymbolic    13
351ff317f7SLois Curfman McInnes #define MAT_LUFactorNumeric                     14
361ff317f7SLois Curfman McInnes #define MAT_CholeskyFactorNumeric               15
371ff317f7SLois Curfman McInnes #define MAT_Relax                               16
381ff317f7SLois Curfman McInnes #define MAT_Copy                                17
391ff317f7SLois Curfman McInnes #define MAT_Convert                             18
401ff317f7SLois Curfman McInnes #define MAT_Scale                               19
411ff317f7SLois Curfman McInnes #define MAT_ZeroEntries                         20
421ff317f7SLois Curfman McInnes #define MAT_Solve                               21
431ff317f7SLois Curfman McInnes #define MAT_SolveAdd                            22
441ff317f7SLois Curfman McInnes #define MAT_SolveTrans                          23
451ff317f7SLois Curfman McInnes #define MAT_SolveTransAdd                       24
461ff317f7SLois Curfman McInnes #define MAT_SetValues                           25
471ff317f7SLois Curfman McInnes #define MAT_ForwardSolve                        26
481ff317f7SLois Curfman McInnes #define MAT_BackwardSolve                       27
491ff317f7SLois Curfman McInnes #define MAT_Load                                28
501ff317f7SLois Curfman McInnes #define MAT_View                                29
511ff317f7SLois Curfman McInnes #define MAT_ILUFactor                           30
523e584e2eSBarry Smith #define MAT_GetColoring                         31
531ff317f7SLois Curfman McInnes #define MAT_GetSubMatrices                      32
541ff317f7SLois Curfman McInnes #define MAT_GetValues                           33
551ff317f7SLois Curfman McInnes #define MAT_IncreaseOverlap                     34
56dd8bebb4SSatish Balay #define MAT_GetRow                              35
57ca161407SBarry Smith #define MAT_Partitioning                        36
5897bb86f7SLois Curfman McInnes 
590462333dSBarry Smith #define VEC_ReduceArithmetic                    37
600462333dSBarry Smith #define VEC_ReduceCommunication                 38
61005c665bSBarry Smith #define VEC_ScatterBarrier                      39
624dcbc457SBarry Smith #define VEC_Dot                                 40
634dcbc457SBarry Smith #define VEC_Norm                                41
644dcbc457SBarry Smith #define VEC_Max                                 42
654dcbc457SBarry Smith #define VEC_Min                                 43
664dcbc457SBarry Smith #define VEC_TDot                                44
674dcbc457SBarry Smith #define VEC_Scale                               45
684dcbc457SBarry Smith #define VEC_Copy                                46
694dcbc457SBarry Smith #define VEC_Set                                 47
704dcbc457SBarry Smith #define VEC_AXPY                                48
714dcbc457SBarry Smith #define VEC_AYPX                                49
724dcbc457SBarry Smith #define VEC_Swap                                50
734dcbc457SBarry Smith #define VEC_WAXPY                               51
744dcbc457SBarry Smith #define VEC_AssemblyBegin                       52
754dcbc457SBarry Smith #define VEC_AssemblyEnd                         53
764dcbc457SBarry Smith #define VEC_MTDot                               54
774dcbc457SBarry Smith #define VEC_MDot                                55
784dcbc457SBarry Smith #define VEC_MAXPY                               56
794dcbc457SBarry Smith #define VEC_PMult                               57
804dcbc457SBarry Smith #define VEC_SetValues                           58
814dcbc457SBarry Smith #define VEC_Load                                59
824dcbc457SBarry Smith #define VEC_View                                60
834dcbc457SBarry Smith #define VEC_ScatterBegin                        61
844dcbc457SBarry Smith #define VEC_ScatterEnd                          62
85bf5bf444SLois Curfman McInnes #define VEC_SetRandom                           63
8697bb86f7SLois Curfman McInnes 
87005c665bSBarry Smith #define VEC_NormBarrier                         64
88005c665bSBarry Smith #define VEC_NormComm                            65
89005c665bSBarry Smith #define VEC_DotBarrier                          66
90005c665bSBarry Smith #define VEC_DotComm                             67
91005c665bSBarry Smith #define VEC_MDotBarrier                         68
92005c665bSBarry Smith #define VEC_MDotComm                            69
93005c665bSBarry Smith 
944dcbc457SBarry Smith #define SLES_Solve                              70
954dcbc457SBarry Smith #define SLES_SetUp                              71
9697bb86f7SLois Curfman McInnes 
974dcbc457SBarry Smith #define KSP_GMRESOrthogonalization              72
9897bb86f7SLois Curfman McInnes 
991bffabb2SLois Curfman McInnes #define PC_ModifySubMatrices                    74
1004dcbc457SBarry Smith #define PC_SetUp                                75
10136058207SBarry Smith #define PC_SetUpOnBlocks                        76
10232284f49SSatish Balay #define PC_Apply                                77
103614700edSBarry Smith #define PC_ApplySymmetricLeft                   78
104614700edSBarry Smith #define PC_ApplySymmetricRight                  79
1054dcbc457SBarry Smith 
1064dcbc457SBarry Smith #define SNES_Solve                              80
1074dcbc457SBarry Smith #define SNES_LineSearch                         81
1084dcbc457SBarry Smith #define SNES_FunctionEval                       82
1094dcbc457SBarry Smith #define SNES_JacobianEval                       83
1104dcbc457SBarry Smith #define SNES_MinimizationFunctionEval           84
1114dcbc457SBarry Smith #define SNES_GradientEval                       85
1124dcbc457SBarry Smith #define SNES_HessianEval                        86
1134dcbc457SBarry Smith 
1140462333dSBarry Smith #define VEC_ReduceBarrier                       87
1150462333dSBarry Smith #define VEC_ReduceCommOnly                      88
1160462333dSBarry Smith 
117682d7d0cSBarry Smith #define TS_Step                                 90
118bf343e40SBarry Smith #define TS_PseudoComputeTimeStep                91
11972936c9dSBarry Smith 
12072936c9dSBarry Smith #define Petsc_Barrier                           100
12155206aebSLois Curfman McInnes 
1220513a670SBarry Smith #define EC_SetUp                                105
1230513a670SBarry Smith #define EC_Solve                                106
1240513a670SBarry Smith 
12555206aebSLois Curfman McInnes #define DFVec_RefineVector                      110
12655206aebSLois Curfman McInnes #define DFVec_AssembleFullVector                111
12755206aebSLois Curfman McInnes #define DFVec_GetComponentVectors               112
12855206aebSLois Curfman McInnes #define DFVec_DrawContours                      113
12955206aebSLois Curfman McInnes 
13041debaddSBarry Smith /*
131b3b1b5bfSLois Curfman McInnes    Event numbers PLOG_USER_EVENT_LOW to PLOG_USER_EVENT_HIGH are reserved
13277c4ece6SBarry Smith    for applications.  Make sure that src/plog/src/plog.c defines enough
133b3b1b5bfSLois Curfman McInnes    entries in (*name)[] to go up to PLOG_USER_EVENT_HIGH.
13441debaddSBarry Smith */
13535aab85fSBarry Smith #define PLOG_USER_EVENT_LOW_STATIC              120
1364dcbc457SBarry Smith #define PLOG_USER_EVENT_HIGH                    200
13797bb86f7SLois Curfman McInnes 
13819b02663SBarry Smith /* Global flop counter */
13947794344SBarry Smith extern PLogDouble _TotalFlops;
14019b02663SBarry Smith 
141edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */
142e26ad7d8SSatish Balay extern int PLogInfo(void*,const char[],...);
143cfd8f56bSLois Curfman McInnes extern int PLogInfoDeactivateClass(int);
144614700edSBarry Smith extern int PLogInfoActivateClass(int);
14543a90d84SBarry Smith extern int PLogPrintInfo;  /* if 1, indicates PLogInfo() is turned on */
146614700edSBarry Smith 
1473a40ed3dSBarry Smith #if defined(USE_PETSC_LOG)  /* --- Logging is turned on --------------------------------*/
148614700edSBarry Smith 
149da63de55SLois Curfman McInnes /*
150da63de55SLois Curfman McInnes    Flop counting:  We count each arithmetic operation (e.g., addition, multiplication) separately.
151da63de55SLois Curfman McInnes 
152da63de55SLois Curfman McInnes    For the complex numbers version, note that
153da63de55SLois Curfman McInnes        1 complex addition = 2 flops
154da63de55SLois Curfman McInnes        1 complex multiplication = 6 flops,
155da63de55SLois Curfman McInnes    where we define 1 flop as that for a double precision scalar.  We roughly approximate
156da63de55SLois Curfman McInnes    flop counting for complex numbers by multiplying the total flops by 4; this corresponds
157da63de55SLois Curfman McInnes    to the assumption that we're counting mostly additions and multiplications -- and
158da63de55SLois Curfman McInnes    roughly the same number of each.  More accurate counting could be done by distinguishing
159da63de55SLois Curfman McInnes    among the various arithmetic operations.
160da63de55SLois Curfman McInnes  */
161da63de55SLois Curfman McInnes 
1623a40ed3dSBarry Smith #if defined(USE_PETSC_COMPLEX)
163da63de55SLois Curfman McInnes #define PLogFlops(n) {_TotalFlops += (4*n);}
164da63de55SLois Curfman McInnes #else
165a2ce50c7SBarry Smith #define PLogFlops(n) {_TotalFlops += (n);}
166da63de55SLois Curfman McInnes #endif
16777c4ece6SBarry Smith 
16877c4ece6SBarry Smith #if defined (HAVE_MPE)
16977c4ece6SBarry Smith #include "mpe.h"
170614700edSBarry Smith #define MPEBEGIN    1000
171cf256101SBarry Smith extern int PLogMPEBegin(void);
172e26ad7d8SSatish Balay extern int PLogMPEDump(const char[]);
173614700edSBarry Smith extern int UseMPE,PLogEventMPEFlags[];
174614700edSBarry Smith extern int PLogEventMPEActivate(int);
175905e6a2fSBarry Smith extern int PLogEventMPEDeactivate(int);
176614700edSBarry Smith #else
177c74530a3SSatish Balay #define PLogEventMPEActivate(a) 0
178c74530a3SSatish Balay #define PLogEventMPEDeactivate(a) 0
17977c4ece6SBarry Smith #endif
18077c4ece6SBarry Smith 
181614700edSBarry Smith extern int PLogEventActivate(int);
182905e6a2fSBarry Smith extern int PLogEventDeactivate(int);
183614700edSBarry Smith 
1843e584e2eSBarry Smith extern int PLogEventActivateClass(int);
1853e584e2eSBarry Smith extern int PLogEventDeactivateClass(int);
186614700edSBarry Smith 
187614700edSBarry Smith extern int PLogEventFlags[];
188b3bbe94bSBarry Smith extern int (*_PLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
189b3bbe94bSBarry Smith extern int (*_PLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
190b3bbe94bSBarry Smith extern int (*_PLogPHC)(PetscObject);
191b3bbe94bSBarry Smith extern int (*_PLogPHD)(PetscObject);
19277c4ece6SBarry Smith 
19377c4ece6SBarry Smith #if defined(HAVE_MPE)
194005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \
195005c665bSBarry Smith   { \
196005c665bSBarry Smith     if (_PLogPLB && PLogEventFlags[e]) {                           \
197005c665bSBarry Smith       PLogEventBegin((e),o1,o2,o3,o4);                                   \
198005c665bSBarry Smith       if (UseMPE && PLogEventMPEFlags[(e)])\
199005c665bSBarry Smith         MPE_Log_event(MPEBEGIN+2*(e),0,"");\
200005c665bSBarry Smith       MPI_Barrier(cm);                                             \
201005c665bSBarry Smith       PLogEventEnd((e),o1,o2,o3,o4);                                     \
202005c665bSBarry Smith       if (UseMPE && PLogEventMPEFlags[(e)])\
203005c665bSBarry Smith         MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\
204005c665bSBarry Smith     }                                                                \
205005c665bSBarry Smith     PLogEventBegin(e+1,o1,o2,o3,o4);                                   \
206005c665bSBarry Smith     if (UseMPE && PLogEventMPEFlags[(e)+1])\
207005c665bSBarry Smith       MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");\
208005c665bSBarry Smith   }
209a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4)  \
21056cd22aeSBarry Smith   {  \
211005c665bSBarry Smith    if (_PLogPLB && PLogEventFlags[(e)]) \
212005c665bSBarry Smith      (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
213005c665bSBarry Smith    if (UseMPE && PLogEventMPEFlags[(e)])\
214005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*(e),0,"");\
21577c4ece6SBarry Smith   }
21677c4ece6SBarry Smith #else
217005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \
218005c665bSBarry Smith   { \
219005c665bSBarry Smith     if (_PLogPLB && PLogEventFlags[(e)]) {                           \
220005c665bSBarry Smith       PLogEventBegin((e),o1,o2,o3,o4);                                   \
221005c665bSBarry Smith       MPI_Barrier(cm);                                             \
222005c665bSBarry Smith       PLogEventEnd((e),o1,o2,o3,o4);                                     \
223005c665bSBarry Smith     }                                                                \
224005c665bSBarry Smith     PLogEventBegin((e)+1,o1,o2,o3,o4);                                   \
225005c665bSBarry Smith   }
226a1b5d808SSatish Balay #define PLogEventBegin(e,o1,o2,o3,o4)  \
22756cd22aeSBarry Smith   {  \
228005c665bSBarry Smith    if (_PLogPLB && PLogEventFlags[(e)]) \
229005c665bSBarry Smith      (*_PLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
23077c4ece6SBarry Smith   }
23177c4ece6SBarry Smith #endif
23277c4ece6SBarry Smith 
23377c4ece6SBarry Smith #if defined(HAVE_MPE)
234005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\
235005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)+1]) \
236005c665bSBarry Smith     (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
237005c665bSBarry Smith   if (UseMPE && PLogEventMPEFlags[(e)+1])\
238005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*((e)+1)+1,0,"");\
239005c665bSBarry Smith   }
24077c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
241005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)]) \
242005c665bSBarry Smith     (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
243005c665bSBarry Smith   if (UseMPE && PLogEventMPEFlags[(e)])\
244005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*(e)+1,0,"");\
245a1b5d808SSatish Balay   }
24677c4ece6SBarry Smith #else
247005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm) {\
248005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)+1]) \
249005c665bSBarry Smith     (*_PLogPLE)((e)+1,0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
250005c665bSBarry Smith   }
25177c4ece6SBarry Smith #define PLogEventEnd(e,o1,o2,o3,o4) {\
252005c665bSBarry Smith   if (_PLogPLE && PLogEventFlags[(e)]) \
253005c665bSBarry Smith     (*_PLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));\
254a1b5d808SSatish Balay   }
25577c4ece6SBarry Smith #endif
25677c4ece6SBarry Smith 
25777c4ece6SBarry Smith 
2583a40ed3dSBarry Smith #define PLogObjectParent(p,c)       if (c) {PetscValidHeader((PetscObject)(c)); \
2593a40ed3dSBarry Smith                                      PetscValidHeader((PetscObject)(p));\
260e24b481bSBarry Smith                                      ((PetscObject)(c))->parent = (PetscObject) (p);\
261e24b481bSBarry Smith 				     ((PetscObject)(c))->parentid = ((PetscObject) p)->id;}
26277c4ece6SBarry Smith #define PLogObjectParents(p,n,d)    {int _i; for ( _i=0; _i<n; _i++ ) \
26377c4ece6SBarry Smith                                     PLogObjectParent(p,(d)[_i]);}
264b3bbe94bSBarry Smith #define PLogObjectCreate(h)         {if (_PLogPHC) (*_PLogPHC)((PetscObject)h);}
265b3bbe94bSBarry Smith #define PLogObjectDestroy(h)        {if (_PLogPHD) (*_PLogPHD)((PetscObject)h);}
26677c4ece6SBarry Smith #define PLogObjectMemory(p,m)       {PetscValidHeader((PetscObject)p);\
26777c4ece6SBarry Smith                                     ((PetscObject)(p))->mem += (m);}
268e26ad7d8SSatish Balay extern int  PLogObjectState(PetscObject,const char[],...);
269cf256101SBarry Smith extern int  PLogDestroy(void);
27077c4ece6SBarry Smith extern int  PLogStagePush(int);
2711d508c8cSSatish Balay extern int  PLogStagePop(void);
272e26ad7d8SSatish Balay extern int  PLogStageRegister(int,const char[]);
273e26ad7d8SSatish Balay extern int  PLogPrintSummary(MPI_Comm,const char[]);
2741d508c8cSSatish Balay extern int  PLogBegin(void);
275bc1211c7SBarry Smith extern int  PLogTraceBegin(FILE *);
2761d508c8cSSatish Balay extern int  PLogAllBegin(void);
277bc1211c7SBarry Smith extern int  PLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject),
278bc1211c7SBarry Smith                     int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject));
279e26ad7d8SSatish Balay extern int  PLogDump(const char[]);
280e26ad7d8SSatish Balay extern int  PLogEventRegister(int*,const char[],const char[]);
28199de4ba8SSatish Balay extern int  PetscGetFlops(PLogDouble*);
28277c4ece6SBarry Smith 
28347794344SBarry Smith extern PLogDouble irecv_ct, isend_ct, wait_ct, wait_any_ct, recv_ct, send_ct;
28447794344SBarry Smith extern PLogDouble irecv_len, isend_len, recv_len, send_len;
28547794344SBarry Smith extern PLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct;
286ca161407SBarry Smith extern int        PETSC_DUMMY,PETSC_DUMMY_SIZE;
287ca161407SBarry Smith 
288ce85283eSBarry Smith /*
28984cb2905SBarry Smith      This does not work for MPI-Uni because our src/mpiuni/mpi.h file
290ce85283eSBarry Smith    uses macros to defined the MPI operations.
29115308354SBarry Smith 
29215308354SBarry Smith      It does not work correctly from HP-UX because it processes the
293bb4af37aSBarry Smith    macros in a way that sometimes it double counts, hence
294bb4af37aSBarry Smith    HAVE_BROKEN_RECURSIVE_MACRO
2957c1e34a4SSatish Balay 
2967c1e34a4SSatish Balay      It does not work with Windows NT because winmpich lacks MPI_Type_size()
297ce85283eSBarry Smith */
298488ecbafSBarry Smith #if !defined(USING_MPIUNI) && !defined(HAVE_BROKEN_RECURSIVE_MACRO)
29977a39924SBarry Smith /*
30077a39924SBarry Smith    Logging of MPI activities
30177a39924SBarry Smith */
30277a39924SBarry Smith 
30377a39924SBarry Smith #define TypeSize(buff,count,type)                                                \
304ca161407SBarry Smith (                                                                                \
305ca161407SBarry Smith   MPI_Type_size(type,&PETSC_DUMMY_SIZE), buff += ((PLogDouble) ((count)*PETSC_DUMMY_SIZE)) \
306ca161407SBarry Smith )
30777a39924SBarry Smith 
30877a39924SBarry Smith #define MPI_Irecv( buf, count,  datatype, source, tag, comm, request)        \
309ca161407SBarry Smith (                                                                            \
310ca161407SBarry Smith   PETSC_DUMMY = MPI_Irecv( buf, count,  datatype, source, tag, comm, request),             \
311ca161407SBarry Smith   irecv_ct++, TypeSize(irecv_len,count,datatype),PETSC_DUMMY                            \
312ca161407SBarry Smith )
31315308354SBarry Smith 
31477a39924SBarry Smith #define MPI_Isend( buf, count,  datatype, dest, tag, comm, request)          \
315ca161407SBarry Smith (                                                                            \
316ca161407SBarry Smith   PETSC_DUMMY = MPI_Isend( buf, count,  datatype, dest, tag, comm, request),               \
317ca161407SBarry Smith   isend_ct++,   TypeSize(isend_len,count,datatype),PETSC_DUMMY                          \
318ca161407SBarry Smith )
31915308354SBarry Smith 
3200d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests)                                     \
321ca161407SBarry Smith (                                                                                      \
322ca161407SBarry Smith   PETSC_DUMMY = MPI_Startall( number, requests),                                                     \
323ca161407SBarry Smith   irecv_ct += (PLogDouble)(number), irecv_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \
324ca161407SBarry Smith )
3250d4b0b6cSBarry Smith 
3260d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests)                                    \
327ca161407SBarry Smith (                                                                                     \
328ca161407SBarry Smith   PETSC_DUMMY = MPI_Startall( number, requests),                                                    \
329ca161407SBarry Smith   isend_ct += (PLogDouble)(number), isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY \
330ca161407SBarry Smith )
3310d4b0b6cSBarry Smith 
3320d4b0b6cSBarry Smith #define MPI_Start_isend(count,  requests)\
333ca161407SBarry Smith (\
334ca161407SBarry Smith   PETSC_DUMMY = MPI_Start( requests),\
335ca161407SBarry Smith   isend_ct++, isend_len += ((PLogDouble) (count*sizeof(Scalar))),PETSC_DUMMY\
336ca161407SBarry Smith )
3370d4b0b6cSBarry Smith 
338ce85283eSBarry Smith #define MPI_Recv( buf, count,  datatype, source, tag, comm, status)           \
339ca161407SBarry Smith (                                                                            \
340ca161407SBarry Smith   PETSC_DUMMY = MPI_Recv( buf, count,  datatype, source, tag, comm, status),                \
341ca161407SBarry Smith   recv_ct++, TypeSize(recv_len,count,datatype), PETSC_DUMMY                              \
342ca161407SBarry Smith )
34315308354SBarry Smith 
34477a39924SBarry Smith #define MPI_Send( buf, count,  datatype, dest, tag, comm)                     \
345ca161407SBarry Smith (                                                                             \
346ca161407SBarry Smith   PETSC_DUMMY = MPI_Send( buf, count,  datatype, dest, tag, comm),                          \
347ca161407SBarry Smith   send_ct++,  TypeSize(send_len,count,datatype),PETSC_DUMMY                              \
348ca161407SBarry Smith )
34977a39924SBarry Smith 
35077a39924SBarry Smith #define MPI_Wait(request, status) \
35177a39924SBarry Smith (                                 \
352e0937024SBarry Smith   wait_ct++, sum_of_waits_ct++,   \
35377a39924SBarry Smith   MPI_Wait(request, status)       \
35477a39924SBarry Smith )
35577a39924SBarry Smith 
35677a39924SBarry Smith #define MPI_Waitany(a, b, c, d)     \
35777a39924SBarry Smith (                                   \
358e0937024SBarry Smith   wait_any_ct++, sum_of_waits_ct++, \
35977a39924SBarry Smith   MPI_Waitany(a, b, c, d)           \
36077a39924SBarry Smith )
36177a39924SBarry Smith 
36277a39924SBarry Smith #define MPI_Waitall(count, array_of_requests, array_of_statuses) \
36377a39924SBarry Smith (                                                                \
36447794344SBarry Smith   wait_all_ct++, sum_of_waits_ct += (PLogDouble) (count),        \
36577a39924SBarry Smith   MPI_Waitall(count, array_of_requests, array_of_statuses)       \
36677a39924SBarry Smith )
36777a39924SBarry Smith 
36877a39924SBarry Smith #define MPI_Allreduce( sendbuf,  recvbuf, count, datatype, op, comm) \
369005c665bSBarry Smith     (allreduce_ct++,MPI_Allreduce( sendbuf,  recvbuf, count, datatype, op, comm))
3703914022bSBarry Smith 
3710d4b0b6cSBarry Smith #else
3720d4b0b6cSBarry Smith 
3730d4b0b6cSBarry Smith #define MPI_Startall_irecv( count,number,requests) \
374ca161407SBarry Smith (                                                  \
375ca161407SBarry Smith   MPI_Startall( number, requests)                 \
376ca161407SBarry Smith )
3770d4b0b6cSBarry Smith 
3780d4b0b6cSBarry Smith #define MPI_Startall_isend( count,number,requests) \
379ca161407SBarry Smith (                                                  \
380ca161407SBarry Smith   MPI_Startall( number, requests)                 \
381ca161407SBarry Smith )
3820d4b0b6cSBarry Smith 
3830d4b0b6cSBarry Smith #define MPI_Start_isend(count,  requests) \
384ca161407SBarry Smith (                                         \
385ca161407SBarry Smith   MPI_Start( requests)                   \
386ca161407SBarry Smith )
3870d4b0b6cSBarry Smith 
388488ecbafSBarry Smith #endif /* !USING_MPIUNI && ! HAVE_BROKEN_RECURSIVE_MACRO */
389614700edSBarry Smith 
390df8cf0b5SBarry Smith #else  /* ---Logging is turned off --------------------------------------------*/
391614700edSBarry Smith 
392614700edSBarry Smith #define PLogFlops(n)
393614700edSBarry Smith 
394df8cf0b5SBarry Smith /*
395df8cf0b5SBarry Smith      With logging turned off, then MPE has to be turned off
396df8cf0b5SBarry Smith */
397614700edSBarry Smith #define MPEBEGIN                  1000
398df8cf0b5SBarry Smith #define PLogMPEBegin()
399df8cf0b5SBarry Smith #define PLogMPEDump(a)
400bf343e40SBarry Smith #define PLogEventMPEActivate(a)   0
401bf343e40SBarry Smith #define PLogEventMPEDeactivate(a) 0
402614700edSBarry Smith 
403bf343e40SBarry Smith #define PLogEventActivate(a)   0
404bf343e40SBarry Smith #define PLogEventDeactivate(a) 0
405614700edSBarry Smith 
406bf343e40SBarry Smith #define PLogEventActivateClass(a)   0
407bf343e40SBarry Smith #define PLogEventDeactivateClass(a) 0
40877c4ece6SBarry Smith 
409b3bbe94bSBarry Smith #define _PLogPLB                        0
410b3bbe94bSBarry Smith #define _PLogPLE                        0
411b3bbe94bSBarry Smith #define _PLogPHC                        0
412b3bbe94bSBarry Smith #define _PLogPHD                        0
41399de4ba8SSatish Balay #define PetscGetFlops(a)                (*(a) = 0.0,0)
414d7a720efSLois Curfman McInnes #define PLogEventBegin(e,o1,o2,o3,o4)
415d7a720efSLois Curfman McInnes #define PLogEventEnd(e,o1,o2,o3,o4)
416005c665bSBarry Smith #define PLogEventBarrierBegin(e,o1,o2,o3,o4,cm)
417005c665bSBarry Smith #define PLogEventBarrierEnd(e,o1,o2,o3,o4,cm)
418d7a720efSLois Curfman McInnes #define PLogObjectParent(p,c)
419d7a720efSLois Curfman McInnes #define PLogObjectParents(p,n,c)
420d7a720efSLois Curfman McInnes #define PLogObjectCreate(h)
421d7a720efSLois Curfman McInnes #define PLogObjectDestroy(h)
422d7a720efSLois Curfman McInnes #define PLogObjectMemory(p,m)
423d7a720efSLois Curfman McInnes #define PLogDestroy()
424bf343e40SBarry Smith #define PLogStagePush(a)
425d7a720efSLois Curfman McInnes #define PLogStagePop()
426d7a720efSLois Curfman McInnes #define PLogStageRegister(a,b)
427d7a720efSLois Curfman McInnes #define PLogPrintSummary(comm,file)
428d7a720efSLois Curfman McInnes #define PLogBegin()
429974088aaSSatish Balay #define PLogTraceBegin(file)            0
430bc1211c7SBarry Smith #define PLogSet(lb,le)
431d7a720efSLois Curfman McInnes #define PLogAllBegin()
432e26ad7d8SSatish Balay #define PLogDump(c)
433dc4777aeSSatish Balay #define PLogEventRegister(a,b,c)        0
434d7a720efSLois Curfman McInnes #define PLogMPEBegin()
435d7a720efSLois Curfman McInnes #define PLogMPEDump(a)
436e26ad7d8SSatish Balay extern int PLogObjectState(PetscObject,const char[],...);
437ce6058e1SBarry Smith 
4383a40ed3dSBarry Smith /* If USE_PETSC_LOG is NOT defined, these still need to be! */
439ca161407SBarry Smith #define MPI_Startall_irecv( count,number,requests) MPI_Startall( number, requests)
440ce6058e1SBarry Smith 
441ca161407SBarry Smith #define MPI_Startall_isend( count,number,requests) MPI_Startall( number, requests)
442ce6058e1SBarry Smith 
443ca161407SBarry Smith #define MPI_Start_isend(count,  requests) MPI_Start( requests)
444ca161407SBarry Smith 
4453a40ed3dSBarry Smith #endif   /* USE_PETSC_LOG */
4466daaf66cSBarry Smith 
447e0937024SBarry Smith 
44897bb86f7SLois Curfman McInnes #endif
44941debaddSBarry Smith 
45077c4ece6SBarry Smith 
45177c4ece6SBarry Smith 
45284cb2905SBarry Smith 
45384cb2905SBarry Smith 
45484cb2905SBarry Smith 
455