1c8281c7dSSatish Balay /*
216a05f60SBarry Smith Low cost access to a system time. This, in general, should not be included in user programs.
3c8281c7dSSatish Balay */
4a4963045SJacob Faibussowitsch #pragma once
5ac09b921SBarry Smith
62c8e378dSBarry Smith #include <petscsys.h>
78563dfccSBarry Smith
8ac09b921SBarry Smith /* SUBMANSEC = Sys */
9ac09b921SBarry Smith
108563dfccSBarry Smith PETSC_EXTERN PetscErrorCode PetscGetCPUTime(PetscLogDouble *);
11c8281c7dSSatish Balay
1230a8c558SMatthew Knepley /* Global counters */
13014dd563SJed Brown PETSC_EXTERN PetscLogDouble petsc_BaseTime;
1430a8c558SMatthew Knepley
15*5d83a8b1SBarry Smith /*@
1616a05f60SBarry Smith PetscTime - Returns the current time from some base time in the past in seconds.
17c8281c7dSSatish Balay
18eca87e8dSBarry Smith Not Collective
19eca87e8dSBarry Smith
20c8281c7dSSatish Balay Output Parameter:
21c8281c7dSSatish Balay . v - time counter
22c8281c7dSSatish Balay
23c8281c7dSSatish Balay Usage:
2416a05f60SBarry Smith .vb
25c8281c7dSSatish Balay PetscLogDouble v;
268563dfccSBarry Smith PetscTime(&v);
27c8281c7dSSatish Balay .... perform some calculation ...
28c8281c7dSSatish Balay printf("Time for operation %g\n",v);
2916a05f60SBarry Smith .ve
30c8281c7dSSatish Balay
3139975667SBarry Smith Level: developer
3239975667SBarry Smith
33af27ebaaSBarry Smith Note:
34af27ebaaSBarry Smith Since the PETSc libraries incorporate timing of phases and operations, we do not recommend ever using `PetscTime()`.
35af27ebaaSBarry Smith The options database command `-log_view` activates PETSc library timing.
36af27ebaaSBarry Smith See `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()` for how to register
37af27ebaaSBarry Smith stages and events in application codes.
38c8281c7dSSatish Balay
39db781477SPatrick Sanan .seealso: `PetscTimeSubtract()`, `PetscTimeAdd()`, `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()`
40*5d83a8b1SBarry Smith @*/
PetscTime(PetscLogDouble * v)41*5d83a8b1SBarry Smith static inline PetscErrorCode PetscTime(PetscLogDouble *v)
42*5d83a8b1SBarry Smith {
43*5d83a8b1SBarry Smith *v = MPI_Wtime();
44*5d83a8b1SBarry Smith return PETSC_SUCCESS;
45*5d83a8b1SBarry Smith }
46c8281c7dSSatish Balay
47*5d83a8b1SBarry Smith /*@
4816a05f60SBarry Smith PetscTimeSubtract - Subtracts the current time (in seconds) from the value `v`.
49c8281c7dSSatish Balay
50eca87e8dSBarry Smith Not Collective
51eca87e8dSBarry Smith
52c8281c7dSSatish Balay Input Parameter:
53c8281c7dSSatish Balay . v - time counter
54c8281c7dSSatish Balay
55c8281c7dSSatish Balay Output Parameter:
5616a05f60SBarry Smith . v - time counter (`v` = `v` - current time)
57c8281c7dSSatish Balay
5839975667SBarry Smith Level: developer
59c8281c7dSSatish Balay
60af27ebaaSBarry Smith Note:
61af27ebaaSBarry Smith Since the PETSc libraries incorporate timing of phases and operations, we do not always recommend using `PetscTimeSubtract()`.
62af27ebaaSBarry Smith The options database command `-log_view` activates PETSc library timing.
63af27ebaaSBarry Smith See `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()` for how to register
6439975667SBarry Smith stages and events in application codes.
65c8281c7dSSatish Balay
66db781477SPatrick Sanan .seealso: `PetscTime()`, `PetscTimeAdd()`, `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()`
67*5d83a8b1SBarry Smith @*/
PetscTimeSubtract(PetscLogDouble * v)68*5d83a8b1SBarry Smith static inline PetscErrorCode PetscTimeSubtract(PetscLogDouble *v)
69*5d83a8b1SBarry Smith {
70*5d83a8b1SBarry Smith *v -= MPI_Wtime();
71*5d83a8b1SBarry Smith return PETSC_SUCCESS;
72*5d83a8b1SBarry Smith }
73c8281c7dSSatish Balay
74*5d83a8b1SBarry Smith /*@
7516a05f60SBarry Smith PetscTimeAdd - Adds the current time (in seconds) to the value `v`.
76c8281c7dSSatish Balay
77eca87e8dSBarry Smith Not Collective
78eca87e8dSBarry Smith
79c8281c7dSSatish Balay Input Parameter:
80c8281c7dSSatish Balay . v - time counter
81c8281c7dSSatish Balay
82c8281c7dSSatish Balay Output Parameter:
8316a05f60SBarry Smith . v - time counter (`v` = `v` + current time)
84c8281c7dSSatish Balay
8539975667SBarry Smith Level: developer
8639975667SBarry Smith
87af27ebaaSBarry Smith Note:
88af27ebaaSBarry Smith Since the PETSc libraries incorporate timing of phases and operations, we do not ever recommend using `PetscTimeAdd()`.
89af27ebaaSBarry Smith The options database command `-log_view` activates PETSc library timing.
90c8281c7dSSatish Balay
91db781477SPatrick Sanan .seealso: `PetscTime()`, `PetscTimeSubtract()`, `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()`
92*5d83a8b1SBarry Smith @*/
PetscTimeAdd(PetscLogDouble * v)93d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode PetscTimeAdd(PetscLogDouble *v)
94d71ae5a4SJacob Faibussowitsch {
958563dfccSBarry Smith *v += MPI_Wtime();
963ba16761SJacob Faibussowitsch return PETSC_SUCCESS;
978563dfccSBarry Smith }
98