150 SUBROUTINE ctzrzf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
157 INTEGER INFO, LDA, LWORK, , N
160 COMPLEX A( LDA, * ), TAU( * ), WORK( * )
167 parameter( zero = ( 0.0e+0, 0.0e+0 ) )
171 INTEGER I, IB, IWS, , 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,
'CGERQF',
' ', m, n, -1, -1 )
212 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN
218 CALL xerbla(
'CTZRZF', -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,
'CGERQF',
' ', m, n, -1, -1 ) )
249 IF( lwork.LT.iws )
THEN
255 nbmin =
max( 2, ilaenv( 2,
'CGERQF',
' ', 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 clatrz( ib, n-i+1, n-m, a( i, i ), lda, tau( i ),
283 CALL clarzt(
'Backward',
'Rowwise', n-m, ib, a( i, m1 ),
284 $ lda, tau( i ), work, ldwork )
288 CALL clarzb(
'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 clatrz( mu, n, n-m, a, lda, tau, work )
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 clatrz(m, n, l, a, lda, tau, work)
CLATRZ factors an upper trapezoidal matrix by means of unitary transformations.
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.
subroutine ctzrzf(m, n, a, lda, tau, work, lwork, info)
CTZRZF