PERMU

Rearranges the elements of an array as specified by a permutation.

Required Arguments

X — Real vector of length N containing the array to be permuted.   (Input)

IPERMU — Integer vector of length N containing a permutation
IPERMU(1), …, IPERMU(N) of the integers 1, …, N.   (Input)

XPERMU — Real vector of length N containing the array X permuted.   (Output)
If X is not needed, X and XPERMU can share the same storage locations.

Optional Arguments

N — Length of the arrays X and XPERMU.   (Input)
Default: N = size (IPERMU,1).

IPATH — Integer flag.   (Input)
Default: IPATH = 1.
IPATH = 1 means IPERMU represents a forward permutation, i.e., X(IPERMU(I)) is moved to XPERMU(I). IPATH = 2 means IPERMU represents a backward permutation, i.e., X(I) is moved to XPERMU(IPERMU(I)).

FORTRAN 90 Interface

Generic:                              CALL PERMU (X, IPERMU, XPERMU [,…])

Specific:                             The specific interface names are S_PERMU and D_PERMU.

FORTRAN 77 Interface

Single:                                CALL PERMU (N, X, IPERMU, IPATH, XPERMU)

Double:                              The double precision name is DPERMU.

Description

Routine PERMU rearranges the elements of an array according to a permutation vector. It has the option to do both forward and backward permutations.

Example

This example rearranges the array X using IPERMU; forward permutation is performed.

 

      USE PERMU_INT

      USE UMACH_INT

 

      IMPLICIT   NONE

!                                 Declare variables

      INTEGER    IPATH, N

      PARAMETER  (IPATH=1, N=4)

!

      INTEGER    IPERMU(N), J, NOUT

      REAL       X(N), XPERMU(N)

!                                 Set values for  X, IPERMU

!

!                           X = ( 5.0  6.0  1.0  4.0 )

!                           IPERMU = ( 3 1 4 2 )

!

      DATA X/5.0, 6.0, 1.0, 4.0/, IPERMU/3, 1, 4, 2/

!                                 Permute X into XPERMU

      CALL PERMU (X, IPERMU, XPERMU)

!                                 Get output unit number

      CALL UMACH (2, NOUT)

!                                 Print results

      WRITE (NOUT,99999) (XPERMU(J),J=1,N)

!

99999 FORMAT ('  The output vector is:', /, 10(1X,F10.2))

      END

Output

 

The Output vector is:
1.00       5.00       4.00       6.00


Visual Numerics, Inc.
Visual Numerics - Developers of IMSL and PV-WAVE
http://www.vni.com/
PHONE: 713.784.3131
FAX:713.781.9260