LAPACK
3.9.0
LAPACK: Linear Algebra PACKage
dlaswp.f
Go to the documentation of this file.
1
*> \brief \b DLASWP performs a series of row interchanges on a general rectangular matrix.
2
*
3
* =========== DOCUMENTATION ===========
4
*
5
* Online html documentation available at
6
* http://www.netlib.org/lapack/explore-html/
7
*
8
*> \htmlonly
9
*> Download DLASWP + dependencies
10
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlaswp.f">
11
*> [TGZ]</a>
12
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlaswp.f">
13
*> [ZIP]</a>
14
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlaswp.f">
15
*> [TXT]</a>
16
*> \endhtmlonly
17
*
18
* Definition:
19
* ===========
20
*
21
* SUBROUTINE DLASWP( N, A, LDA, K1, K2, IPIV, INCX )
22
*
23
* .. Scalar Arguments ..
24
* INTEGER INCX, K1, K2, LDA, N
25
* ..
26
* .. Array Arguments ..
27
* INTEGER IPIV( * )
28
* DOUBLE PRECISION A( LDA, * )
29
* ..
30
*
31
*
32
*> \par Purpose:
33
* =============
34
*>
35
*> \verbatim
36
*>
37
*> DLASWP performs a series of row interchanges on the matrix A.
38
*> One row interchange is initiated for each of rows K1 through K2 of A.
39
*> \endverbatim
40
*
41
* Arguments:
42
* ==========
43
*
44
*> \param[in] N
45
*> \verbatim
46
*> N is INTEGER
47
*> The number of columns of the matrix A.
48
*> \endverbatim
49
*>
50
*> \param[in,out] A
51
*> \verbatim
52
*> A is DOUBLE PRECISION array, dimension (LDA,N)
53
*> On entry, the matrix of column dimension N to which the row
54
*> interchanges will be applied.
55
*> On exit, the permuted matrix.
56
*> \endverbatim
57
*>
58
*> \param[in] LDA
59
*> \verbatim
60
*> LDA is INTEGER
61
*> The leading dimension of the array A.
62
*> \endverbatim
63
*>
64
*> \param[in] K1
65
*> \verbatim
66
*> K1 is INTEGER
67
*> The first element of IPIV for which a row interchange will
68
*> be done.
69
*> \endverbatim
70
*>
71
*> \param[in] K2
72
*> \verbatim
73
*> K2 is INTEGER
74
*> (K2-K1+1) is the number of elements of IPIV for which a row
75
*> interchange will be done.
76
*> \endverbatim
77
*>
78
*> \param[in] IPIV
79
*> \verbatim
80
*> IPIV is INTEGER array, dimension (K1+(K2-K1)*abs(INCX))
81
*> The vector of pivot indices. Only the elements in positions
82
*> K1 through K1+(K2-K1)*abs(INCX) of IPIV are accessed.
83
*> IPIV(K1+(K-K1)*abs(INCX)) = L implies rows K and L are to be
84
*> interchanged.
85
*> \endverbatim
86
*>
87
*> \param[in] INCX
88
*> \verbatim
89
*> INCX is INTEGER
90
*> The increment between successive values of IPIV. If INCX
91
*> is negative, the pivots are applied in reverse order.
92
*> \endverbatim
93
*
94
* Authors:
95
* ========
96
*
97
*> \author Univ. of Tennessee
98
*> \author Univ. of California Berkeley
99
*> \author Univ. of Colorado Denver
100
*> \author NAG Ltd.
101
*
102
*> \date June 2017
103
*
104
*> \ingroup doubleOTHERauxiliary
105
*
106
*> \par Further Details:
107
* =====================
108
*>
109
*> \verbatim
110
*>
111
*> Modified by
112
*> R. C. Whaley, Computer Science Dept., Univ. of Tenn., Knoxville, USA
113
*> \endverbatim
114
*>
115
* =====================================================================
116
SUBROUTINE
dlaswp
( N, A, LDA, K1, K2, IPIV, INCX )
117
*
118
* -- LAPACK auxiliary routine (version 3.7.1) --
119
* -- LAPACK is a software package provided by Univ. of Tennessee, --
120
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
121
* June 2017
122
*
123
* .. Scalar Arguments ..
124
INTEGER
INCX, K1, K2, LDA, N
125
* ..
126
* .. Array Arguments ..
127
INTEGER
IPIV( * )
128
DOUBLE PRECISION
A( LDA, * )
129
* ..
130
*
131
* =====================================================================
132
*
133
* .. Local Scalars ..
134
INTEGER
I, I1, I2, INC, IP, IX, IX0, J, K, N32
135
DOUBLE PRECISION
TEMP
136
* ..
137
* .. Executable Statements ..
138
*
139
* Interchange row I with row IPIV(K1+(I-K1)*abs(INCX)) for each of rows
140
* K1 through K2.
141
*
142
IF
( incx.GT.0 )
THEN
143
ix0 = k1
144
i1 = k1
145
i2 = k2
146
inc = 1
147
ELSE
IF
( incx.LT.0 )
THEN
148
ix0 = k1 + ( k1-k2 )*incx
149
i1 = k2
150
i2 = k1
151
inc = -1
152
ELSE
153
RETURN
154
END IF
155
*
156
n32 = ( n / 32 )*32
157
IF
( n32.NE.0 )
THEN
158
DO
30 j = 1, n32, 32
159
ix = ix0
160
DO
20 i = i1, i2, inc
161
ip = ipiv( ix )
162
IF
( ip.NE.i )
THEN
163
DO
10 k = j, j + 31
164
temp = a( i, k )
165
a( i, k ) = a( ip, k )
166
a( ip, k ) = temp
167
10
CONTINUE
168
END IF
169
ix = ix + incx
170
20
CONTINUE
171
30
CONTINUE
172
END IF
173
IF
( n32.NE.n )
THEN
174
n32 = n32 + 1
175
ix = ix0
176
DO
50 i = i1, i2, inc
177
ip = ipiv( ix )
178
IF
( ip.NE.i )
THEN
179
DO
40 k = n32, n
180
temp = a( i, k )
181
a( i, k ) = a( ip, k )
182
a( ip, k ) = temp
183
40
CONTINUE
184
END IF
185
ix = ix + incx
186
50
CONTINUE
187
END IF
188
*
189
RETURN
190
*
191
* End of DLASWP
192
*
193
END
dlaswp
subroutine dlaswp(N, A, LDA, K1, K2, IPIV, INCX)
DLASWP performs a series of row interchanges on a general rectangular matrix.
Definition:
dlaswp.f:117
SRC
dlaswp.f
Generated on Wed May 5 2021 15:10:40 for LAPACK by
1.8.16