136 SUBROUTINE zgerqf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
143 INTEGER INFO, LDA, LWORK, M, N
146 COMPLEX*16 A( LDA, * ), TAU( * ), WORK( * )
153 INTEGER I, IB, IINFO, IWS, K, KI, KK, LDWORK, LWKOPT,
154 $ MU, NB, NBMIN, NU, NX
171 lquery = ( lwork.EQ.-1 )
174 ELSE IF( n.LT.0 )
THEN
176 ELSE IF( lda.LT.max( 1, m ) )
THEN
185 nb = ilaenv( 1,
'ZGERQF',
' ', m, n, -1, -1 )
190 IF ( .NOT.lquery )
THEN
191 IF( lwork.LE.0 .OR. ( n.GT.0 .AND. lwork.LT.max( 1, m ) ) )
197 CALL xerbla(
'ZGERQF', -info )
199 ELSE IF( lquery )
THEN
212 IF( nb.GT.1 .AND. nb.LT.k )
THEN
216 nx = max( 0, ilaenv( 3,
'ZGERQF',
' ', m, n, -1, -1 ) )
223 IF( lwork.LT.iws )
THEN
229 nbmin = max( 2, ilaenv( 2,
'ZGERQF',
' ', m, n, -1,
235 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN
240 ki = ( ( k-nx-1 ) / nb )*nb
243 DO 10 i = k - kk + ki + 1, k - kk + 1, -nb
244 ib = min( k-i+1, nb )
249 CALL zgerq2( ib, n-k+i+ib-1, a( m-k+i, 1 ), lda,
252 IF( m-k+i.GT.1 )
THEN
257 CALL zlarft(
'Backward',
'Rowwise', n-k+i+ib-1, ib,
258 $ a( m-k+i, 1 ), lda, tau( i ), work, ldwork )
262 CALL zlarfb(
'Right',
'No transpose',
'Backward',
263 $
'Rowwise', m-k+i-1, n-k+i+ib-1, ib,
264 $ a( m-k+i, 1 ), lda, work, ldwork, a, lda,
265 $ work( ib+1 ), ldwork )
268 mu = m - k + i + nb - 1
269 nu = n - k + i + nb - 1
277 IF( mu.GT.0 .AND. nu.GT.0 )
278 $
CALL zgerq2( mu, nu, a, lda, tau, work, iinfo )
subroutine zgerq2(m, n, a, lda, tau, work, info)
ZGERQ2 computes the RQ factorization of a general rectangular matrix using an unblocked algorithm.
subroutine zgerqf(m, n, a, lda, tau, work, lwork, info)
ZGERQF
subroutine zlarfb(side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork)
ZLARFB applies a block reflector or its conjugate-transpose to a general rectangular matrix.
recursive subroutine zlarft(direct, storev, n, k, v, ldv, tau, t, ldt)
ZLARFT forms the triangular factor T of a block reflector H = I - vtvH