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