148 SUBROUTINE sgeqrfp( M, N, A, LDA, TAU, WORK, LWORK, INFO )
155 INTEGER INFO, LDA, LWORK, M, N
158 REAL A( LDA, * ), TAU( * ), WORK( * )
165 INTEGER I, IB, IINFO, IWS, K, LDWORK, LWKOPT, NB,
177 EXTERNAL ilaenv, sroundup_lwork
184 nb = ilaenv( 1,
'SGEQRF',
' ', m, n, -1, -1 )
186 work( 1 ) = sroundup_lwork(lwkopt)
187 lquery = ( lwork.EQ.-1 )
190 ELSE IF( n.LT.0 )
THEN
192 ELSE IF( lda.LT.max( 1, m ) )
THEN
194 ELSE IF( lwork.LT.max( 1, n ) .AND. .NOT.lquery )
THEN
198 CALL xerbla(
'SGEQRFP', -info )
200 ELSE IF( lquery )
THEN
215 IF( nb.GT.1 .AND. nb.LT.k )
THEN
219 nx = max( 0, ilaenv( 3,
'SGEQRF',
' ', m, n, -1, -1 ) )
226 IF( lwork.LT.iws )
THEN
232 nbmin = max( 2, ilaenv( 2,
'SGEQRF',
' ', m, n, -1,
238 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN
242 DO 10 i = 1, k - nx, nb
243 ib = min( k-i+1, nb )
248 CALL sgeqr2p( m-i+1, ib, a( i, i ), lda, tau( i ), work,
255 CALL slarft(
'Forward',
'Columnwise', m-i+1, ib,
256 $ a( i, i ), lda, tau( i ), work, ldwork )
260 CALL slarfb(
'Left',
'Transpose',
'Forward',
261 $
'Columnwise', m-i+1, n-i-ib+1, ib,
262 $ a( i, i ), lda, work, ldwork, a( i, i+ib ),
263 $ lda, work( ib+1 ), ldwork )
273 $
CALL sgeqr2p( m-i+1, n-i+1, a( i, i ), lda, tau( i ), work,
276 work( 1 ) = sroundup_lwork(iws)
subroutine xerbla(srname, info)
subroutine sgeqr2p(m, n, a, lda, tau, work, info)
SGEQR2P computes the QR factorization of a general rectangular matrix with non-negative diagonal elem...
subroutine sgeqrfp(m, n, a, lda, tau, work, lwork, info)
SGEQRFP
subroutine slarfb(side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork)
SLARFB applies a block reflector or its transpose to a general rectangular matrix.
subroutine slarft(direct, storev, n, k, v, ldv, tau, t, ldt)
SLARFT forms the triangular factor T of a block reflector H = I - vtvH