The main documentation of the Collect_CA_from_OV Procedure contains additional explanation of this code listing.
subroutine Collect_CA_from_OV (CA, OV)
! Input variable.
type(Overlapped_Vector_type), intent(in) :: OV ! OV to be collected.
! Input/Output variable.
type(Collected_Array_type), intent(inout) :: CA ! Resultant CA.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements.
VERIFY(Valid_State(CA),5) ! CA is valid.
VERIFY(Valid_State(OV),5) ! OV is valid.
VERIFY(CA%Dimensionality == OV%Dimensionality,5) ! Same dimensionality.
VERIFY(CA%Dimensions(1:CA%Dimensionality-1) == dnl
OV%Dimensions(1:OV%Dimensionality-1),5) ! Same dimensions.
! Same structures and indices.
VERIFY(ASSOCIATED(CA%One_Structure,OV%One_Structure),5)
VERIFY(ASSOCIATED(CA%Many_Structure,OV%Many_Structure),5)
VERIFY(ASSOCIATED(CA%Many_of_One_Index,OV%Many_of_One_Index),5)
! Collect the values, using the Collect_and_Access OV routine.
select case (CA%A_Dimensionality)
case (1)
CA%Values1 = OV
case (2)
CA%Values2 = OV
case (3)
CA%Values3 = OV
case (4)
CA%Values4 = OV
case (5)
CA%Values5 = OV
end select
! Set version number.
CA = Version(OV)
! Verify guarantees.
VERIFY(Valid_State(CA),5) ! CA is valid.
VERIFY(Valid_State(OV),5) ! OV is still valid.
return
end subroutine Collect_CA_from_OV