147 SUBROUTINE dgeqrfp( M, N, A, LDA, TAU, WORK, LWORK, INFO )
154 INTEGER INFO, LDA, LWORK, M, N
157 DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
164 INTEGER I, IB, IINFO, IWS, K, LDWORK, LWKMIN, LWKOPT,
182 nb = ilaenv( 1,
'DGEQRF',
' ', m, n, -1, -1 )
193 lquery = ( lwork.EQ.-1 )
196 ELSE IF( n.LT.0 )
THEN
198 ELSE IF( lda.LT.max( 1, m ) )
THEN
200 ELSE IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN
204 CALL xerbla(
'DGEQRFP', -info )
206 ELSE IF( lquery )
THEN
220 IF( nb.GT.1 .AND. nb.LT.k )
THEN
224 nx = max( 0, ilaenv( 3,
'DGEQRF',
' ', m, n, -1, -1 ) )
231 IF( lwork.LT.iws )
THEN
237 nbmin = max( 2, ilaenv( 2,
'DGEQRF',
' ', m, n, -1,
243 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN
247 DO 10 i = 1, k - nx, nb
248 ib = min( k-i+1, nb )
253 CALL dgeqr2p( m-i+1, ib, a( i, i ), lda, tau( i ), work,
260 CALL dlarft(
'Forward',
'Columnwise', m-i+1, ib,
261 $ a( i, i ), lda, tau( i ), work, ldwork )
265 CALL dlarfb(
'Left',
'Transpose',
'Forward',
266 $
'Columnwise', m-i+1, n-i-ib+1, ib,
267 $ a( i, i ), lda, work, ldwork, a( i, i+ib ),
268 $ lda, work( ib+1 ), ldwork )
278 $
CALL dgeqr2p( m-i+1, n-i+1, a( i, i ), lda, tau( i ), work,
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.
recursive subroutine dlarft(direct, storev, n, k, v, ldv, tau, t, ldt)
DLARFT forms the triangular factor T of a block reflector H = I - vtvH