1 SUBROUTINE dgelqf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
9 INTEGER INFO, LDA, LWORK, M, N
12 DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
81 INTEGER I, IB, IINFO, IWS, K, LDWORK, LWKOPT, NB,
99 nb = ilaenv( 1,
'DGELQF',
' ', m, n, -1, -1 )
102 lquery = ( lwork.EQ.-1 )
105 ELSE IF( n.LT.0 )
THEN
107 ELSE IF( lda.LT.max( 1, m ) )
THEN
109 ELSE IF( lwork.LT.max( 1, m ) .AND. .NOT.lquery )
THEN
113 CALL xerbla(
'DGELQF', -info )
115 ELSE IF( lquery )
THEN
130 IF( nb.GT.1 .AND. nb.LT.k )
THEN
134 nx = max( 0, ilaenv( 3,
'DGELQF',
' ', m, n, -1, -1 ) )
141 IF( lwork.LT.iws )
THEN
147 nbmin = max( 2, ilaenv( 2,
'DGELQF',
' ', m, n, -1,
153 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN
157 DO 10 i = 1, k - nx, nb
158 ib = min( k-i+1, nb )
163 CALL dgelq2( ib, n-i+1, a( i, i ), lda, tau( i ), work,
170 CALL dlarft(
'Forward',
'Rowwise', n-i+1, ib, a( i, i ),
171 $ lda, tau( i ), work, ldwork )
175 CALL dlarfb(
'Right',
'No transpose',
'Forward',
176 $
'Rowwise', m-i-ib+1, n-i+1, ib, a( i, i ),
177 $ lda, work, ldwork, a( i+ib, i ), lda,
178 $ work( ib+1 ), ldwork )
188 $
CALL dgelq2( m-i+1, n-i+1, a( i, i ), lda, tau( i ), work,
subroutine dgelq2(M, N, A, LDA, TAU, WORK, INFO)
subroutine dgelqf(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)