The main documentation of the Valid_State_Collected_Array Procedure contains additional explanation of this code listing.
function Valid_State_Collected_Array (CA) result(Valid)
! Input variables.
! Variable to be checked.
type(Collected_Array_type), intent(in) :: CA
! Output variables.
type(logical) :: Valid ! Logical state.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Start out true.
Valid = .true.
! Check for association of pointered internals.
Valid = Valid .and. ASSOCIATED(CA%One_Structure)
Valid = Valid .and. ASSOCIATED(CA%Many_Structure)
Valid = Valid .and. ASSOCIATED(CA%Dimensions)
Valid = Valid .and. ASSOCIATED(CA%Many_of_One_Index)
if (.not.Valid) return
! Check for validity of internals.
Valid = Valid .and. Initialized(CA)
Valid = Valid .and. Valid_State(CA%A_Dimensionality)
Valid = Valid .and. Valid_State(CA%Dimensionality)
Valid = Valid .and. Valid_State(CA%Dimensions)
Valid = Valid .and. Valid_State(CA%Many_Structure)
Valid = Valid .and. Valid_State(CA%Many_of_One_Index)
Valid = Valid .and. Valid_State(CA%Name)
Valid = Valid .and. Valid_State(CA%One_Structure)
select case (CA%A_Dimensionality)
case (1)
Valid = Valid .and. Valid_State(CA%Values1)
case (2)
Valid = Valid .and. Valid_State(CA%Values2)
case (3)
Valid = Valid .and. Valid_State(CA%Values3)
case (4)
Valid = Valid .and. Valid_State(CA%Values4)
case (5)
Valid = Valid .and. Valid_State(CA%Values5)
!case (-1)
! Valid = Valid .and. Valid_State(CA%ValuesRR)
end select
Valid = Valid .and. Valid_State(CA%Version)
if (.not.Valid) return
! Checks on the validity of CA.
Valid = Valid .and. CA%A_Dimensionality == &
CA%Dimensionality + CA%Many_of_One_Index%Dimensionality - 1
select case (CA%A_Dimensionality)
case (1)
Valid = Valid .and. ALL(CA%Dimensions(1:1) == SHAPE(CA%Values1))
case (2)
Valid = Valid .and. ALL(CA%Dimensions(1:2) == SHAPE(CA%Values2))
case (3)
Valid = Valid .and. ALL(CA%Dimensions(1:3) == SHAPE(CA%Values3))
case (4)
Valid = Valid .and. ALL(CA%Dimensions(1:4) == SHAPE(CA%Values4))
case (5)
Valid = Valid .and. ALL(CA%Dimensions(1:5) == SHAPE(CA%Values5))
!case (-1)
! Valid = Valid .and. ALL(CA%Dimensions(1:2) == SHAPE(CA%ValuesRR))
end select
return
end function Valid_State_Collected_Array