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