The main documentation of the Stop_Timer Procedure contains additional explanation of this code listing.
subroutine Stop_Timer (Timer)
! Input/Output variable.
type(Timer_type), intent(inout) :: Timer ! Timer to be stopped.
! Internal variables.
type(real) :: CPU_Time_Stop, Wall_Clock_Time_Stop
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements.
VERIFY(Valid_State(Timer),5) ! Timer is valid.
VERIFY(Timer%Running,5) ! Timer is running.
! Set stop times.
CPU_Time_Stop = Get_CPU_Time()
Wall_Clock_Time_Stop = Get_Wall_Clock_Time()
! Update statistics.
call Add_Value (Timer%CPU_Time%Statistics, &
CPU_Time_Stop - Timer%CPU_Time%Start)
call Add_Value (Timer%Wall_Clock_Time%Statistics, &
Wall_Clock_Time_Stop - Timer%Wall_Clock_Time%Start)
! Reset start time.
Timer%CPU_Time%Start = zero
Timer%Wall_Clock_Time%Start = zero
! Set status.
Timer%Running = .false.
! Verify guarantees.
VERIFY(Valid_State(Timer),5) ! Timer is valid.
VERIFY(.not.Timer%Running,5) ! Timer is not running.
return
end subroutine Stop_Timer