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