150 SUBROUTINE stzrzf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
157 INTEGER INFO, LDA, LWORK, M, N
160 REAL A( LDA, * ), TAU( * ), WORK( * )
167 parameter( zero = 0.0e+0 )
171 INTEGER I, 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,
'SGERQF',
' ', m, n, -1, -1 )
212 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN
218 CALL xerbla(
'STZRZF', -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,
'SGERQF',
' ', m, n, -1, -1 ) )
249 IF( lwork.LT.iws )
THEN
255 nbmin = max( 2, ilaenv( 2,
'SGERQF',
' ', 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 slatrz( ib, n-i+1, n-m, a( i, i ), lda, tau( i ),
283 CALL slarzt(
'Backward',
'Rowwise', n-m, ib, a( i, m1 ),
284 $ lda, tau( i ), work, ldwork )
288 CALL slarzb(
'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 slatrz( mu, n, n-m, a, lda, tau, work )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine slatrz(M, N, L, A, LDA, TAU, WORK)
SLATRZ factors an upper trapezoidal matrix by means of orthogonal transformations.
subroutine slarzb(SIDE, TRANS, DIRECT, STOREV, M, N, K, L, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
SLARZB applies a block reflector or its transpose to a general matrix.
subroutine stzrzf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
STZRZF
subroutine slarzt(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
SLARZT forms the triangular factor T of a block reflector H = I - vtvH.