144 SUBROUTINE cgeqrf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
151 INTEGER INFO, LDA, LWORK, M, N
154 COMPLEX A( LDA, * ), TAU( * ), WORK( * )
161 INTEGER I, IB, IINFO, IWS, K, LDWORK, LWKOPT, NB,
179 nb = ilaenv( 1,
'CGEQRF',
' ', 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( lwork.LT.max( 1, n ) .AND. .NOT.lquery )
THEN
193 CALL xerbla(
'CGEQRF', -info )
195 ELSE IF( lquery )
THEN
210 IF( nb.GT.1 .AND. nb.LT.k )
THEN
214 nx = max( 0, ilaenv( 3,
'CGEQRF',
' ', m, n, -1, -1 ) )
221 IF( lwork.LT.iws )
THEN
227 nbmin = max( 2, ilaenv( 2,
'CGEQRF',
' ', m, n, -1,
233 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN
237 DO 10 i = 1, k - nx, nb
238 ib = min( k-i+1, nb )
243 CALL cgeqr2( m-i+1, ib, a( i, i ), lda, tau( i ), work,
250 CALL clarft(
'Forward',
'Columnwise', m-i+1, ib,
251 $ a( i, i ), lda, tau( i ), work, ldwork )
255 CALL clarfb(
'Left',
'Conjugate transpose',
'Forward',
256 $
'Columnwise', m-i+1, n-i-ib+1, ib,
257 $ a( i, i ), lda, work, ldwork, a( i, i+ib ),
258 $ lda, work( ib+1 ), ldwork )
268 $
CALL cgeqr2( m-i+1, n-i+1, a( i, i ), lda, tau( i ), work,
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cgeqr2(M, N, A, LDA, TAU, WORK, INFO)
CGEQR2 computes the QR factorization of a general rectangular matrix using an unblocked algorithm.
subroutine cgeqrf(M, N, A, LDA, TAU, WORK, LWORK, INFO)
CGEQRF
subroutine clarfb(SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
CLARFB applies a block reflector or its conjugate-transpose to a general rectangular matrix.
subroutine clarft(DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT)
CLARFT forms the triangular factor T of a block reflector H = I - vtvH