1 SUBROUTINE dgeqrf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
9 INTEGER INFO, LDA, LWORK, M, N
12 DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
82 INTEGER I, IB, IINFO, IWS, K, LDWORK, LWKOPT, NB,
100 nb = ilaenv( 1,
'DGEQRF',
' ', m, n, -1, -1 )
103 lquery = ( lwork.EQ.-1 )
106 ELSE IF( n.LT.0 )
THEN
108 ELSE IF( lda.LT.max( 1, m ) )
THEN
110 ELSE IF( lwork.LT.max( 1, n ) .AND. .NOT.lquery )
THEN
114 CALL xerbla(
'DGEQRF', -info )
116 ELSE IF( lquery )
THEN
131 IF( nb.GT.1 .AND. nb.LT.k )
THEN
135 nx = max( 0, ilaenv( 3,
'DGEQRF',
' ', m, n, -1, -1 ) )
142 IF( lwork.LT.iws )
THEN
148 nbmin = max( 2, ilaenv( 2,
'DGEQRF',
' ', m, n, -1,
154 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN
158 DO 10 i = 1, k - nx, nb
159 ib = min( k-i+1, nb )
164 CALL dgeqr2( m-i+1, ib, a( i, i ), lda, tau( i ), work,
171 CALL dlarft(
'Forward',
'Columnwise', m-i+1, ib,
172 $ a( i, i ), lda, tau( i ), work, ldwork )
176 CALL dlarfb(
'Left',
'Transpose',
'Forward',
177 $
'Columnwise', m-i+1, n-i-ib+1, ib,
178 $ a( i, i ), lda, work, ldwork, a( i, i+ib ),
179 $ lda, work( ib+1 ), ldwork )
189 $
CALL dgeqr2( m-i+1, n-i+1, a( i, i ), lda, tau( i ), work,
subroutine dgeqr2(M, N, A, LDA, TAU, WORK, INFO)
subroutine dgeqrf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
subroutine dlarfb(SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
subroutine dlarft(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
subroutine xerbla(SRNAME, INFO)