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: }