HP MLIB User's Guide Vol. 2 7th Ed.

Chapter 12 VMATH 861
Pack (gather) a vector with specified indexing into a contiguous vector vspacki, vspackv, vspackm, vdpacki,
vdpackv, vdpackm
Name vspacki, vspackv, vspackm, vdpacki, vdpackv, vdpackm
Pack (gather) a vector with specified indexing into a contiguous vector
Purpose vspacki and vdpacki pack the vector of n elements stored (forward) with
increment inca in array a into a contiguous vector in array y:
y(i) = a(1+(i-1)*inca), for 1 = 1 to n
vspackv and vdpackv pack the vector of elements in array a, with index vector
in array ia, into a contiguous vector in array y:
y(i) = a(ia(i)+1), 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 ia(i) indicates array entry a(ia(i)+1).
vspackm and vdpackm pack the vector of elements in array a, specified by the
mask vector of n elements in array ma, into a contiguous vector in array y:
initialize j = 0
if (m(i)) then y(j) = a(i) 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 vspacki(n, a, inca, y)
INTEGER, INTENT(IN) :: n, inca
REAL (KIND=4), DIMENSION(n), INTENT(IN) :: a
REAL (KIND=4), DIMENSION(n), INTENT(OUT):: y
SUBROUTINE vspackv(n, a, ia, y)
INTEGER, INTENT(IN) :: n
REAL (KIND=4), DIMENSION(n), INTENT(IN) :: a
INTEGER, DIMENSION(n), INTENT(IN) :: ia
REAL (KIND=4), DIMENSION(n), INTENT(OUT):: y
SUBROUTINE vspackm(n, a, ma, y)
INTEGER, INTENT(IN) :: n
REAL (KIND=4), DIMENSION(n), INTENT(IN) :: a
INTEGER, DIMENSION(n), INTENT(IN) :: ma
REAL (KIND=4), DIMENSION(n), INTENT(OUT):: y