|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- SUBROUTINE CLASWPF( N, A, LDA, K1, K2, IPIV, INCX )
- *
- * -- LAPACK auxiliary routine (version 3.0) --
- * Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
- * Courant Institute, Argonne National Lab, and Rice University
- * June 30, 1999
- *
- * .. Scalar Arguments ..
- INTEGER INCX, K1, K2, LDA, N
- * ..
- * .. Array Arguments ..
- INTEGER IPIV( * )
- COMPLEX A( LDA, * )
- * ..
- *
- * Purpose
- * =======
- *
- * CLASWP performs a series of row interchanges on the matrix A.
- * One row interchange is initiated for each of rows K1 through K2 of A.
- *
- * Arguments
- * =========
- *
- * N (input) INTEGER
- * The number of columns of the matrix A.
- *
- * A (input/output) COMPLEX array, dimension (LDA,N)
- * On entry, the matrix of column dimension N to which the row
- * interchanges will be applied.
- * On exit, the permuted matrix.
- *
- * LDA (input) INTEGER
- * The leading dimension of the array A.
- *
- * K1 (input) INTEGER
- * The first element of IPIV for which a row interchange will
- * be done.
- *
- * K2 (input) INTEGER
- * The last element of IPIV for which a row interchange will
- * be done.
- *
- * IPIV (input) INTEGER array, dimension (M*abs(INCX))
- * The vector of pivot indices. Only the elements in positions
- * K1 through K2 of IPIV are accessed.
- * IPIV(K) = L implies rows K and L are to be interchanged.
- *
- * INCX (input) INTEGER
- * The increment between successive values of IPIV. If IPIV
- * is negative, the pivots are applied in reverse order.
- *
- * Further Details
- * ===============
- *
- * Modified by
- * R. C. Whaley, Computer Science Dept., Univ. of Tenn., Knoxville, USA
- *
- * =====================================================================
- *
- * .. Local Scalars ..
- INTEGER I, I1, I2, INC, IP, IX, IX0, J, K, N32
- COMPLEX TEMP
- * ..
- * .. Executable Statements ..
- *
- * Interchange row I with row IPIV(I) for each of rows K1 through K2.
- *
- IF( INCX.GT.0 ) THEN
- IX0 = K1
- I1 = K1
- I2 = K2
- INC = 1
- ELSE IF( INCX.LT.0 ) THEN
- IX0 = 1 + ( 1-K2 )*INCX
- I1 = K2
- I2 = K1
- INC = -1
- ELSE
- RETURN
- END IF
- *
- N32 = ( N / 32 )*32
- IF( N32.NE.0 ) THEN
- DO 30 J = 1, N32, 32
- IX = IX0
- DO 20 I = I1, I2, INC
- IP = IPIV( IX )
- IF( IP.NE.I ) THEN
- DO 10 K = J, J + 31
- TEMP = A( I, K )
- A( I, K ) = A( IP, K )
- A( IP, K ) = TEMP
- 10 CONTINUE
- END IF
- IX = IX + INCX
- 20 CONTINUE
- 30 CONTINUE
- END IF
- IF( N32.NE.N ) THEN
- N32 = N32 + 1
- IX = IX0
- DO 50 I = I1, I2, INC
- IP = IPIV( IX )
- IF( IP.NE.I ) THEN
- DO 40 K = N32, N
- TEMP = A( I, K )
- A( I, K ) = A( IP, K )
- A( IP, K ) = TEMP
- 40 CONTINUE
- END IF
- IX = IX + INCX
- 50 CONTINUE
- END IF
- *
- RETURN
- *
- * End of CLASWP
- *
- END
|