148 SUBROUTINE zgeqrfp( M, N, A, LDA, TAU, WORK, LWORK, INFO )
155 INTEGER INFO, LDA, LWORK, M, N
158 COMPLEX*16 A( LDA, * ), TAU( * ), WORK( * )
165 INTEGER I, IB, IINFO, IWS, K, LDWORK, LWKOPT, NB,
183 nb = ilaenv( 1,
'ZGEQRF',
' ', m, n, -1, -1 )
186 lquery = ( lwork.EQ.-1 )
189 ELSE IF( n.LT.0 )
THEN
191 ELSE IF( lda.LT.max( 1, m ) )
THEN
193 ELSE IF( lwork.LT.max( 1, n ) .AND. .NOT.lquery )
THEN
197 CALL xerbla(
'ZGEQRFP', -info )
199 ELSE IF( lquery )
THEN
214 IF( nb.GT.1 .AND. nb.LT.k )
THEN
218 nx = max( 0, ilaenv( 3,
'ZGEQRF',
' ', m, n, -1, -1 ) )
225 IF( lwork.LT.iws )
THEN
231 nbmin = max( 2, ilaenv( 2,
'ZGEQRF',
' ', m, n, -1,
237 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN
241 DO 10 i = 1, k - nx, nb
242 ib = min( k-i+1, nb )
247 CALL zgeqr2p( m-i+1, ib, a( i, i ), lda, tau( i ), work,
254 CALL zlarft(
'Forward',
'Columnwise', m-i+1, ib,
255 $ a( i, i ), lda, tau( i ), work, ldwork )
259 CALL zlarfb(
'Left',
'Conjugate transpose',
'Forward',
260 $
'Columnwise', m-i+1, n-i-ib+1, ib,
261 $ a( i, i ), lda, work, ldwork, a( i, i+ib ),
262 $ lda, work( ib+1 ), ldwork )
272 $
CALL zgeqr2p( m-i+1, n-i+1, a( i, i ), lda, tau( i ), work,
subroutine xerbla(srname, info)
subroutine zgeqr2p(m, n, a, lda, tau, work, info)
ZGEQR2P computes the QR factorization of a general rectangular matrix with non-negative diagonal elem...
subroutine zgeqrfp(m, n, a, lda, tau, work, lwork, info)
ZGEQRFP
subroutine zlarfb(side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork)
ZLARFB applies a block reflector or its conjugate-transpose to a general rectangular matrix.
subroutine zlarft(direct, storev, n, k, v, ldv, tau, t, ldt)
ZLARFT forms the triangular factor T of a block reflector H = I - vtvH