The main documentation of the Valid_State_Distributed_Vector Procedure contains additional explanation of this code listing.
function Valid_State_Distributed_Vector (DV) result(Valid)
! Input variables.
! Variable to be checked.
type(Distributed_Vector_type), intent(in) :: DV
! Output variables.
type(logical) :: Valid ! Logical state.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Start out true.
Valid = .true.
! Check for association of pointered internals.
Valid = Valid .and. ASSOCIATED(DV%Structure)
Valid = Valid .and. ASSOCIATED(DV%Dimensions)
if (.not.Valid) return
! Check for validity of internals.
Valid = Valid .and. Initialized(DV)
Valid = Valid .and. Valid_State(DV%Dimensionality)
Valid = Valid .and. Valid_State(DV%Dimensions)
Valid = Valid .and. Valid_State(DV%NValues_PE)
Valid = Valid .and. Valid_State(DV%NValues_Total)
Valid = Valid .and. Valid_State(DV%NValues_Vector)
Valid = Valid .and. Valid_State(DV%Name)
Valid = Valid .and. Valid_State(DV%Structure)
select case (DV%Dimensionality)
case (1)
Valid = Valid .and. Valid_State(DV%Values1)
case (2)
Valid = Valid .and. Valid_State(DV%Values2)
case (3)
Valid = Valid .and. Valid_State(DV%Values3)
case (4)
Valid = Valid .and. Valid_State(DV%Values4)
!case (-1)
! Valid = Valid .and. Valid_State(DV%ValuesRR)
end select
Valid = Valid .and. Valid_State(DV%Version)
if (.not.Valid) return
! Checks on the validity of DV.
select case (DV%Dimensionality)
case (1)
Valid = Valid .and. DV%NValues_PE == SIZE(DV%Values1)
Valid = Valid .and. ALL(DV%Dimensions(1:1) == SHAPE(DV%Values1))
case (2)
Valid = Valid .and. DV%NValues_PE == SIZE(DV%Values2)
Valid = Valid .and. ALL(DV%Dimensions(1:2) == SHAPE(DV%Values2))
case (3)
Valid = Valid .and. DV%NValues_PE == SIZE(DV%Values3)
Valid = Valid .and. ALL(DV%Dimensions(1:3) == SHAPE(DV%Values3))
case (4)
Valid = Valid .and. DV%NValues_PE == SIZE(DV%Values4)
Valid = Valid .and. ALL(DV%Dimensions(1:4) == SHAPE(DV%Values4))
!case (-1)
! Valid = Valid .and. DV%NValues_PE == SIZE(DV%ValuesRR)
end select
Valid = Valid .and. DV%NValues_PE == DV%NValues_Vector(this_PE)
return
end function Valid_State_Distributed_Vector