152 SUBROUTINE ztzrzf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
160 INTEGER INFO, LDA, LWORK, M, N
163 COMPLEX*16 A( lda, * ), TAU( * ), WORK( * )
170 parameter ( zero = ( 0.0d+0, 0.0d+0 ) )
174 INTEGER I, IB, IWS, KI, KK, LDWORK, LWKMIN, LWKOPT,
175 $ m1, mu, nb, nbmin, nx
192 lquery = ( lwork.EQ.-1 )
195 ELSE IF( n.LT.m )
THEN
197 ELSE IF( lda.LT.max( 1, m ) )
THEN
202 IF( m.EQ.0 .OR. m.EQ.n )
THEN
209 nb = ilaenv( 1,
'ZGERQF',
' ', m, n, -1, -1 )
215 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN
221 CALL xerbla(
'ZTZRZF', -info )
223 ELSE IF( lquery )
THEN
231 ELSE IF( m.EQ.n )
THEN
241 IF( nb.GT.1 .AND. nb.LT.m )
THEN
245 nx = max( 0, ilaenv( 3,
'ZGERQF',
' ', m, n, -1, -1 ) )
252 IF( lwork.LT.iws )
THEN
258 nbmin = max( 2, ilaenv( 2,
'ZGERQF',
' ', m, n, -1,
264 IF( nb.GE.nbmin .AND. nb.LT.m .AND. nx.LT.m )
THEN
270 ki = ( ( m-nx-1 ) / nb )*nb
273 DO 20 i = m - kk + ki + 1, m - kk + 1, -nb
274 ib = min( m-i+1, nb )
279 CALL zlatrz( ib, n-i+1, n-m, a( i, i ), lda, tau( i ),
286 CALL zlarzt(
'Backward',
'Rowwise', n-m, ib, a( i, m1 ),
287 $ lda, tau( i ), work, ldwork )
291 CALL zlarzb(
'Right',
'No transpose',
'Backward',
292 $
'Rowwise', i-1, n-i+1, ib, n-m, a( i, m1 ),
293 $ lda, work, ldwork, a( 1, i ), lda,
294 $ work( ib+1 ), ldwork )
305 $
CALL zlatrz( mu, n, n-m, a, lda, tau, work )
subroutine ztzrzf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
ZTZRZF
subroutine zlatrz(M, N, L, A, LDA, TAU, WORK)
ZLATRZ factors an upper trapezoidal matrix by means of unitary transformations.
subroutine zlarzt(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
ZLARZT forms the triangular factor T of a block reflector H = I - vtvH.
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zlarzb(SIDE, TRANS, DIRECT, STOREV, M, N, K, L, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
ZLARZB applies a block reflector or its conjugate-transpose to a general matrix.