The main documentation of the Valid_State_Timer Procedure contains additional explanation of this code listing.
function Valid_State_Timer (Timer) result(Valid) ! Input variables. ! Variable to be checked. type(Timer_type), intent(in) :: Timer ! Output variables. type(logical) :: Valid ! Logical state. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Start out true. Valid = .true. ! Check for association of pointered internals. Valid = Valid .and. ASSOCIATED(Timer%Initialized) if (.not.Valid) return ! Check for validity of internals. Valid = Valid .and. Valid_State(Timer%CPU_Time%Start) Valid = Valid .and. Valid_State(Timer%CPU_Time%Statistics) Valid = Valid .and. Valid_State(Timer%Wall_Clock_Time%Start) Valid = Valid .and. Valid_State(Timer%Wall_Clock_Time%Statistics) Valid = Valid .and. Valid_State(Timer%Running) Valid = Valid .and. Valid_State(Timer%Name) if (.not.Valid) return ! Consistency checks. Valid = Valid .and. Timer%CPU_Time%Start >= zero ! These are giving errors -- I don't know why -- so they are commented ! out for now. ! Valid = Valid .and. (Minimum(Timer%CPU_Time%Statistics) >= zero) Valid = Valid .and. Timer%Wall_Clock_Time%Start >= zero ! Valid = Valid .and. (Minimum(Timer%Wall_Clock_Time%Statistics) >= zero) return end function Valid_State_Timer