xref: /petsc/include/petsctime.h (revision a623e290c7eaa252b385564179837fe27521fbac)
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