D.7.3 Valid_State_Overlapped_Vector Procedure

The main documentation of the Valid_State_Overlapped_Vector Procedure contains additional explanation of this code listing.

  function Valid_State_Overlapped_Vector (OV) result(Valid)

    ! Input variables.

    ! Variable to be checked.
    type(Overlapped_Vector_type), intent(in) :: OV 

    ! Output variables.

    type(logical) :: Valid       ! Logical state.

    ! Internal variables.

    type(integer) :: NSlice      ! Number of Values in a "slice" of the OV.

    !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    ! Start out true.

    Valid = .true.

    ! Check for association of pointered internals.

    Valid = Valid .and. ASSOCIATED(OV%One_Structure)
    Valid = Valid .and. ASSOCIATED(OV%Many_Structure)
    Valid = Valid .and. ASSOCIATED(OV%Dimensions)
    Valid = Valid .and. ASSOCIATED(OV%DV)
    Valid = Valid .and. ASSOCIATED(OV%Many_of_One_Index)
    Valid = Valid .and. ASSOCIATED(OV%Overlap_Index)
    Valid = Valid .and. ASSOCIATED(OV%Overlap_Trace)
    if (.not.Valid) return

    ! Check for validity of internals.

    Valid = Valid .and. Initialized(OV)
    Valid = Valid .and. Valid_State(OV%Dimensionality)
    Valid = Valid .and. Valid_State(OV%Dimensions)
    Valid = Valid .and. Valid_State(OV%DV)
    Valid = Valid .and. Valid_State(OV%Many_Structure)
    Valid = Valid .and. Valid_State(OV%Many_of_One_Index)
    Valid = Valid .and. Valid_State(OV%Name)
    Valid = Valid .and. Valid_State(OV%One_Structure)
    Valid = Valid .and. Valid_State(OV%Overlap_Index)
    Valid = Valid .and. Valid_State(OV%Overlap_Trace)
    select case (OV%Dimensionality)
    case (1)
      Valid = Valid .and. Valid_State(OV%Overlap_Values1)
    case (2)
      Valid = Valid .and. Valid_State(OV%Overlap_Values2)
    case (3)
      Valid = Valid .and. Valid_State(OV%Overlap_Values3)
    case (4)
      Valid = Valid .and. Valid_State(OV%Overlap_Values4)
    !case (-1)
    !  Valid = Valid .and. Valid_State(OV%Overlap_ValuesRR)
    end select
    Valid = Valid .and. Valid_State(OV%Version)
    if (.not.Valid) return

    ! Checks on the validity of OV.

    NSlice = PRODUCT(OV%DV%Dimensions(1:OV%Dimensionality-1))
    select case (OV%Dimensionality)
    case (1)
      Valid = Valid .and. &
              OV%Many_of_One_Index%NOff_PE * NSlice == SIZE(OV%Overlap_Values1)
    case (2)                         
      Valid = Valid .and. &
              OV%Many_of_One_Index%NOff_PE * NSlice == SIZE(OV%Overlap_Values2)
    case (3)                         
      Valid = Valid .and. &
              OV%Many_of_One_Index%NOff_PE * NSlice == SIZE(OV%Overlap_Values3)
    case (4)                         
      Valid = Valid .and. &
              OV%Many_of_One_Index%NOff_PE * NSlice == SIZE(OV%Overlap_Values4)
    !case (-1)
    !  Valid = Valid .and. OV%NValues_PE == SIZE(OV%Overlap_ValuesRR)
    end select

    return
  end function Valid_State_Overlapped_Vector



Michael L. Hall