2329
|
1 SUBROUTINE ZLASWP( N, A, LDA, K1, K2, IPIV, INCX ) |
|
2 * |
7034
|
3 * -- LAPACK auxiliary routine (version 3.1) -- |
|
4 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. |
|
5 * November 2006 |
2329
|
6 * |
|
7 * .. Scalar Arguments .. |
|
8 INTEGER INCX, K1, K2, LDA, N |
|
9 * .. |
|
10 * .. Array Arguments .. |
|
11 INTEGER IPIV( * ) |
|
12 COMPLEX*16 A( LDA, * ) |
|
13 * .. |
|
14 * |
|
15 * Purpose |
|
16 * ======= |
|
17 * |
|
18 * ZLASWP performs a series of row interchanges on the matrix A. |
|
19 * One row interchange is initiated for each of rows K1 through K2 of A. |
|
20 * |
|
21 * Arguments |
|
22 * ========= |
|
23 * |
|
24 * N (input) INTEGER |
|
25 * The number of columns of the matrix A. |
|
26 * |
|
27 * A (input/output) COMPLEX*16 array, dimension (LDA,N) |
|
28 * On entry, the matrix of column dimension N to which the row |
|
29 * interchanges will be applied. |
|
30 * On exit, the permuted matrix. |
|
31 * |
|
32 * LDA (input) INTEGER |
|
33 * The leading dimension of the array A. |
|
34 * |
|
35 * K1 (input) INTEGER |
|
36 * The first element of IPIV for which a row interchange will |
|
37 * be done. |
|
38 * |
|
39 * K2 (input) INTEGER |
|
40 * The last element of IPIV for which a row interchange will |
|
41 * be done. |
|
42 * |
7034
|
43 * IPIV (input) INTEGER array, dimension (K2*abs(INCX)) |
2329
|
44 * The vector of pivot indices. Only the elements in positions |
|
45 * K1 through K2 of IPIV are accessed. |
|
46 * IPIV(K) = L implies rows K and L are to be interchanged. |
|
47 * |
|
48 * INCX (input) INTEGER |
|
49 * The increment between successive values of IPIV. If IPIV |
|
50 * is negative, the pivots are applied in reverse order. |
|
51 * |
3333
|
52 * Further Details |
|
53 * =============== |
|
54 * |
|
55 * Modified by |
|
56 * R. C. Whaley, Computer Science Dept., Univ. of Tenn., Knoxville, USA |
|
57 * |
2329
|
58 * ===================================================================== |
|
59 * |
|
60 * .. Local Scalars .. |
3333
|
61 INTEGER I, I1, I2, INC, IP, IX, IX0, J, K, N32 |
|
62 COMPLEX*16 TEMP |
2329
|
63 * .. |
|
64 * .. Executable Statements .. |
|
65 * |
|
66 * Interchange row I with row IPIV(I) for each of rows K1 through K2. |
|
67 * |
|
68 IF( INCX.GT.0 ) THEN |
3333
|
69 IX0 = K1 |
|
70 I1 = K1 |
|
71 I2 = K2 |
|
72 INC = 1 |
|
73 ELSE IF( INCX.LT.0 ) THEN |
|
74 IX0 = 1 + ( 1-K2 )*INCX |
|
75 I1 = K2 |
|
76 I2 = K1 |
|
77 INC = -1 |
2329
|
78 ELSE |
3333
|
79 RETURN |
2329
|
80 END IF |
3333
|
81 * |
|
82 N32 = ( N / 32 )*32 |
|
83 IF( N32.NE.0 ) THEN |
|
84 DO 30 J = 1, N32, 32 |
|
85 IX = IX0 |
|
86 DO 20 I = I1, I2, INC |
|
87 IP = IPIV( IX ) |
|
88 IF( IP.NE.I ) THEN |
|
89 DO 10 K = J, J + 31 |
|
90 TEMP = A( I, K ) |
|
91 A( I, K ) = A( IP, K ) |
|
92 A( IP, K ) = TEMP |
|
93 10 CONTINUE |
|
94 END IF |
|
95 IX = IX + INCX |
|
96 20 CONTINUE |
|
97 30 CONTINUE |
|
98 END IF |
|
99 IF( N32.NE.N ) THEN |
|
100 N32 = N32 + 1 |
|
101 IX = IX0 |
|
102 DO 50 I = I1, I2, INC |
2329
|
103 IP = IPIV( IX ) |
3333
|
104 IF( IP.NE.I ) THEN |
|
105 DO 40 K = N32, N |
|
106 TEMP = A( I, K ) |
|
107 A( I, K ) = A( IP, K ) |
|
108 A( IP, K ) = TEMP |
|
109 40 CONTINUE |
|
110 END IF |
2329
|
111 IX = IX + INCX |
3333
|
112 50 CONTINUE |
2329
|
113 END IF |
|
114 * |
|
115 RETURN |
|
116 * |
|
117 * End of ZLASWP |
|
118 * |
|
119 END |