The main documentation of the Get Value Timer Functions contains additional explanation of this code listing.
define([ACCESS_ROUTINE],[ pushdef([VALUE], [$1]) ifelse( VALUE, [Count], [pushdef([TYPE], [integer])], VALUE, [Totally_Positive], [pushdef([TYPE], [logical])], [pushdef([TYPE], [real])]) pushdef([Get_VALUE_Timer], expand(Get_VALUE_Timer)) pushdef([Timer_VALUE], expand(Timer_VALUE)) function Get_VALUE_Timer (Timer, Clock, Global, Split) result(Timer_VALUE) ! Input variables. type(character,*), optional, intent(in) :: Clock ! Clock toggle. type(logical), optional, intent(in) :: Global ! Global/Local toggle. type(logical), optional, intent(in) :: Split ! Split/Overall toggle. ! Input/Output variables. type(Timer_type), intent(inout) :: Timer ! Timer object. ! Output variables. type(TYPE) :: Timer_VALUE ! Timer value to be output. ! Internal variables. type(character,10) :: A_Clock ! Actual clock value. type(logical) :: A_Global ! Actual global flag. type(logical) :: A_Split ! Actual split flag. type(Statistics_type) :: PE_Stats ! Overall PE Statistics. type(real) :: Total_Time_PE ! Total time on this PE. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Verify requirements. VERIFY(Valid_State(Timer),5) ! Timer is valid. if (PRESENT(Clock)) then VERIFY(Clock == 'CPU' .or. Clock == 'Wall_Clock',5) ! Clock is valid. end if ! Set clock value. if (PRESENT(Clock)) then A_Clock = Clock else A_Clock = 'CPU' end if ! Set global flag. if (PRESENT(Global)) then A_Global = Global else A_Global = .false. end if ! Set split flag. if (PRESENT(Split)) then A_Split = Split else A_Split = .false. end if ! Set overall PE values if not reporting split values. if (.not.A_Split) then call Initialize (PE_Stats, "PE Statistics") if (A_Clock == 'CPU') then Total_Time_PE = Total(Timer%CPU_Time%Statistics) else if (A_Clock == 'Wall_Clock') then Total_Time_PE = Total(Timer%Wall_Clock_Time%Statistics) end if call Add_Value (PE_Stats, Total_Time_PE) end if ! Get VALUE from the statistics object. if (A_Split) then if (A_Clock == 'CPU') then Timer_VALUE = VALUE[](Timer%CPU_Time%Statistics, A_Global) else if (A_Clock == 'Wall_Clock') then Timer_VALUE = VALUE[](Timer%Wall_Clock_Time%Statistics, A_Global) end if else Timer_VALUE = VALUE[](PE_Stats, A_Global) end if ! Finalize PE Stats. if (.not.A_Split) then call Finalize (PE_Stats) end if ! Verify guarantees - none. return end function Get_VALUE_Timer popdef([VALUE]) popdef([Get_VALUE_Timer]) popdef([Timer_VALUE]) ]) fortext([Value],[Arithmetic_Mean Count Geometric_Mean Harmonic_Mean Maximum Minimum Standard_Deviation Sum Totally_Positive],[ ACCESS_ROUTINE(Value) ]) function Get_Name_Timer (Timer) result(Name) ! Input/Output variables. type(Timer_type), intent(in) :: Timer ! Timer object. ! Output variables. type(character,80) :: Name ! Timer value to be output. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Verify requirements. VERIFY(Valid_State(Timer),5) ! Timer is valid. ! Set value. Name = Timer%Name ! Verify guarantees - none. return end function Get_Name_Timer