152 SUBROUTINE ctzrzf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
160 INTEGER INFO, LDA, LWORK, M, N
163 COMPLEX A( lda, * ), TAU( * ), WORK( * )
170 parameter( zero = ( 0.0e+0, 0.0e+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,
'CGERQF',
' ', m, n, -1, -1 )
215 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN 221 CALL xerbla(
'CTZRZF', -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,
'CGERQF',
' ', m, n, -1, -1 ) )
252 IF( lwork.LT.iws )
THEN 258 nbmin = max( 2, ilaenv( 2,
'CGERQF',
' ', 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 clatrz( ib, n-i+1, n-m, a( i, i ), lda, tau( i ),
286 CALL clarzt(
'Backward',
'Rowwise', n-m, ib, a( i, m1 ),
287 $ lda, tau( i ), work, ldwork )
291 CALL clarzb(
'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 clatrz( mu, n, n-m, a, lda, tau, work )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine clatrz(M, N, L, A, LDA, TAU, WORK)
CLATRZ factors an upper trapezoidal matrix by means of unitary transformations.
subroutine clarzt(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
CLARZT forms the triangular factor T of a block reflector H = I - vtvH.
subroutine ctzrzf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
CTZRZF
subroutine clarzb(SIDE, TRANS, DIRECT, STOREV, M, N, K, L, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
CLARZB applies a block reflector or its conjugate-transpose to a general matrix.