xref: /petsc/include/petsctime.h (revision af27ebaa0199971c43fd2e2e162251afd1bcda49)
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 
1539975667SBarry Smith /*MC
1616a05f60SBarry Smith    PetscTime - Returns the current time from some base time in the past in seconds.
17c8281c7dSSatish Balay 
18eca87e8dSBarry Smith    Synopsis:
19aaa7dc30SBarry Smith     #include <petsctime.h>
20fdd15c9aSJunchao Zhang     PetscErrorCode PetscTime(PetscLogDouble *v)
21eca87e8dSBarry Smith 
22eca87e8dSBarry Smith    Not Collective
23eca87e8dSBarry Smith 
24c8281c7dSSatish Balay    Output Parameter:
25c8281c7dSSatish Balay .  v - time counter
26c8281c7dSSatish Balay 
27c8281c7dSSatish Balay    Usage:
2816a05f60SBarry Smith .vb
29c8281c7dSSatish Balay      PetscLogDouble v;
308563dfccSBarry Smith      PetscTime(&v);
31c8281c7dSSatish Balay      .... perform some calculation ...
32c8281c7dSSatish Balay      printf("Time for operation %g\n",v);
3316a05f60SBarry Smith .ve
34c8281c7dSSatish Balay 
3539975667SBarry Smith    Level: developer
3639975667SBarry Smith 
37*af27ebaaSBarry Smith    Note:
38*af27ebaaSBarry Smith    Since the PETSc libraries incorporate timing of phases and operations, we do not recommend ever using `PetscTime()`.
39*af27ebaaSBarry Smith    The options database command  `-log_view` activates PETSc library timing.
40*af27ebaaSBarry Smith    See `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()` for how to register
41*af27ebaaSBarry Smith    stages and events in application codes.
42c8281c7dSSatish Balay 
43db781477SPatrick Sanan .seealso: `PetscTimeSubtract()`, `PetscTimeAdd()`, `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()`
4439975667SBarry Smith M*/
45c8281c7dSSatish Balay 
4639975667SBarry Smith /*MC
4716a05f60SBarry Smith    PetscTimeSubtract - Subtracts the current time (in seconds) from the value `v`.
48c8281c7dSSatish Balay 
49eca87e8dSBarry Smith    Synopsis:
50aaa7dc30SBarry Smith     #include <petsctime.h>
51fdd15c9aSJunchao Zhang     PetscErrorCode PetscTimeSubtract(PetscLogDouble *v)
52eca87e8dSBarry Smith 
53eca87e8dSBarry Smith    Not Collective
54eca87e8dSBarry Smith 
55c8281c7dSSatish Balay    Input Parameter:
56c8281c7dSSatish Balay .  v - time counter
57c8281c7dSSatish Balay 
58c8281c7dSSatish Balay    Output Parameter:
5916a05f60SBarry Smith .  v - time counter (`v` = `v` - current time)
60c8281c7dSSatish Balay 
6139975667SBarry Smith    Level: developer
62c8281c7dSSatish Balay 
63*af27ebaaSBarry Smith    Note:
64*af27ebaaSBarry Smith    Since the PETSc libraries incorporate timing of phases and operations, we do not always recommend using `PetscTimeSubtract()`.
65*af27ebaaSBarry Smith    The options database command  `-log_view` activates PETSc library timing.
66*af27ebaaSBarry Smith    See `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()` for how to register
6739975667SBarry Smith    stages and events in application codes.
68c8281c7dSSatish Balay 
69db781477SPatrick Sanan .seealso: `PetscTime()`, `PetscTimeAdd()`, `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()`
7039975667SBarry Smith M*/
71c8281c7dSSatish Balay 
7239975667SBarry Smith /*MC
7316a05f60SBarry Smith    PetscTimeAdd - Adds the current time (in seconds) to the value `v`.
74c8281c7dSSatish Balay 
75eca87e8dSBarry Smith    Synopsis:
76aaa7dc30SBarry Smith     #include <petsctime.h>
77fdd15c9aSJunchao Zhang     PetscErrorCode PetscTimeAdd(PetscLogDouble *v)
78eca87e8dSBarry Smith 
79eca87e8dSBarry Smith    Not Collective
80eca87e8dSBarry Smith 
81c8281c7dSSatish Balay    Input Parameter:
82c8281c7dSSatish Balay .  v - time counter
83c8281c7dSSatish Balay 
84c8281c7dSSatish Balay    Output Parameter:
8516a05f60SBarry Smith .  v - time counter (`v` = `v` + current time)
86c8281c7dSSatish Balay 
8739975667SBarry Smith    Level: developer
8839975667SBarry Smith 
89*af27ebaaSBarry Smith    Note:
90*af27ebaaSBarry Smith    Since the PETSc libraries incorporate timing of phases and operations,  we do not ever recommend using `PetscTimeAdd()`.
91*af27ebaaSBarry Smith    The options database command `-log_view` activates PETSc library timing.
92c8281c7dSSatish Balay 
93db781477SPatrick Sanan .seealso: `PetscTime()`, `PetscTimeSubtract()`, `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()`
9439975667SBarry Smith M*/
95c8281c7dSSatish Balay 
96d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode PetscTime(PetscLogDouble *v)
97d71ae5a4SJacob Faibussowitsch {
988563dfccSBarry Smith   *v = MPI_Wtime();
993ba16761SJacob Faibussowitsch   return PETSC_SUCCESS;
1008563dfccSBarry Smith }
101c8281c7dSSatish Balay 
102d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode PetscTimeSubtract(PetscLogDouble *v)
103d71ae5a4SJacob Faibussowitsch {
1048563dfccSBarry Smith   *v -= MPI_Wtime();
1053ba16761SJacob Faibussowitsch   return PETSC_SUCCESS;
1068563dfccSBarry Smith }
107c8281c7dSSatish Balay 
108d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode PetscTimeAdd(PetscLogDouble *v)
109d71ae5a4SJacob Faibussowitsch {
1108563dfccSBarry Smith   *v += MPI_Wtime();
1113ba16761SJacob Faibussowitsch   return PETSC_SUCCESS;
1128563dfccSBarry Smith }
113