148 SUBROUTINE cgeqrfp( M, N, A, LDA, TAU, WORK, LWORK, INFO )
155 INTEGER INFO, LDA, LWORK, M, N
158 COMPLEX A( LDA, * ), TAU( * ), WORK( * )
165 INTEGER I, IB, IINFO, IWS, K, LDWORK, LWKOPT, NB,
177 EXTERNAL ilaenv, sroundup_lwork
184 nb = ilaenv( 1,
'CGEQRF',
' ', m, n, -1, -1 )
186 work( 1 ) = sroundup_lwork(lwkopt)
187 lquery = ( lwork.EQ.-1 )
190 ELSE IF( n.LT.0 )
THEN
192 ELSE IF( lda.LT.max( 1, m ) )
THEN
194 ELSE IF( lwork.LT.max( 1, n ) .AND. .NOT.lquery )
THEN
198 CALL xerbla(
'CGEQRFP', -info )
200 ELSE IF( lquery )
THEN
215 IF( nb.GT.1 .AND. nb.LT.k )
THEN
219 nx = max( 0, ilaenv( 3,
'CGEQRF',
' ', m, n, -1, -1 ) )
226 IF( lwork.LT.iws )
THEN
232 nbmin = max( 2, ilaenv( 2,
'CGEQRF',
' ', m, n, -1,
238 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN
242 DO 10 i = 1, k - nx, nb
243 ib = min( k-i+1, nb )
248 CALL cgeqr2p( m-i+1, ib, a( i, i ), lda, tau( i ), work,
255 CALL clarft(
'Forward',
'Columnwise', m-i+1, ib,
256 $ a( i, i ), lda, tau( i ), work, ldwork )
260 CALL clarfb(
'Left',
'Conjugate transpose',
'Forward',
261 $
'Columnwise', m-i+1, n-i-ib+1, ib,
262 $ a( i, i ), lda, work, ldwork, a( i, i+ib ),
263 $ lda, work( ib+1 ), ldwork )
273 $
CALL cgeqr2p( m-i+1, n-i+1, a( i, i ), lda, tau( i ), work,
276 work( 1 ) = sroundup_lwork(iws)
subroutine xerbla(srname, info)
subroutine cgeqr2p(m, n, a, lda, tau, work, info)
CGEQR2P computes the QR factorization of a general rectangular matrix with non-negative diagonal elem...
subroutine cgeqrfp(m, n, a, lda, tau, work, lwork, info)
CGEQRFP
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