139 SUBROUTINE zgeqlf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
147 INTEGER INFO, LDA, LWORK, M, N
150 COMPLEX*16 A( lda, * ), TAU( * ), WORK( * )
157 INTEGER I, IB, IINFO, IWS, K, KI, KK, LDWORK, LWKOPT,
158 $ mu, nb, nbmin, nu, nx
175 lquery = ( lwork.EQ.-1 )
178 ELSE IF( n.LT.0 )
THEN 180 ELSE IF( lda.LT.max( 1, m ) )
THEN 189 nb = ilaenv( 1,
'ZGEQLF',
' ', m, n, -1, -1 )
194 IF( lwork.LT.max( 1, n ) .AND. .NOT.lquery )
THEN 200 CALL xerbla(
'ZGEQLF', -info )
202 ELSE IF( lquery )
THEN 215 IF( nb.GT.1 .AND. nb.LT.k )
THEN 219 nx = max( 0, ilaenv( 3,
'ZGEQLF',
' ', m, n, -1, -1 ) )
226 IF( lwork.LT.iws )
THEN 232 nbmin = max( 2, ilaenv( 2,
'ZGEQLF',
' ', m, n, -1,
238 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN 243 ki = ( ( k-nx-1 ) / nb )*nb
246 DO 10 i = k - kk + ki + 1, k - kk + 1, -nb
247 ib = min( k-i+1, nb )
252 CALL zgeql2( m-k+i+ib-1, ib, a( 1, n-k+i ), lda, tau( i ),
254 IF( n-k+i.GT.1 )
THEN 259 CALL zlarft(
'Backward',
'Columnwise', m-k+i+ib-1, ib,
260 $ a( 1, n-k+i ), lda, tau( i ), work, ldwork )
264 CALL zlarfb(
'Left',
'Conjugate transpose',
'Backward',
265 $
'Columnwise', m-k+i+ib-1, n-k+i-1, ib,
266 $ a( 1, n-k+i ), lda, work, ldwork, a, lda,
267 $ work( ib+1 ), ldwork )
270 mu = m - k + i + nb - 1
271 nu = n - k + i + nb - 1
279 IF( mu.GT.0 .AND. nu.GT.0 )
280 $
CALL zgeql2( mu, nu, a, lda, tau, work, iinfo )
subroutine zgeql2(M, N, A, LDA, TAU, WORK, INFO)
ZGEQL2 computes the QL factorization of a general rectangular matrix using an unblocked algorithm...
subroutine zlarft(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
ZLARFT forms the triangular factor T of a block reflector H = I - vtvH
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zgeqlf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
ZGEQLF
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...