137 SUBROUTINE dgeqrf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
145 INTEGER INFO, LDA, LWORK, M, N
148 DOUBLE PRECISION A( lda, * ), TAU( * ), WORK( * )
155 INTEGER I, IB, IINFO, IWS, K, LDWORK, LWKOPT, NB,
173 nb = ilaenv( 1,
'DGEQRF',
' ', m, n, -1, -1 )
176 lquery = ( lwork.EQ.-1 )
179 ELSE IF( n.LT.0 )
THEN 181 ELSE IF( lda.LT.max( 1, m ) )
THEN 183 ELSE IF( lwork.LT.max( 1, n ) .AND. .NOT.lquery )
THEN 187 CALL xerbla(
'DGEQRF', -info )
189 ELSE IF( lquery )
THEN 204 IF( nb.GT.1 .AND. nb.LT.k )
THEN 208 nx = max( 0, ilaenv( 3,
'DGEQRF',
' ', m, n, -1, -1 ) )
215 IF( lwork.LT.iws )
THEN 221 nbmin = max( 2, ilaenv( 2,
'DGEQRF',
' ', m, n, -1,
227 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN 231 DO 10 i = 1, k - nx, nb
232 ib = min( k-i+1, nb )
237 CALL dgeqr2( m-i+1, ib, a( i, i ), lda, tau( i ), work,
244 CALL dlarft(
'Forward',
'Columnwise', m-i+1, ib,
245 $ a( i, i ), lda, tau( i ), work, ldwork )
249 CALL dlarfb(
'Left',
'Transpose',
'Forward',
250 $
'Columnwise', m-i+1, n-i-ib+1, ib,
251 $ a( i, i ), lda, work, ldwork, a( i, i+ib ),
252 $ lda, work( ib+1 ), ldwork )
262 $
CALL dgeqr2( m-i+1, n-i+1, a( i, i ), lda, tau( i ), work,
subroutine dgeqr2(M, N, A, LDA, TAU, WORK, INFO)
DGEQR2 computes the QR factorization of a general rectangular matrix using an unblocked algorithm...
subroutine dlarft(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
DLARFT forms the triangular factor T of a block reflector H = I - vtvH
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dgeqrf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
DGEQRF
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.