145 SUBROUTINE cgeqpf( M, N, A, LDA, JPVT, TAU, WORK, RWORK, INFO )
152 INTEGER INFO, LDA, M, N
157 COMPLEX A( LDA, * ), TAU( * ), WORK( * )
164 parameter( zero = 0.0e+0, one = 1.0e+0 )
167 INTEGER I, ITEMP, J, MA, MN, PVT
168 REAL TEMP, TEMP2, TOL3Z
175 INTRINSIC abs, cmplx, conjg, max, min, sqrt
180 EXTERNAL isamax, scnrm2, slamch
189 ELSE IF( n.LT.0 )
THEN
191 ELSE IF( lda.LT.max( 1, m ) )
THEN
195 CALL xerbla(
'CGEQPF', -info )
200 tol3z = sqrt(slamch(
'Epsilon'))
206 IF( jpvt( i ).NE.0 )
THEN
207 IF( i.NE.itemp )
THEN
208 CALL cswap( m, a( 1, i ), 1, a( 1, itemp ), 1 )
209 jpvt( i ) = jpvt( itemp )
223 IF( itemp.GT.0 )
THEN
225 CALL cgeqr2( m, ma, a, lda, tau, work, info )
227 CALL cunm2r(
'Left',
'Conjugate transpose', m, n-ma, ma, a,
228 $ lda, tau, a( 1, ma+1 ), lda, work, info )
232 IF( itemp.LT.mn )
THEN
237 DO 20 i = itemp + 1, n
238 rwork( i ) = scnrm2( m-itemp, a( itemp+1, i ), 1 )
239 rwork( n+i ) = rwork( i )
244 DO 40 i = itemp + 1, mn
248 pvt = ( i-1 ) + isamax( n-i+1, rwork( i ), 1 )
251 CALL cswap( m, a( 1, pvt ), 1, a( 1, i ), 1 )
253 jpvt( pvt ) = jpvt( i )
255 rwork( pvt ) = rwork( i )
256 rwork( n+pvt ) = rwork( n+i )
262 CALL clarfg( m-i+1, aii, a( min( i+1, m ), i ), 1,
271 a( i, i ) = cmplx( one )
272 CALL clarf(
'Left', m-i+1, n-i, a( i, i ), 1,
273 $ conjg( tau( i ) ), a( i, i+1 ), lda, work )
280 IF( rwork( j ).NE.zero )
THEN
285 temp = abs( a( i, j ) ) / rwork( j )
286 temp = max( zero, ( one+temp )*( one-temp ) )
287 temp2 = temp*( rwork( j ) / rwork( n+j ) )**2
288 IF( temp2 .LE. tol3z )
THEN
290 rwork( j ) = scnrm2( m-i, a( i+1, j ), 1 )
291 rwork( n+j ) = rwork( j )
297 rwork( j ) = rwork( j )*sqrt( temp )
subroutine cgeqr2(m, n, a, lda, tau, work, info)
CGEQR2 computes the QR factorization of a general rectangular matrix using an unblocked algorithm.
subroutine clarf(side, m, n, v, incv, tau, c, ldc, work)
CLARF applies an elementary reflector to a general rectangular matrix.
subroutine cunm2r(side, trans, m, n, k, a, lda, tau, c, ldc, work, info)
CUNM2R multiplies a general matrix by the unitary matrix from a QR factorization determined by cgeqrf...