Transformational Intrinsic Function (Generic): Takes elements from an array and packs them into a rank-one array under the control of a mask.
Syntax
Elements in vector are used to fill out the result array if there are not enough elements selected by mask.
Results:
The result is a rank-one array with the same type and type parameters as array. If vector is present, the size of the result is that of vector. Otherwise, the size of the result is the number of true elements in mask, or the number of elements in array (if mask is a scalar with value true).
Elements in array are processed in array element order to form the result array. Element i of the result is the element of array that corresponds to the ith true element of mask. If vector is present and has more elements than there are true values in mask, any result elements that are empty (because they were not true according to mask) are set to the corresponding values in vector.
Compatibility
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
See Also: UNPACK
Examples
N is the array
[ 0 8 0 ]
[ 0 0 0 ]
[ 7 0 0 ].
PACK (N, MASK=N .NE. 0, VECTOR=(/1, 3, 5, 9, 11, 13/)) produces the result (7, 8, 5, 9, 11, 13).
PACK (N, MASK=N .NE. 0) produces the result (7, 8).
The following shows another example:
INTEGER array(2, 3), vec1(2), vec2(5)
LOGICAL mask (2, 3)
array = RESHAPE((/7, 0, 0, -5, 0, 0/), (/2, 3/))
mask = array .NE. 0
! array is 7 0 0 and mask is T F F
! 0 -5 0 F T F
VEC1 = PACK(array, mask) ! returns ( 7, -5 )
VEC2 = PACK(array, array .GT. 0, VECTOR= (/1,2,3,4,5/))
! returns ( 7, 2, 3, 4, 5 )