Actual source code: petsctime.h
  1: /*
  2:        Low cost access to a system time. This, in general, should not be included in user programs.
  3: */
  4: #pragma once
  6: #include <petscsys.h>
  8: /* SUBMANSEC = Sys */
 10: PETSC_EXTERN PetscErrorCode PetscGetCPUTime(PetscLogDouble *);
 12: /* Global counters */
 13: PETSC_EXTERN PetscLogDouble petsc_BaseTime;
 15: /*@
 16:    PetscTime - Returns the current time from some base time in the past in seconds.
 18:    Not Collective
 20:    Output Parameter:
 21: .  v - time counter
 23:    Usage:
 24: .vb
 25:      PetscLogDouble v;
 26:      PetscTime(&v);
 27:      .... perform some calculation ...
 28:      printf("Time for operation %g\n",v);
 29: .ve
 31:    Level: developer
 33:    Note:
 34:    Since the PETSc libraries incorporate timing of phases and operations, we do not recommend ever using `PetscTime()`.
 35:    The options database command  `-log_view` activates PETSc library timing.
 36:    See `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()` for how to register
 37:    stages and events in application codes.
 39: .seealso: `PetscTimeSubtract()`, `PetscTimeAdd()`, `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()`
 40: @*/
 41: static inline PetscErrorCode PetscTime(PetscLogDouble *v)
 42: {
 43:   *v = MPI_Wtime();
 44:   return PETSC_SUCCESS;
 45: }
 47: /*@
 48:    PetscTimeSubtract - Subtracts the current time (in seconds) from the value `v`.
 50:    Not Collective
 52:    Input Parameter:
 53: .  v - time counter
 55:    Output Parameter:
 56: .  v - time counter (`v` = `v` - current time)
 58:    Level: developer
 60:    Note:
 61:    Since the PETSc libraries incorporate timing of phases and operations, we do not always recommend using `PetscTimeSubtract()`.
 62:    The options database command  `-log_view` activates PETSc library timing.
 63:    See `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()` for how to register
 64:    stages and events in application codes.
 66: .seealso: `PetscTime()`, `PetscTimeAdd()`, `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()`
 67: @*/
 68: static inline PetscErrorCode PetscTimeSubtract(PetscLogDouble *v)
 69: {
 70:   *v -= MPI_Wtime();
 71:   return PETSC_SUCCESS;
 72: }
 74: /*@
 75:    PetscTimeAdd - Adds the current time (in seconds) to the value `v`.
 77:    Not Collective
 79:    Input Parameter:
 80: .  v - time counter
 82:    Output Parameter:
 83: .  v - time counter (`v` = `v` + current time)
 85:    Level: developer
 87:    Note:
 88:    Since the PETSc libraries incorporate timing of phases and operations,  we do not ever recommend using `PetscTimeAdd()`.
 89:    The options database command `-log_view` activates PETSc library timing.
 91: .seealso: `PetscTime()`, `PetscTimeSubtract()`, `PetscLogStageRegister()`, `PetscLogEventRegister()`, `PetscLogEventBegin()`, `PetscLogEventEnd()`
 92: @*/
 93: static inline PetscErrorCode PetscTimeAdd(PetscLogDouble *v)
 94: {
 95:   *v += MPI_Wtime();
 96:   return PETSC_SUCCESS;
 97: }