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 @*/ 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 @*/ 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 @*/ 93d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode PetscTimeAdd(PetscLogDouble *v) 94d71ae5a4SJacob Faibussowitsch { 958563dfccSBarry Smith *v += MPI_Wtime(); 963ba16761SJacob Faibussowitsch return PETSC_SUCCESS; 978563dfccSBarry Smith } 98