xref: /petsc/include/petsctime.h (revision bea725cfc01ca38187a8635c0fee3f11fe7ff5a8)
1c8281c7dSSatish Balay /*
2c8281c7dSSatish Balay        Low cost access to system time. This, in general, should not
3c8281c7dSSatish Balay      be included in user programs.
4c8281c7dSSatish Balay */
5c8281c7dSSatish Balay 
6c8281c7dSSatish Balay #if !defined(__PTIME_H)
7c8281c7dSSatish Balay #define __PTIME_H
8c8281c7dSSatish Balay 
92c8e378dSBarry Smith #include <petscsys.h>
10c8281c7dSSatish Balay #if defined(PETSC_HAVE_SYS_TIME_H)
11c8281c7dSSatish Balay #include <sys/types.h>
12c8281c7dSSatish Balay #include <sys/time.h>
13c8281c7dSSatish Balay #endif
14c8281c7dSSatish Balay #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO)
15c8281c7dSSatish Balay EXTERN_C_BEGIN
1609573ac7SBarry Smith extern int gettimeofday(struct timeval *,struct timezone *);
17c8281c7dSSatish Balay EXTERN_C_END
18c8281c7dSSatish Balay #endif
19c8281c7dSSatish Balay 
2030a8c558SMatthew Knepley /* Global counters */
21014dd563SJed Brown PETSC_EXTERN PetscLogDouble petsc_BaseTime;
2230a8c558SMatthew Knepley 
23c8281c7dSSatish Balay /*
24c8281c7dSSatish Balay    PetscTime - Returns the current time of day in seconds.
25c8281c7dSSatish Balay 
26eca87e8dSBarry Smith    Synopsis:
27f2ba6396SBarry Smith     #include "petsctime.h"
28eca87e8dSBarry Smith    PetscTime(PetscLogDouble v)
29eca87e8dSBarry Smith 
30eca87e8dSBarry Smith    Not Collective
31eca87e8dSBarry Smith 
32c8281c7dSSatish Balay    Output Parameter:
33c8281c7dSSatish Balay .  v - time counter
34c8281c7dSSatish Balay 
35c8281c7dSSatish Balay 
36c8281c7dSSatish Balay    Usage:
37c8281c7dSSatish Balay      PetscLogDouble v;
38c8281c7dSSatish Balay      PetscTime(v);
39c8281c7dSSatish Balay      .... perform some calculation ...
40c8281c7dSSatish Balay      printf("Time for operation %g\n",v);
41c8281c7dSSatish Balay 
42c8281c7dSSatish Balay    Notes:
43c8281c7dSSatish Balay    Since the PETSc libraries incorporate timing of phases and operations,
44c8281c7dSSatish Balay    PetscTime() is intended only for timing of application codes.
45c8281c7dSSatish Balay    The options database commands -log, -log_summary, and -log_all activate
460598bfebSBarry Smith    PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details.
47c8281c7dSSatish Balay 
48c8281c7dSSatish Balay .seealso:  PetscTimeSubtract(), PetscTimeAdd()
49c8281c7dSSatish Balay 
50c8281c7dSSatish Balay .keywords:  Petsc, time
51c8281c7dSSatish Balay */
52c8281c7dSSatish Balay 
53c8281c7dSSatish Balay /*
54c8281c7dSSatish Balay    PetscTimeSubtract - Subtracts the current time of day (in seconds) from
55c8281c7dSSatish Balay    the value v.
56c8281c7dSSatish Balay 
57eca87e8dSBarry Smith    Synopsis:
58f2ba6396SBarry Smith     #include "petsctime.h"
59eca87e8dSBarry Smith    PetscTimeSubtract(PetscLogDouble v)
60eca87e8dSBarry Smith 
61eca87e8dSBarry Smith    Not Collective
62eca87e8dSBarry Smith 
63c8281c7dSSatish Balay    Input Parameter:
64c8281c7dSSatish Balay .  v - time counter
65c8281c7dSSatish Balay 
66c8281c7dSSatish Balay    Output Parameter:
67c8281c7dSSatish Balay .  v - time counter (v = v - current time)
68c8281c7dSSatish Balay 
69c8281c7dSSatish Balay 
70c8281c7dSSatish Balay    Notes:
71c8281c7dSSatish Balay    Since the PETSc libraries incorporate timing of phases and operations,
72c8281c7dSSatish Balay    PetscTimeSubtract() is intended only for timing of application codes.
73c8281c7dSSatish Balay    The options database commands -log, -log_summary, and -log_all activate
740598bfebSBarry Smith    PETSc library timing.  See the <A href="../../docs/manual.pdf">Users Manual</A> for more details.
75c8281c7dSSatish Balay 
76c8281c7dSSatish Balay .seealso:  PetscTime(), PetscTimeAdd()
77c8281c7dSSatish Balay 
78c8281c7dSSatish Balay .keywords:  Petsc, time, subtract
79c8281c7dSSatish Balay */
80c8281c7dSSatish Balay 
81c8281c7dSSatish Balay /*
82c8281c7dSSatish Balay    PetscTimeAdd - Adds the current time of day (in seconds) to the value v.
83c8281c7dSSatish Balay 
84eca87e8dSBarry Smith    Synopsis:
85f2ba6396SBarry Smith     #include "petsctime.h"
86eca87e8dSBarry Smith    PetscTimeAdd(PetscLogDouble v)
87eca87e8dSBarry Smith 
88eca87e8dSBarry Smith    Not Collective
89eca87e8dSBarry Smith 
90c8281c7dSSatish Balay    Input Parameter:
91c8281c7dSSatish Balay .  v - time counter
92c8281c7dSSatish Balay 
93c8281c7dSSatish Balay    Output Parameter:
94c8281c7dSSatish Balay .  v - time counter (v = v + current time)
95c8281c7dSSatish Balay 
96c8281c7dSSatish Balay    Notes:
97c8281c7dSSatish Balay    Since the PETSc libraries incorporate timing of phases and operations,
98c8281c7dSSatish Balay    PetscTimeAdd() is intended only for timing of application codes.
99af4f1f30SBarry Smith    The options database command -log_summary activate
1000598bfebSBarry Smith    PETSc library timing. See the <A href="../../docs/manual.pdf">Users Manual</A> for more details.
101c8281c7dSSatish Balay 
102c8281c7dSSatish Balay .seealso:  PetscTime(), PetscTimeSubtract()
103c8281c7dSSatish Balay 
104c8281c7dSSatish Balay .keywords:  Petsc, time, add
105c8281c7dSSatish Balay */
106c8281c7dSSatish Balay 
107c8281c7dSSatish Balay /* ------------------------------------------------------------------
108c8281c7dSSatish Balay     Some machines have very fast MPI_Wtime()
109c8281c7dSSatish Balay */
110c8217ed5SSatish Balay #if (defined(PETSC_HAVE_FAST_MPI_WTIME) && !defined(__MPIUNI_H))
111c8281c7dSSatish Balay #define PetscTime(v)         (v)=MPI_Wtime();
112c8281c7dSSatish Balay 
113c8281c7dSSatish Balay #define PetscTimeSubtract(v) (v)-=MPI_Wtime();
114c8281c7dSSatish Balay 
115c8281c7dSSatish Balay #define PetscTimeAdd(v)      (v)+=MPI_Wtime();
116c8281c7dSSatish Balay 
117c8281c7dSSatish Balay /* ------------------------------------------------------------------
118*bea725cfSBarry Smith    IBM Power and PowerPC machines have a fast clock read_real_time()
119c8281c7dSSatish Balay */
120c8281c7dSSatish Balay #elif defined(PETSC_USE_READ_REAL_TIME)
121*bea725cfSBarry Smith PETSC_EXTERN PetscLogDouble PetscReadRealTime(void);
122*bea725cfSBarry Smith #define PetscTime(v)         (v)=PetscReadRealTime();
123c8281c7dSSatish Balay 
124*bea725cfSBarry Smith #define PetscTimeSubtract(v) (v)-=PetscReadRealTime();
125c8281c7dSSatish Balay 
126*bea725cfSBarry Smith #define PetscTimeAdd(v)      (v)+=PetscReadRealTime();
127c8281c7dSSatish Balay 
128c8281c7dSSatish Balay /* ------------------------------------------------------------------
129*bea725cfSBarry Smith    Microsoft Windows has its own time routines
130c8281c7dSSatish Balay */
131*bea725cfSBarry Smith #elif defined (PETSC_USE_MICROSOFT_TIME)
132c8281c7dSSatish Balay #include <time.h>
1330f1eeb8eSSatish Balay EXTERN_C_BEGIN
134*bea725cfSBarry Smith PETSC_EXTERN PetscLogDouble PetscMicrosoftTime(void);
1350f1eeb8eSSatish Balay EXTERN_C_END
136*bea725cfSBarry Smith #define PetscTime(v)         (v)=PetscMicrosoftTime();
137c8281c7dSSatish Balay 
138*bea725cfSBarry Smith #define PetscTimeSubtract(v) (v)-=PetscMicrosoftTime();
139c8281c7dSSatish Balay 
140*bea725cfSBarry Smith #define PetscTimeAdd(v)      (v)+=PetscMicrosoftTime();
141c8281c7dSSatish Balay 
142c8281c7dSSatish Balay /* ------------------------------------------------------------------
143c8281c7dSSatish Balay     The usual Unix time routines.
144c8281c7dSSatish Balay */
145c8281c7dSSatish Balay #else
1462798158cSJed Brown #define PetscTime(v)         do {                                       \
1472798158cSJed Brown     static struct timeval _tp;                                          \
148c8281c7dSSatish Balay     gettimeofday(&_tp,(struct timezone *)0);                            \
1492798158cSJed Brown     (v)=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);            \
1502798158cSJed Brown   } while (0)
151c8281c7dSSatish Balay 
1522798158cSJed Brown #define PetscTimeSubtract(v) do {                                       \
1532798158cSJed Brown     static struct timeval _tp;                                          \
154c8281c7dSSatish Balay     gettimeofday(&_tp,(struct timezone *)0);                            \
1552798158cSJed Brown     (v)-=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);           \
1562798158cSJed Brown   } while (0)
157c8281c7dSSatish Balay 
1582798158cSJed Brown #define PetscTimeAdd(v) do {                                            \
1592798158cSJed Brown     static struct timeval _tp;                                          \
160c8281c7dSSatish Balay     gettimeofday(&_tp,(struct timezone *)0);                            \
1612798158cSJed Brown     (v)+=((PetscLogDouble)_tp.tv_sec)+(1.0e-6)*(_tp.tv_usec);           \
1622798158cSJed Brown   } while (0)
163c8281c7dSSatish Balay #endif
164c8281c7dSSatish Balay 
165c8281c7dSSatish Balay #endif
166c8281c7dSSatish Balay 
167c8281c7dSSatish Balay 
168c8281c7dSSatish Balay 
169c8281c7dSSatish Balay 
170c8281c7dSSatish Balay 
171