unpack

Date:

06-19-2023

NAME

UNPACK - Unpacks an array of rank one into an array under control of a mask

SYNOPSIS

UNPACK ([VECTOR=]vector, [MASK=]mask, [FIELD=]field)

STANDARDS

Fortran

DESCRIPTION

The UNPACK intrinsic function unpacks an array of rank one into an array under control of mask. It accepts the following arguments:

vector

Can be of any type. It must have rank one. Its size must be at least t where t is the number of true elements in mask.

mask

Must be of type logical and array valued.

field

Must be of the same type as vector, and must be conformable with mask.

UNPACK is a transformational function. The name of this intrinsic cannot be passed as an argument.

RETURN VALUES

The result is an array of the same type as vector and the same shape as mask.

The element of the result that corresponds to the ith true element of mask, in array element order, has the value vector(i) for i=1, 2, …, t where t is the number of true values in mask. Each other element has the value equal to field if field is scalar or to the corresponding element of field if it is an array.

EXAMPLES

This example uses UNPACK to scatter specific values to specific positions in an array.

Assume that M is the following array:

| 1 0 0 |
| 0 1 0 |
| 0 0 1 |

Assume that V is the array [1,2,3].

Assume that Q is the following logical mask:

| F T F |
| T F F |
| F F T |

In logical mask Q, T represents true and F represents false, so UNPACK(V,MASK=Q,FIELD=M) yields the following value:

| 1 2 0 |
| 1 1 0 |
| 0 0 3 |

UNPACK(V,MASK=Q,FIELD=0) yields the following value:

| 0 2 0 |
| 1 0 0 |
| 0 0 3 |