HP MLIB User's Guide Vol. 2 7th Ed.
Chapter 12 VMATH 871
Unpack (scatter) a contiguous vector to a vector with specified indexing vsunpacki, vsunpackv, vsunpackm,
vdunpacki, vdunpackv, vdunpackm
Name vsunpacki, vsunpackv, vsunpackm, vdunpacki, vdunpackv, vdunpackm
Unpack (scatter) a contiguous vector to a vector with specified indexing
Purpose vsunpacki and vdunpacki unpack a contiguous vector of n elements in array a
into a vector with increment incy in array y:
y(1+(i-1)*incy) = a(i), for i = 1 to n
vsunpackv and vdunpackv unpack a contiguous vector of n elements in array a
into a vector, with index vector in array iy, in array y:
y(iy(i)+1) = a(i), for i = 1 to n
The index vector values 0, ..., n-1 represent Fortran array indices 1, ..., n (as in
Intel’s VML). Hence, index value iy(i) indicates array entry y(iy(i)+1).
vsunpackm and vdunpackm unpack a contiguous vector of elements in array a
into a vector, specified by the mask vector of n elements in array my, in array y:
initialize j = 0
if (m(i))
then y(j) = a(j) and j = j+1, for i = 1 to n
Usage The Fortran include file math.fi declares interfaces for these subroutines,
suitable for both VMATH and VMATH8. The interfaces are compatible with
Intel’s MKL VML (Vector Math Library).
SUBROUTINE vsunpacki(n, a, y, incy)
INTEGER, INTENT(IN) :: n, incy
REAL (KIND=4), DIMENSION(n), INTENT(IN) :: a
REAL (KIND=4), DIMENSION(n), INTENT(OUT):: y
SUBROUTINE vsunpackv(n, a, y, iy)
INTEGER, INTENT(IN) :: n
REAL (KIND=4), DIMENSION(n), INTENT(IN) :: a
REAL (KIND=4), DIMENSION(n), INTENT(OUT):: y
INTEGER, DIMENSION(n), INTENT(IN) :: iy
SUBROUTINE vsunpackm(n, a, y, my)
INTEGER, INTENT(IN) :: n
REAL (KIND=4), DIMENSION(n), INTENT(IN) :: a
REAL (KIND=4), DIMENSION(n), INTENT(OUT):: y
INTEGER, DIMENSION(n), INTENT(IN) :: my