UNPACK (The GNU Fortran Compiler)

### 8.300 `UNPACK` — Unpack an array of rank one into an array ¶

Synopsis:

  `RESULT = UNPACK(VECTOR, MASK, FIELD)`

Description:

  Store the elements of VECTOR in an array of higher rank.

Class:

  Transformational function

Arguments:

  VECTOR | Shall be an array of any type and rank one. It shall have at least as many elements as MASK has `TRUE` values.
  MASK | Shall be an array of type `LOGICAL`.
  FIELD | Shall be of the same type as VECTOR and have the same shape as MASK.

Return value:

  The resulting array corresponds to FIELD with `TRUE` elements of MASK replaced by values from VECTOR in array element order.

Example:

      PROGRAM test_unpack
        integer :: vector(2)  = (/1,1/)
        logical :: mask(4)  = (/ .TRUE., .FALSE., .FALSE., .TRUE. /)
        integer :: field(2,2) = 0, unity(2,2)

        ! result: unity matrix
        unity = unpack(vector, reshape(mask, (/2,2/)), field)
      END PROGRAM

Standard:

  Fortran 90 and later

See also:

  `PACK` — Pack an array into an array of rank one,
  `SPREAD` — Add a dimension to an array