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 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 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 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.