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 zlatrz(M, N, L, A, LDA, TAU, WORK)
ZLATRZ factors an upper trapezoidal matrix by means of unitary transformations.
subroutine xerbla(SRNAME, INFO)
XERBLA
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 ztzrzf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
ZTZRZF
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
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.