The main documentation of the Get_Values_Data_Index Procedure contains additional explanation of this code listing.
subroutine Get_Values_Data_Index_1 (Values, Index)
! Input variable.
type(Data_Index_type), intent(in) :: Index ! Variable to be queried.
! Input/Output variable.
type(integer,1,np), intent(inout) :: Values ! Values bare naked vector.
! Internal variables.
type(integer) :: i ! Loop counter.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements.
VERIFY(Valid_State(Index),5) ! Index is valid.
VERIFY(Index%Dimensionality==1,5) ! Dimensionality is correct.
! Calculate the values, correcting for local/global and off-PE conversions.
Values = zero
do i = 1, SIZE(Index%Index1,1)
if (Index%Index1(i) > 0) then
Values(i) = Index%Index1(i) + First_PE(Index%Many_Structure) - 1
else if (Index%Index1(i) < 0) then
Values(i) = Index%Off_PE_Index(-Index%Index1(i))
end if
end do
! Verify guarantees.
VERIFY(Valid_State_NP(Values),5) ! Values is valid.
return
end subroutine Get_Values_Data_Index_1
subroutine Get_Values_Data_Index_2 (Values, Index)
! Input variable.
type(Data_Index_type), intent(in) :: Index ! Variable to be queried.
! Input/Output variable.
type(integer,2,np), intent(inout) :: Values ! Values bare naked vector.
! Internal variables.
type(integer) :: i, j ! Loop counters.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements.
VERIFY(Valid_State(Index),5) ! Index is valid.
VERIFY(Index%Dimensionality==2,5) ! Dimensionality is correct.
! Calculate the values, correcting for local/global and off-PE conversions.
Values = zero
do i = 1, SIZE(Index%Index2,1)
do j = 1, SIZE(Index%Index2,2)
if (Index%Index2(i,j) > 0) then
Values(i,j) = Index%Index2(i,j) + First_PE(Index%Many_Structure) - 1
else if (Index%Index2(i,j) < 0) then
Values(i,j) = Index%Off_PE_Index(-Index%Index2(i,j))
end if
end do
end do
! Verify guarantees.
VERIFY(Valid_State_NP(Values),5) ! Values is valid.
return
end subroutine Get_Values_Data_Index_2