The main documentation of the Initialize_Statistics Procedure contains additional explanation of this code listing.
subroutine Initialize_Statistics (Statistics, Name, status) ! Use association information. use Caesar_Flags_Module, only: initialized_flag use Caesar_Numbers_Module, only: zero ! Input variables. type(character,*), intent(in) :: Name ! Statistics name. ! Output variables. type(Statistics_type), intent(out) :: Statistics ! Statistics object. type(Status_type), intent(out), optional :: status ! Exit status. ! Internal variables. type(Status_type), dimension(25) :: allocate_status ! Allocation Status. type(Status_type) :: consolidated_status ! Consolidated Status. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Verify requirements. VERIFY(.not.Valid_State(Statistics),5) ! Statistics is not valid. VERIFY(Valid_State(Name),5) ! Name is valid. ! Allocations and initializations. call Initialize (allocate_status) call Initialize (consolidated_status) call Initialize (Statistics%PE_Count, allocate_status(1)) call Initialize (Statistics%PE_Arithmetic_Mean, allocate_status(2)) call Initialize (Statistics%PE_Sum, allocate_status(3)) call Initialize (Statistics%PE_Geometric_Mean, allocate_status(4)) call Initialize (Statistics%PE_Log_Sum, allocate_status(5)) call Initialize (Statistics%PE_Harmonic_Mean, allocate_status(6)) call Initialize (Statistics%PE_Reciprocal_Sum, allocate_status(7)) call Initialize (Statistics%PE_Standard_Deviation, allocate_status(8)) call Initialize (Statistics%PE_Squared_Sum, allocate_status(9)) call Initialize (Statistics%PE_Maximum, allocate_status(10)) call Initialize (Statistics%PE_Minimum, allocate_status(11)) call Initialize (Statistics%PE_Totally_Positive, allocate_status(12)) call Initialize (Statistics%Global_Count, allocate_status(13)) call Initialize (Statistics%Global_Arithmetic_Mean, allocate_status(14)) call Initialize (Statistics%Global_Sum, allocate_status(15)) call Initialize (Statistics%Global_Geometric_Mean, allocate_status(16)) call Initialize (Statistics%Global_Log_Sum, allocate_status(17)) call Initialize (Statistics%Global_Harmonic_Mean, allocate_status(18)) call Initialize (Statistics%Global_Reciprocal_Sum, allocate_status(19)) call Initialize (Statistics%Global_Standard_Deviation, allocate_status(20)) call Initialize (Statistics%Global_Squared_Sum, allocate_status(21)) call Initialize (Statistics%Global_Maximum, allocate_status(22)) call Initialize (Statistics%Global_Minimum, allocate_status(23)) call Initialize (Statistics%Global_Updated, allocate_status(24)) call Initialize (Statistics%Global_Totally_Positive, allocate_status(25)) ! Set up internals. Statistics%Name = Name ! Make sure that initial values are correct. Statistics%PE_Count= 0 Statistics%PE_Arithmetic_Mean = zero Statistics%PE_Sum = zero Statistics%PE_Geometric_Mean = zero Statistics%PE_Log_Sum = zero Statistics%PE_Harmonic_Mean = zero Statistics%PE_Reciprocal_Sum = zero Statistics%PE_Standard_Deviation = zero Statistics%PE_Squared_Sum = zero Statistics%PE_Maximum = zero Statistics%PE_Minimum = zero Statistics%PE_Totally_Positive = .true. Statistics%Global_Count= 0 Statistics%Global_Arithmetic_Mean = zero Statistics%Global_Sum = zero Statistics%Global_Geometric_Mean = zero Statistics%Global_Log_Sum = zero Statistics%Global_Harmonic_Mean = zero Statistics%Global_Reciprocal_Sum = zero Statistics%Global_Standard_Deviation = zero Statistics%Global_Squared_Sum = zero Statistics%Global_Maximum = zero Statistics%Global_Minimum = zero Statistics%Global_Updated = .false. Statistics%Global_Totally_Positive = .true. ! Process status variables. consolidated_status = allocate_status if (PRESENT(status)) then WARN_IF(Error(consolidated_status), 5) status = consolidated_status else VERIFY(Normal(consolidated_status), 5) end if call Finalize (consolidated_status) call Finalize (allocate_status) ! Set initialization flag. Statistics%Initialized = initialized_flag ! Verify guarantees. VERIFY(Valid_State(Statistics),5) ! Statistics is now valid. return end subroutine Initialize_Statistics