148 SUBROUTINE dgeqrfp( M, N, A, LDA, TAU, WORK, LWORK, INFO )
155 INTEGER INFO, LDA, LWORK, M, N
158 DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
165 INTEGER I, IB, IINFO, IWS, K, LDWORK, LWKOPT, NB,
183 nb = ilaenv( 1,
'DGEQRF',
' ', m, n, -1, -1 )
186 lquery = ( lwork.EQ.-1 )
189 ELSE IF( n.LT.0 )
THEN
191 ELSE IF( lda.LT.max( 1, m ) )
THEN
193 ELSE IF( lwork.LT.max( 1, n ) .AND. .NOT.lquery )
THEN
197 CALL xerbla(
'DGEQRFP', -info )
199 ELSE IF( lquery )
THEN
214 IF( nb.GT.1 .AND. nb.LT.k )
THEN
218 nx = max( 0, ilaenv( 3,
'DGEQRF',
' ', m, n, -1, -1 ) )
225 IF( lwork.LT.iws )
THEN
231 nbmin = max( 2, ilaenv( 2,
'DGEQRF',
' ', m, n, -1,
237 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN
241 DO 10 i = 1, k - nx, nb
242 ib = min( k-i+1, nb )
247 CALL dgeqr2p( m-i+1, ib, a( i, i ), lda, tau( i ), work,
254 CALL dlarft(
'Forward',
'Columnwise', m-i+1, ib,
255 $ a( i, i ), lda, tau( i ), work, ldwork )
259 CALL dlarfb(
'Left',
'Transpose',
'Forward',
260 $
'Columnwise', m-i+1, n-i-ib+1, ib,
261 $ a( i, i ), lda, work, ldwork, a( i, i+ib ),
262 $ lda, work( ib+1 ), ldwork )
272 $
CALL dgeqr2p( m-i+1, n-i+1, a( i, i ), lda, tau( i ), work,
subroutine xerbla(srname, info)
subroutine dgeqr2p(m, n, a, lda, tau, work, info)
DGEQR2P computes the QR factorization of a general rectangular matrix with non-negative diagonal elem...
subroutine dgeqrfp(m, n, a, lda, tau, work, lwork, info)
DGEQRFP
subroutine dlarfb(side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork)
DLARFB applies a block reflector or its transpose to a general rectangular matrix.
subroutine dlarft(direct, storev, n, k, v, ldv, tau, t, ldt)
DLARFT forms the triangular factor T of a block reflector H = I - vtvH