145 SUBROUTINE dgeqrf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
152 INTEGER INFO, LDA, LWORK, M, N
155 DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
162 INTEGER I, IB, , IWS, K, LDWORK
181 nb = ilaenv( 1,
'DGEQRF',
' ', m, n, -1, -1 )
182 lquery = ( lwork.EQ.-1 )
185 ELSE IF( n.LT.0 )
THEN
187 ELSE IF( lda.LT.
max( 1, m ) )
THEN
189 ELSE IF( .NOT.lquery )
THEN
194 CALL xerbla(
'DGEQRF', -info )
216 IF( nb.GT.1 .AND. nb.LT.k )
THEN
220 nx =
max( 0, ilaenv( 3,
'DGEQRF',
' ', m, n, -1, -1 ) )
227 IF( lwork.LT.iws )
THEN
233 nbmin =
max( 2, ilaenv( 2, '
dgeqrf', ' ', M, N, -1,
239.GE..AND..LT..AND..LT.
IF( NBNBMIN NBK NXK ) THEN
243 DO 10 I = 1, K - NX, NB
244 IB = MIN( K-I+1, NB )
249 CALL DGEQR2( M-I+1, IB, A( I, I ), LDA, TAU( I ), WORK,
256 CALL DLARFT( 'forward
', 'columnwise
', M-I+1, IB,
257 $ A( I, I ), LDA, TAU( I ), WORK, LDWORK )
261 CALL DLARFB( 'left
', 'transpose
', 'forward
',
262 $ 'columnwise
', M-I+1, N-I-IB+1, IB,
263 $ A( I, I ), LDA, WORK, LDWORK, A( I, I+IB ),
264 $ LDA, WORK( IB+1 ), LDWORK )
274 $ CALL DGEQR2( M-I+1, N-I+1, A( I, I ), LDA, TAU( I ), WORK,
subroutine xerbla(srname, info)
XERBLA
subroutine dgeqr2(m, n, a, lda, tau, work, info)
DGEQR2 computes the QR factorization of a general rectangular matrix using an unblocked algorithm.
subroutine dgeqrf(m, n, a, lda, tau, work, lwork, info)
DGEQRF
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 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.