xref: /petsc/include/petsclog.h (revision b0a32e0c6855ee6a6cd3495fa7da12ea9885bc5d)
1*b0a32e0cSBarry Smith /* $Id: petsclog.h,v 1.149 2000/11/28 17:33:05 bsmith Exp bsmith $ */
297bb86f7SLois Curfman McInnes 
397bb86f7SLois Curfman McInnes /*
47588ac45SBarry Smith     Defines profile/logging in PETSc.
597bb86f7SLois Curfman McInnes */
697bb86f7SLois Curfman McInnes 
7*b0a32e0cSBarry Smith #if !defined(__PetscLog_H)
8*b0a32e0cSBarry Smith #define __PetscLog_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
15*b0a32e0cSBarry Smith   petsc/src/PetscLog/src/PetscLog.c,
16*b0a32e0cSBarry Smith   petsc/src/PetscLog/src/PetscLogmpe.c, and
1726cd32c0SSatish Balay   petsc/include/finclude/petsclog.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
2391e9ee9fSBarry Smith #define MAT_GetOrdering                         4
247c922b88SBarry Smith #define MAT_MultTranspose                       5
251ff317f7SLois Curfman McInnes #define MAT_MultAdd                             6
267c922b88SBarry Smith #define MAT_MultTransposeAdd                    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
427c922b88SBarry Smith #define MAT_SolveTranspose                      23
437c922b88SBarry Smith #define MAT_SolveTransposeAdd                   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
503e584e2eSBarry Smith #define MAT_GetColoring                         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
55ca161407SBarry Smith #define MAT_Partitioning                        36
5697bb86f7SLois Curfman McInnes 
57c05cbf03SBarry Smith #define MAT_FDColoringApply                     38
58c05cbf03SBarry Smith #define MAT_FDColoringCreate                    41
59c05cbf03SBarry Smith 
600462333dSBarry Smith #define VEC_ReduceArithmetic                    37
61c05cbf03SBarry Smith 
62c05cbf03SBarry Smith #define VEC_View                                39
63c05cbf03SBarry Smith 
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_MAXPY                               56
784dcbc457SBarry Smith #define VEC_PMult                               57
794dcbc457SBarry Smith #define VEC_SetValues                           58
804dcbc457SBarry Smith #define VEC_Load                                59
81c05cbf03SBarry Smith #define VEC_ScatterBarrier                      60
824dcbc457SBarry Smith #define VEC_ScatterBegin                        61
834dcbc457SBarry Smith #define VEC_ScatterEnd                          62
84bf5bf444SLois Curfman McInnes #define VEC_SetRandom                           63
8597bb86f7SLois Curfman McInnes 
86005c665bSBarry Smith #define VEC_NormBarrier                         64
87c05cbf03SBarry Smith #define VEC_Norm                                65
88005c665bSBarry Smith #define VEC_DotBarrier                          66
89c05cbf03SBarry Smith #define VEC_Dot                                 67
90005c665bSBarry Smith #define VEC_MDotBarrier                         68
91c05cbf03SBarry Smith #define VEC_MDot                                69
92005c665bSBarry Smith 
934dcbc457SBarry Smith #define SLES_Solve                              70
944dcbc457SBarry Smith #define SLES_SetUp                              71
9597bb86f7SLois Curfman McInnes 
964dcbc457SBarry Smith #define KSP_GMRESOrthogonalization              72
9797bb86f7SLois Curfman McInnes 
98b55e19fdSBarry Smith #define PC_ApplyCoarse                          73
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
115c05cbf03SBarry Smith #define VEC_ReduceComm                          88
1160462333dSBarry Smith 
117682d7d0cSBarry Smith #define TS_Step                                 90
118bf343e40SBarry Smith #define TS_PseudoComputeTimeStep                91
1197c922b88SBarry Smith #define TS_FunctionEval                         92
1207c922b88SBarry Smith #define TS_JacobianEval                         93
12172936c9dSBarry Smith 
12272936c9dSBarry Smith #define Petsc_Barrier                           100
12355206aebSLois Curfman McInnes 
1240513a670SBarry Smith #define EC_SetUp                                105
1250513a670SBarry Smith #define EC_Solve                                106
1260513a670SBarry Smith 
12741debaddSBarry Smith /*
128*b0a32e0cSBarry Smith    Event numbers PetscLog_USER_EVENT_LOW to PetscLog_USER_EVENT_HIGH are reserved
129*b0a32e0cSBarry Smith    for applications.  Make sure that src/PetscLog/src/PetscLog.c defines enough
130*b0a32e0cSBarry Smith    entries in (*name)[] to go up to PetscLog_USER_EVENT_HIGH.
13141debaddSBarry Smith */
132*b0a32e0cSBarry Smith #define PetscLog_USER_EVENT_LOW_STATIC              120
133*b0a32e0cSBarry Smith #define PetscLog_USER_EVENT_HIGH                    200
13497bb86f7SLois Curfman McInnes 
13519b02663SBarry Smith /* Global flop counter */
136*b0a32e0cSBarry Smith extern PetscLogDouble _TotalFlops;
13719b02663SBarry Smith 
138edde42fcSLois Curfman McInnes /* General logging of information; different from event logging */
139*b0a32e0cSBarry Smith EXTERN int        PetscLogInfo(void*,const char[],...);
140*b0a32e0cSBarry Smith EXTERN int        PetscLogInfoDeactivateClass(int);
141*b0a32e0cSBarry Smith EXTERN int        PetscLogInfoActivateClass(int);
142*b0a32e0cSBarry Smith extern PetscTruth PetscLogPrintInfo;  /* if true, indicates PetscLogInfo() is turned on */
143614700edSBarry Smith 
144aa482453SBarry Smith #if defined(PETSC_USE_LOG)  /* --- Logging is turned on --------------------------------*/
145614700edSBarry Smith 
146da63de55SLois Curfman McInnes /*
147da63de55SLois Curfman McInnes    Flop counting:  We count each arithmetic operation (e.g., addition, multiplication) separately.
148da63de55SLois Curfman McInnes 
149da63de55SLois Curfman McInnes    For the complex numbers version, note that
150da63de55SLois Curfman McInnes        1 complex addition = 2 flops
151da63de55SLois Curfman McInnes        1 complex multiplication = 6 flops,
152da63de55SLois Curfman McInnes    where we define 1 flop as that for a double precision scalar.  We roughly approximate
153da63de55SLois Curfman McInnes    flop counting for complex numbers by multiplying the total flops by 4; this corresponds
154da63de55SLois Curfman McInnes    to the assumption that we're counting mostly additions and multiplications -- and
155da63de55SLois Curfman McInnes    roughly the same number of each.  More accurate counting could be done by distinguishing
156da63de55SLois Curfman McInnes    among the various arithmetic operations.
157da63de55SLois Curfman McInnes  */
158da63de55SLois Curfman McInnes 
159aa482453SBarry Smith #if defined(PETSC_USE_COMPLEX)
160*b0a32e0cSBarry Smith #define PetscLogFlops(n) (_TotalFlops += (4*n),0)
161da63de55SLois Curfman McInnes #else
162*b0a32e0cSBarry Smith #define PetscLogFlops(n) (_TotalFlops += (n),0)
163da63de55SLois Curfman McInnes #endif
16477c4ece6SBarry Smith 
165aa482453SBarry Smith #if defined (PETSC_HAVE_MPE)
16677c4ece6SBarry Smith #include "mpe.h"
167614700edSBarry Smith #define MPEBEGIN    1000
168*b0a32e0cSBarry Smith EXTERN int        PetscLogMPEBegin(void);
169*b0a32e0cSBarry Smith EXTERN int        PetscLogMPEDump(const char[]);
17035d8aa7fSBarry Smith extern PetscTruth UseMPE;
171*b0a32e0cSBarry Smith extern int        PetscLogEventMPEFlags[];
172*b0a32e0cSBarry Smith EXTERN int        PetscLogEventMPEActivate(int);
173*b0a32e0cSBarry Smith EXTERN int        PetscLogEventMPEDeactivate(int);
174614700edSBarry Smith #else
175*b0a32e0cSBarry Smith #define PetscLogEventMPEActivate(a) 0
176*b0a32e0cSBarry Smith #define PetscLogEventMPEDeactivate(a) 0
17777c4ece6SBarry Smith #endif
17877c4ece6SBarry Smith 
179*b0a32e0cSBarry Smith EXTERN int PetscLogEventActivate(int);
180*b0a32e0cSBarry Smith EXTERN int PetscLogEventDeactivate(int);
181614700edSBarry Smith 
182*b0a32e0cSBarry Smith EXTERN int PetscLogEventActivateClass(int);
183*b0a32e0cSBarry Smith EXTERN int PetscLogEventDeactivateClass(int);
184614700edSBarry Smith 
185*b0a32e0cSBarry Smith extern PetscTruth PetscLogEventFlags[];
186*b0a32e0cSBarry Smith EXTERN int (*_PetscLogPLB)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
187*b0a32e0cSBarry Smith EXTERN int (*_PetscLogPLE)(int,int,PetscObject,PetscObject,PetscObject,PetscObject);
188*b0a32e0cSBarry Smith EXTERN int (*_PetscLogPHC)(PetscObject);
189*b0a32e0cSBarry Smith EXTERN int (*_PetscLogPHD)(PetscObject);
19077c4ece6SBarry Smith 
191*b0a32e0cSBarry Smith extern int PetscLogEventDepth[];
1920743b949SBarry Smith 
193aa482453SBarry Smith #if defined(PETSC_HAVE_MPE)
194*b0a32e0cSBarry Smith #define PetscLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \
195a560533bSSatish Balay   0; { int __ierr; \
196*b0a32e0cSBarry Smith     if (_PetscLogPLB && PetscLogEventFlags[e]) {                         \
197*b0a32e0cSBarry Smith       __ierr = PetscLogEventBegin((e),o1,o2,o3,o4);CHKERRQ(__ierr);  \
198*b0a32e0cSBarry Smith       if (UseMPE && PetscLogEventMPEFlags[(e)])                      \
199005c665bSBarry Smith         MPE_Log_event(MPEBEGIN+2*(e),0,"");                      \
200a560533bSSatish Balay       __ierr = MPI_Barrier(cm);CHKERRQ(__ierr);                  \
201*b0a32e0cSBarry Smith       __ierr = PetscLogEventEnd((e),o1,o2,o3,o4);CHKERRQ(__ierr);    \
202*b0a32e0cSBarry Smith       if (UseMPE && PetscLogEventMPEFlags[(e)])                      \
203005c665bSBarry Smith         MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");                  \
204005c665bSBarry Smith     }                                                            \
205*b0a32e0cSBarry Smith     __ierr = PetscLogEventBegin(e+1,o1,o2,o3,o4);CHKERRQ(__ierr);    \
206*b0a32e0cSBarry Smith     if (UseMPE && PetscLogEventMPEFlags[(e)+1])                      \
207005c665bSBarry Smith       MPE_Log_event(MPEBEGIN+2*((e)+1),0,"");                    \
208005c665bSBarry Smith   }
209*b0a32e0cSBarry Smith #define PetscLogEventBegin(e,o1,o2,o3,o4)  \
210102ac143SSatish Balay   0; {  \
211*b0a32e0cSBarry Smith    if (_PetscLogPLB && PetscLogEventFlags[(e)] && !PetscLogEventDepth[e]++) {\
212*b0a32e0cSBarry Smith      (*_PetscLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\
213*b0a32e0cSBarry Smith    if (UseMPE && PetscLogEventMPEFlags[(e)])\
214005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*(e),0,"");\
21577c4ece6SBarry Smith   }
21677c4ece6SBarry Smith #else
217*b0a32e0cSBarry Smith #define PetscLogEventBarrierBegin(e,o1,o2,o3,o4,cm) \
218a560533bSSatish Balay   0; { int __ierr;\
219*b0a32e0cSBarry Smith     if (_PetscLogPLB && PetscLogEventFlags[(e)]) {                         \
220*b0a32e0cSBarry Smith       __ierr = PetscLogEventBegin((e),o1,o2,o3,o4);CHKERRQ(__ierr);    \
221a560533bSSatish Balay       __ierr = MPI_Barrier(cm);CHKERRQ(__ierr);                    \
222*b0a32e0cSBarry Smith       __ierr = PetscLogEventEnd((e),o1,o2,o3,o4);CHKERRQ(__ierr);      \
223005c665bSBarry Smith     }                                                              \
224*b0a32e0cSBarry Smith     __ierr = PetscLogEventBegin((e)+1,o1,o2,o3,o4);CHKERRQ(__ierr);    \
225005c665bSBarry Smith   }
226*b0a32e0cSBarry Smith #define PetscLogEventBegin(e,o1,o2,o3,o4)  \
227102ac143SSatish Balay   0; {  \
228*b0a32e0cSBarry Smith    if (_PetscLogPLB && PetscLogEventFlags[(e)] && !PetscLogEventDepth[e]++) {\
229*b0a32e0cSBarry Smith      (*_PetscLogPLB)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\
23077c4ece6SBarry Smith   }
23177c4ece6SBarry Smith #endif
23277c4ece6SBarry Smith 
233aa482453SBarry Smith #if defined(PETSC_HAVE_MPE)
234*b0a32e0cSBarry Smith #define PetscLogEventBarrierEnd(e,o1,o2,o3,o4,cm) PetscLogEventEnd(e+1,o1,o2,o3,o4)
235*b0a32e0cSBarry Smith #define PetscLogEventEnd(e,o1,o2,o3,o4) \
236102ac143SSatish Balay   0; {\
237*b0a32e0cSBarry Smith   if (_PetscLogPLE && PetscLogEventFlags[(e)] && !--PetscLogEventDepth[e]) {\
238*b0a32e0cSBarry Smith     (*_PetscLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\
239*b0a32e0cSBarry Smith   if (UseMPE && PetscLogEventMPEFlags[(e)])\
240005c665bSBarry Smith      MPE_Log_event(MPEBEGIN+2*(e)+1,0,"");\
241a1b5d808SSatish Balay   }
24277c4ece6SBarry Smith #else
243*b0a32e0cSBarry Smith #define PetscLogEventBarrierEnd(e,o1,o2,o3,o4,cm) PetscLogEventEnd(e+1,o1,o2,o3,o4)
244*b0a32e0cSBarry Smith #define PetscLogEventEnd(e,o1,o2,o3,o4) \
245102ac143SSatish Balay   0; {\
246*b0a32e0cSBarry Smith   if (_PetscLogPLE && PetscLogEventFlags[(e)] && !--PetscLogEventDepth[e]) {\
247*b0a32e0cSBarry Smith     (*_PetscLogPLE)((e),0,(PetscObject)(o1),(PetscObject)(o2),(PetscObject)(o3),(PetscObject)(o4));}\
248a1b5d808SSatish Balay   }
24977c4ece6SBarry Smith #endif
25077c4ece6SBarry Smith 
251*b0a32e0cSBarry Smith #define PetscLogObjectParent(p,c)       if (c) {PetscValidHeader((PetscObject)(c)); \
2523a40ed3dSBarry Smith                                      PetscValidHeader((PetscObject)(p));\
253e24b481bSBarry Smith                                      ((PetscObject)(c))->parent = (PetscObject)(p);\
254e24b481bSBarry Smith 				     ((PetscObject)(c))->parentid = ((PetscObject)p)->id;}
255*b0a32e0cSBarry Smith #define PetscLogObjectParents(p,n,d)    {int _i; for (_i=0; _i<n; _i++) \
256*b0a32e0cSBarry Smith                                     PetscLogObjectParent(p,(d)[_i]);}
257*b0a32e0cSBarry Smith #define PetscLogObjectCreate(h)         {if (_PetscLogPHC) (*_PetscLogPHC)((PetscObject)h);}
258*b0a32e0cSBarry Smith #define PetscLogObjectDestroy(h)        {if (_PetscLogPHD) (*_PetscLogPHD)((PetscObject)h);}
259*b0a32e0cSBarry Smith #define PetscLogObjectMemory(p,m)       {PetscValidHeader((PetscObject)p);\
26077c4ece6SBarry Smith                                     ((PetscObject)(p))->mem += (m);}
261*b0a32e0cSBarry Smith EXTERN int  PetscLogObjectState(PetscObject,const char[],...);
262*b0a32e0cSBarry Smith EXTERN int  PetscLogDestroy(void);
263*b0a32e0cSBarry Smith EXTERN int  PetscLogStagePush(int);
264*b0a32e0cSBarry Smith EXTERN int  PetscLogStagePop(void);
265*b0a32e0cSBarry Smith EXTERN int  PetscLogStageRegister(int,const char[]);
266*b0a32e0cSBarry Smith EXTERN int  PetscLogStagePrint(int,PetscTruth);
267*b0a32e0cSBarry Smith EXTERN int  PetscLogPrintSummary(MPI_Comm,const char[]);
268*b0a32e0cSBarry Smith EXTERN int  PetscLogBegin(void);
269*b0a32e0cSBarry Smith EXTERN int  PetscLogTraceBegin(FILE *);
270*b0a32e0cSBarry Smith EXTERN int  PetscLogAllBegin(void);
271*b0a32e0cSBarry Smith EXTERN int  PetscLogSet(int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject),
272bc1211c7SBarry Smith                     int (*)(int,int,PetscObject,PetscObject,PetscObject,PetscObject));
273*b0a32e0cSBarry Smith EXTERN int  PetscLogDump(const char[]);
274*b0a32e0cSBarry Smith EXTERN int  PetscLogEventRegister(int*,const char[],const char[]);
275*b0a32e0cSBarry Smith EXTERN int  PetscGetFlops(PetscLogDouble*);
27677c4ece6SBarry Smith 
277*b0a32e0cSBarry Smith extern PetscLogDouble irecv_ct,isend_ct,wait_ct,wait_any_ct,recv_ct,send_ct;
278*b0a32e0cSBarry Smith extern PetscLogDouble irecv_len,isend_len,recv_len,send_len;
279*b0a32e0cSBarry Smith extern PetscLogDouble wait_all_ct,allreduce_ct,sum_of_waits_ct;
280ca161407SBarry Smith extern int        PETSC_DUMMY,PETSC_DUMMY_SIZE;
281ca161407SBarry Smith 
282ce85283eSBarry Smith /*
28384cb2905SBarry Smith      This does not work for MPI-Uni because our src/mpiuni/mpi.h file
284ce85283eSBarry Smith    uses macros to defined the MPI operations.
28515308354SBarry Smith 
28615308354SBarry Smith      It does not work correctly from HP-UX because it processes the
287bb4af37aSBarry Smith    macros in a way that sometimes it double counts, hence
288aa482453SBarry Smith    PETSC_HAVE_BROKEN_RECURSIVE_MACRO
2897c1e34a4SSatish Balay 
2907c1e34a4SSatish Balay      It does not work with Windows NT because winmpich lacks MPI_Type_size()
291ce85283eSBarry Smith */
29267b8f57cSSatish Balay #if !defined(USING_MPIUNI) && !defined(PETSC_HAVE_BROKEN_RECURSIVE_MACRO) && !defined (PETSC_HAVE_MPI_MISSING_TYPESIZE)
29377a39924SBarry Smith /*
29477a39924SBarry Smith    Logging of MPI activities
29577a39924SBarry Smith */
29677a39924SBarry Smith 
29777a39924SBarry Smith #define TypeSize(buff,count,type)                                                \
298ca161407SBarry Smith (\
299*b0a32e0cSBarry Smith   MPI_Type_size(type,&PETSC_DUMMY_SIZE),buff += ((PetscLogDouble) ((count)*PETSC_DUMMY_SIZE)) \
300ca161407SBarry Smith )
30177a39924SBarry Smith 
30277a39924SBarry Smith #define MPI_Irecv(buf,count, datatype,source,tag,comm,request)        \
303ca161407SBarry Smith (\
304ca161407SBarry Smith   PETSC_DUMMY = MPI_Irecv(buf,count, datatype,source,tag,comm,request),            \
305ca161407SBarry Smith   irecv_ct++,TypeSize(irecv_len,count,datatype),PETSC_DUMMY                            \
306ca161407SBarry Smith )
30715308354SBarry Smith 
30877a39924SBarry Smith #define MPI_Isend(buf,count, datatype,dest,tag,comm,request)          \
309ca161407SBarry Smith (\
310ca161407SBarry Smith   PETSC_DUMMY = MPI_Isend(buf,count, datatype,dest,tag,comm,request),              \
311ca161407SBarry Smith   isend_ct++,  TypeSize(isend_len,count,datatype),PETSC_DUMMY                          \
312ca161407SBarry Smith )
31315308354SBarry Smith 
3140d4b0b6cSBarry Smith #define MPI_Startall_irecv(count,number,requests)                                     \
315ca161407SBarry Smith (\
316ca161407SBarry Smith   PETSC_DUMMY = MPI_Startall(number,requests),                                                    \
317*b0a32e0cSBarry Smith   irecv_ct += (PetscLogDouble)(number),irecv_len += ((PetscLogDouble) ((count)*sizeof(Scalar))),PETSC_DUMMY \
318ca161407SBarry Smith )
3190d4b0b6cSBarry Smith 
3200d4b0b6cSBarry Smith #define MPI_Startall_isend(count,number,requests)                                    \
321ca161407SBarry Smith (\
322ca161407SBarry Smith   PETSC_DUMMY = MPI_Startall(number,requests),                                                   \
323*b0a32e0cSBarry Smith   isend_ct += (PetscLogDouble)(number),isend_len += ((PetscLogDouble) ((count)*sizeof(Scalar))),PETSC_DUMMY \
324ca161407SBarry Smith )
3250d4b0b6cSBarry Smith 
3260d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests)\
327ca161407SBarry Smith (\
328ca161407SBarry Smith   PETSC_DUMMY = MPI_Start(requests),\
329*b0a32e0cSBarry Smith   isend_ct++,isend_len += ((PetscLogDouble) ((count)*sizeof(Scalar))),PETSC_DUMMY\
330ca161407SBarry Smith )
3310d4b0b6cSBarry Smith 
332ce85283eSBarry Smith #define MPI_Recv(buf,count, datatype,source,tag,comm,status)           \
333ca161407SBarry Smith (\
334ca161407SBarry Smith   PETSC_DUMMY = MPI_Recv(buf,count, datatype,source,tag,comm,status),               \
335ca161407SBarry Smith   recv_ct++,TypeSize(recv_len,count,datatype),PETSC_DUMMY                              \
336ca161407SBarry Smith )
33715308354SBarry Smith 
33877a39924SBarry Smith #define MPI_Send(buf,count, datatype,dest,tag,comm)                     \
339ca161407SBarry Smith (\
340ca161407SBarry Smith   PETSC_DUMMY = MPI_Send(buf,count, datatype,dest,tag,comm),                         \
341ca161407SBarry Smith   send_ct++, TypeSize(send_len,count,datatype),PETSC_DUMMY                              \
342ca161407SBarry Smith )
34377a39924SBarry Smith 
34477a39924SBarry Smith #define MPI_Wait(request,status) \
34577a39924SBarry Smith (\
346e0937024SBarry Smith   wait_ct++,sum_of_waits_ct++,  \
34777a39924SBarry Smith   MPI_Wait(request,status)       \
34877a39924SBarry Smith )
34977a39924SBarry Smith 
35077a39924SBarry Smith #define MPI_Waitany(a,b,c,d)     \
35177a39924SBarry Smith (\
352e0937024SBarry Smith   wait_any_ct++,sum_of_waits_ct++,\
35377a39924SBarry Smith   MPI_Waitany(a,b,c,d)           \
35477a39924SBarry Smith )
35577a39924SBarry Smith 
35677a39924SBarry Smith #define MPI_Waitall(count,array_of_requests,array_of_statuses) \
35777a39924SBarry Smith (\
358*b0a32e0cSBarry Smith   wait_all_ct++,sum_of_waits_ct += (PetscLogDouble) (count),       \
35977a39924SBarry Smith   MPI_Waitall(count,array_of_requests,array_of_statuses)       \
36077a39924SBarry Smith )
36177a39924SBarry Smith 
36277a39924SBarry Smith #define MPI_Allreduce(sendbuf, recvbuf,count,datatype,op,comm) \
3630743b949SBarry Smith (\
3640743b949SBarry Smith   allreduce_ct++,MPI_Allreduce(sendbuf,recvbuf,count,datatype,op,comm)\
3650743b949SBarry Smith )
3663914022bSBarry Smith 
3670d4b0b6cSBarry Smith #else
3680d4b0b6cSBarry Smith 
3690d4b0b6cSBarry Smith #define MPI_Startall_irecv(count,number,requests) \
370ca161407SBarry Smith (\
371ca161407SBarry Smith   MPI_Startall(number,requests)                 \
372ca161407SBarry Smith )
3730d4b0b6cSBarry Smith 
3740d4b0b6cSBarry Smith #define MPI_Startall_isend(count,number,requests) \
375ca161407SBarry Smith (\
376ca161407SBarry Smith   MPI_Startall(number,requests)                 \
377ca161407SBarry Smith )
3780d4b0b6cSBarry Smith 
3790d4b0b6cSBarry Smith #define MPI_Start_isend(count, requests) \
380ca161407SBarry Smith (\
381ca161407SBarry Smith   MPI_Start(requests)                   \
382ca161407SBarry Smith )
3830d4b0b6cSBarry Smith 
384aa482453SBarry Smith #endif /* !USING_MPIUNI && ! PETSC_HAVE_BROKEN_RECURSIVE_MACRO */
385614700edSBarry Smith 
386df8cf0b5SBarry Smith #else  /* ---Logging is turned off --------------------------------------------*/
387614700edSBarry Smith 
388*b0a32e0cSBarry Smith #define PetscLogFlops(n) 0
389614700edSBarry Smith 
390df8cf0b5SBarry Smith /*
391df8cf0b5SBarry Smith      With logging turned off, then MPE has to be turned off
392df8cf0b5SBarry Smith */
393614700edSBarry Smith #define MPEBEGIN                  1000
394*b0a32e0cSBarry Smith #define PetscLogMPEBegin()            0
395*b0a32e0cSBarry Smith #define PetscLogMPEDump(a)            0
396*b0a32e0cSBarry Smith #define PetscLogEventMPEActivate(a)   0
397*b0a32e0cSBarry Smith #define PetscLogEventMPEDeactivate(a) 0
398614700edSBarry Smith 
399*b0a32e0cSBarry Smith #define PetscLogEventActivate(a)   0
400*b0a32e0cSBarry Smith #define PetscLogEventDeactivate(a) 0
401614700edSBarry Smith 
402*b0a32e0cSBarry Smith #define PetscLogEventActivateClass(a)   0
403*b0a32e0cSBarry Smith #define PetscLogEventDeactivateClass(a) 0
40477c4ece6SBarry Smith 
405*b0a32e0cSBarry Smith #define _PetscLogPLB                        0
406*b0a32e0cSBarry Smith #define _PetscLogPLE                        0
407*b0a32e0cSBarry Smith #define _PetscLogPHC                        0
408*b0a32e0cSBarry Smith #define _PetscLogPHD                        0
40999de4ba8SSatish Balay #define PetscGetFlops(a)                (*(a) = 0.0,0)
410*b0a32e0cSBarry Smith #define PetscLogEventBegin(e,o1,o2,o3,o4)   0
411*b0a32e0cSBarry Smith #define PetscLogEventEnd(e,o1,o2,o3,o4)     0
412*b0a32e0cSBarry Smith #define PetscLogEventBarrierBegin(e,o1,o2,o3,o4,cm) 0
413*b0a32e0cSBarry Smith #define PetscLogEventBarrierEnd(e,o1,o2,o3,o4,cm)   0
414*b0a32e0cSBarry Smith #define PetscLogObjectParent(p,c)
415*b0a32e0cSBarry Smith #define PetscLogObjectParents(p,n,c)
416*b0a32e0cSBarry Smith #define PetscLogObjectCreate(h)
417*b0a32e0cSBarry Smith #define PetscLogObjectDestroy(h)
418*b0a32e0cSBarry Smith #define PetscLogObjectMemory(p,m)
419*b0a32e0cSBarry Smith #define PetscLogDestroy()                   0
420*b0a32e0cSBarry Smith #define PetscLogStagePush(a)                0
421*b0a32e0cSBarry Smith #define PetscLogStagePop()                  0
422*b0a32e0cSBarry Smith #define PetscLogStageRegister(a,b)          0
423*b0a32e0cSBarry Smith #define PetscLogStagePrint(a,flg)           0
424*b0a32e0cSBarry Smith #define PetscLogPrintSummary(comm,file)     0
425*b0a32e0cSBarry Smith #define PetscLogBegin()                     0
426*b0a32e0cSBarry Smith #define PetscLogTraceBegin(file)            0
427*b0a32e0cSBarry Smith #define PetscLogSet(lb,le)                  0
428*b0a32e0cSBarry Smith #define PetscLogAllBegin()                  0
429*b0a32e0cSBarry Smith #define PetscLogDump(c)                     0
430*b0a32e0cSBarry Smith #define PetscLogEventRegister(a,b,c)        0
431*b0a32e0cSBarry Smith EXTERN int PetscLogObjectState(PetscObject,const char[],...);
432ce6058e1SBarry Smith 
433aa482453SBarry Smith /* If PETSC_USE_LOG is NOT defined, these still need to be! */
434ca161407SBarry Smith #define MPI_Startall_irecv(count,number,requests) MPI_Startall(number,requests)
435ce6058e1SBarry Smith 
436ca161407SBarry Smith #define MPI_Startall_isend(count,number,requests) MPI_Startall(number,requests)
437ce6058e1SBarry Smith 
438ca161407SBarry Smith #define MPI_Start_isend(count,requests) MPI_Start(requests)
439ca161407SBarry Smith 
440aa482453SBarry Smith #endif   /* PETSC_USE_LOG */
4416daaf66cSBarry Smith 
4421d1367b7SBarry Smith extern PetscTruth PetscPreLoadingUsed;
4431d1367b7SBarry Smith 
444e7592fafSBarry Smith #define PreLoadBegin(flag,name) {PetscTruth PreLoading = flag; int PreLoadMax,PreLoadIt,__ierr;\
445*b0a32e0cSBarry Smith                                  __ierr = PetscOptionsGetLogical(PETSC_NULL,"-preload",&PreLoading,PETSC_NULL);CHKERRQ(__ierr);\
4461d1367b7SBarry Smith                                  PreLoadMax = (int)(PreLoading);PetscPreLoadingUsed = PreLoading ? PETSC_TRUE : PetscPreLoadingUsed;\
447e7592fafSBarry Smith                                  for (PreLoadIt=0; PreLoadIt<=PreLoadMax; PreLoadIt++) {\
448e7592fafSBarry Smith                                    __ierr = PetscBarrier(PETSC_NULL);CHKERRQ(__ierr);\
449*b0a32e0cSBarry Smith                                    __ierr = PetscLogStagePush(PETSC_DETERMINE);CHKERRQ(__ierr);\
450*b0a32e0cSBarry Smith                                    __ierr = PetscLogStageRegister(PETSC_DETERMINE,name);CHKERRQ(__ierr);\
451*b0a32e0cSBarry Smith                                    __ierr = PetscLogStagePrint(PETSC_DETERMINE,(PetscTruth)(!PreLoadMax || PreLoadIt));
452*b0a32e0cSBarry Smith #define PreLoadEnd()               __ierr = PetscLogStagePop();CHKERRQ(__ierr);PreLoading = PETSC_FALSE;}}
453*b0a32e0cSBarry Smith #define PreLoadStage(name)         __ierr = PetscLogStagePop();CHKERRQ(__ierr);\
454*b0a32e0cSBarry Smith                                    __ierr = PetscLogStagePush(PETSC_DETERMINE);CHKERRQ(__ierr);\
455*b0a32e0cSBarry Smith                                    __ierr = PetscLogStageRegister(PETSC_DETERMINE,name);CHKERRQ(__ierr);\
456*b0a32e0cSBarry Smith                                    __ierr = PetscLogStagePrint(PETSC_DETERMINE,(PetscTruth)(!PreLoadMax || PreLoadIt));
45797bb86f7SLois Curfman McInnes #endif
45841debaddSBarry Smith 
45977c4ece6SBarry Smith 
46077c4ece6SBarry Smith 
46184cb2905SBarry Smith 
46284cb2905SBarry Smith 
46384cb2905SBarry Smith 
464