The main documentation of the Finalize_Statistics Procedure contains additional explanation of this code listing.
subroutine Finalize_Statistics (Statistics, status)
! Use associations.
use Caesar_Flags_Module, only: uninitialized_flag
! Input/Output variable.
! Statistics to be finalized.
type(Statistics_type), intent(inout) :: Statistics
! Output variables.
type(Status_type), intent(out), optional :: status ! Exit status.
! Internal variables.
type(Status_type), dimension(26) :: deallocate_status ! Deallocat'n Status.
type(Status_type) :: consolidated_status ! Consolidated Status.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements.
VERIFY(Valid_State(Statistics),7) ! Statistics is valid.
! Unset initialization flag.
Statistics%Initialized = uninitialized_flag
! Deallocations and finalizations.
! Set deallocation status.
call Initialize (deallocate_status)
call Initialize (consolidated_status)
! Finalize internals.
call Finalize (Statistics%PE_Count, deallocate_status(1))
call Finalize (Statistics%PE_Arithmetic_Mean, deallocate_status(2))
call Finalize (Statistics%PE_Sum, deallocate_status(3))
call Finalize (Statistics%PE_Geometric_Mean, deallocate_status(4))
call Finalize (Statistics%PE_Log_Sum, deallocate_status(5))
call Finalize (Statistics%PE_Harmonic_Mean, deallocate_status(6))
call Finalize (Statistics%PE_Reciprocal_Sum, deallocate_status(7))
call Finalize (Statistics%PE_Standard_Deviation, deallocate_status(8))
call Finalize (Statistics%PE_Squared_Sum, deallocate_status(9))
call Finalize (Statistics%PE_Maximum, deallocate_status(10))
call Finalize (Statistics%PE_Minimum, deallocate_status(11))
call Finalize (Statistics%PE_Totally_Positive, deallocate_status(12))
call Finalize (Statistics%Global_Count, deallocate_status(13))
call Finalize (Statistics%Global_Arithmetic_Mean, deallocate_status(14))
call Finalize (Statistics%Global_Sum, deallocate_status(15))
call Finalize (Statistics%Global_Geometric_Mean, deallocate_status(16))
call Finalize (Statistics%Global_Log_Sum, deallocate_status(17))
call Finalize (Statistics%Global_Harmonic_Mean, deallocate_status(18))
call Finalize (Statistics%Global_Reciprocal_Sum, deallocate_status(19))
call Finalize (Statistics%Global_Standard_Deviation, deallocate_status(20))
call Finalize (Statistics%Global_Squared_Sum, deallocate_status(21))
call Finalize (Statistics%Global_Maximum, deallocate_status(22))
call Finalize (Statistics%Global_Minimum, deallocate_status(23))
call Finalize (Statistics%Global_Updated, deallocate_status(24))
call Finalize (Statistics%Global_Totally_Positive, deallocate_status(25))
call Finalize (Statistics%Name, deallocate_status(26))
! Process status variables.
consolidated_status = deallocate_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 (deallocate_status)
! Verify guarantees.
VERIFY(.not.Valid_State(Statistics),7) ! Statistics is not valid.
return
end subroutine Finalize_Statistics