The main documentation of the Finalize_Distributed_Vector Procedure contains additional explanation of this code listing.
subroutine Finalize_Distributed_Vector (DV, status)
! Use associations.
use Caesar_Flags_Module, only: uninitialized_flag
! Input/Output variable.
! Distributed_Vector to be finalized.
type(Distributed_Vector_type), intent(inout) :: DV
! Output variable.
type(Status_type), intent(out), optional :: status ! Exit status.
! Internal variables.
type(Status_type), dimension(8) :: deallocate_status ! Deallocation Status.
type(Status_type) :: consolidated_status ! Consolidated Status.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements.
VERIFY(Valid_State(DV),7) ! DV is valid.
! Unset initialization flag.
DV%Initialized = uninitialized_flag
! Set deallocation status.
call Initialize (deallocate_status)
call Initialize (consolidated_status)
! Finalize internals.
NULLIFY(DV%Structure)
select case (DV%Dimensionality)
case (1)
call Finalize (DV%Values1, deallocate_status(1))
case (2)
call Finalize (DV%Values2, deallocate_status(1))
case (3)
call Finalize (DV%Values3, deallocate_status(1))
case (4)
call Finalize (DV%Values4, deallocate_status(1))
!case (-1)
! call Finalize (DV%ValuesRR, deallocate_status(1))
end select
call Finalize (DV%Dimensionality, deallocate_status(2))
call Finalize (DV%Dimensions, deallocate_status(3))
call Finalize (DV%NValues_PE, deallocate_status(4))
call Finalize (DV%NValues_Total, deallocate_status(5))
call Finalize (DV%NValues_Vector, deallocate_status(6))
call Finalize (DV%Name, deallocate_status(7))
call Finalize (DV%Version, deallocate_status(8))
! 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(DV),7) ! DV is not valid.
return
end subroutine Finalize_Distributed_Vector