147 SUBROUTINE zgeqrfp( M, N, A, LDA, TAU, WORK, LWORK, INFO )
154 INTEGER INFO, LDA, LWORK, M, N
157 COMPLEX*16 A( LDA, * ), TAU( * ), WORK( * )
164 INTEGER I, IB, IINFO, IWS, K, LDWORK, LWKMIN, LWKOPT,
182 nb = ilaenv( 1,
'ZGEQRF',
' ', m, n, -1, -1 )
193 lquery = ( lwork.EQ.-1 )
196 ELSE IF( n.LT.0 )
THEN
198 ELSE IF( lda.LT.max( 1, m ) )
THEN
200 ELSE IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN
204 CALL xerbla(
'ZGEQRFP', -info )
206 ELSE IF( lquery )
THEN
220 IF( nb.GT.1 .AND. nb.LT.k )
THEN
224 nx = max( 0, ilaenv( 3,
'ZGEQRF',
' ', m, n, -1, -1 ) )
231 IF( lwork.LT.iws )
THEN
237 nbmin = max( 2, ilaenv( 2,
'ZGEQRF',
' ', m, n, -1,
243 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN
247 DO 10 i = 1, k - nx, nb
248 ib = min( k-i+1, nb )
253 CALL zgeqr2p( m-i+1, ib, a( i, i ), lda, tau( i ), work,
260 CALL zlarft(
'Forward',
'Columnwise', m-i+1, ib,
261 $ a( i, i ), lda, tau( i ), work, ldwork )
265 CALL zlarfb(
'Left',
'Conjugate transpose',
'Forward',
266 $
'Columnwise', m-i+1, n-i-ib+1, ib,
267 $ a( i, i ), lda, work, ldwork, a( i, i+ib ),
268 $ lda, work( ib+1 ), ldwork )
278 $
CALL zgeqr2p( m-i+1, n-i+1, a( i, i ), lda, tau( i ), work,
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.
recursive subroutine zlarft(direct, storev, n, k, v, ldv, tau, t, ldt)
ZLARFT forms the triangular factor T of a block reflector H = I - vtvH