152 SUBROUTINE stzrzf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
160 INTEGER INFO, LDA, LWORK, M, N
163 REAL A( lda, * ), TAU( * ), WORK( * )
170 parameter( zero = 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,
'SGERQF',
' ', m, n, -1, -1 )
215 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN 221 CALL xerbla(
'STZRZF', -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,
'SGERQF',
' ', m, n, -1, -1 ) )
252 IF( lwork.LT.iws )
THEN 258 nbmin = max( 2, ilaenv( 2,
'SGERQF',
' ', 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 slatrz( ib, n-i+1, n-m, a( i, i ), lda, tau( i ),
286 CALL slarzt(
'Backward',
'Rowwise', n-m, ib, a( i, m1 ),
287 $ lda, tau( i ), work, ldwork )
291 CALL slarzb(
'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 slatrz( mu, n, n-m, a, lda, tau, work )
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 xerbla(SRNAME, INFO)
XERBLA
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.