150 SUBROUTINE ztzrzf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
157 INTEGER INFO, LDA, LWORK, M, N
160 COMPLEX*16 A( LDA, * ), TAU( * ), WORK( * )
167 parameter( zero = ( 0.0d+0, 0.0d+0 ) )
171 INTEGER , IB, IWS, KI, KK, LDWORK, LWKMIN, LWKOPT,
172 $ M1, MU, NB, NBMIN, NX
189 lquery = ( lwork.EQ.-1 )
192 ELSE IF( n.LT.m )
THEN
194 ELSE IF( lda.LT.
max( 1, m ) )
THEN
199 IF( m.EQ.0 .OR. m.EQ.n )
THEN
206 nb = ilaenv( 1,
'ZGERQF',
' ', m, n, -1, -1 )
212 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN
218 CALL xerbla(
'ZTZRZF', -info )
220 ELSE IF( lquery )
THEN
228 ELSE IF( m.EQ.n )
THEN
238 IF( nb.GT.1 .AND. nb.LT.m )
THEN
242 nx =
max( 0, ilaenv( 3,
'ZGERQF',
' ', m, n, -1, -1 ) )
249 IF( lwork.LT.iws )
THEN
255 nbmin =
max( 2, ilaenv( 2,
'ZGERQF',
' ', m, n, -1,
261 IF( nb.GE.nbmin .AND. nb.LT.m .AND. nx.LT.m )
THEN
267 ki = ( ( m-nx-1 ) / nb )*nb
270 DO 20 i = m - kk + ki + 1, m - kk + 1, -nb
271 ib =
min( m-i+1, nb )
276 CALL zlatrz( ib, n-i+1, n-m, a( i, i ), lda, tau( i ),
283 CALL zlarzt(
'Backward',
'Rowwise', n-m, ib, a( i, m1 ),
284 $ lda, tau( i ), work, ldwork )
288 CALL zlarzb(
'Right',
'No transpose',
'Backward',
289 $
'Rowwise', i-1, n-i+1, ib, n-m, a( i, m1 ),
290 $ lda, work, ldwork, a( 1, i ), lda,
291 $ work( ib+1 ), ldwork )
302 $
CALL zlatrz( mu, n, n-m, a, lda, tau, work )
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 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.
subroutine zlatrz(m, n, l, a, lda, tau, work)
ZLATRZ factors an upper trapezoidal matrix by means of unitary transformations.
subroutine ztzrzf(m, n, a, lda, tau, work, lwork, info)
ZTZRZF