138 SUBROUTINE zgerqf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
145 INTEGER INFO, LDA, LWORK, M, N
148 COMPLEX*16 A( LDA, * ), TAU( * ), WORK( * )
155 INTEGER I, IB, IINFO, IWS, K, KI, KK, LDWORK, ,
156 $ MU, NB, NBMIN, NU, NX
173 lquery = ( lwork.EQ.-1 )
176 ELSE IF( n.LT.0 )
THEN
178 ELSE IF( lda.LT.
max( 1, m ) )
THEN
187 nb = ilaenv( 1,
'ZGERQF', '
', M, N, -1, -1 )
192.NOT.
IF ( LQUERY ) THEN
193.LE..OR..GT..AND..LT.
IF( LWORK0 ( N0 LWORKMAX( 1, M ) ) )
199 CALL XERBLA( 'zgerqf', -INFO )
201 ELSE IF( LQUERY ) THEN
214.GT..AND..LT.
IF( NB1 NBK ) THEN
218 NX = MAX( 0, ILAENV( 3, 'zgerqf', ' ', M, N, -1, -1 ) )
225.LT.
IF( LWORKIWS ) THEN
231 NBMIN = MAX( 2, ILAENV( 2, 'zgerqf', ' ', M, N, -1,
237.GE..AND..LT..AND..LT.
IF( NBNBMIN NBK NXK ) THEN
242 KI = ( ( K-NX-1 ) / NB )*NB
245 DO 10 I = K - KK + KI + 1, K - KK + 1, -NB
246 IB = MIN( K-I+1, NB )
251 CALL ZGERQ2( IB, N-K+I+IB-1, A( M-K+I, 1 ), LDA, TAU( I ),
253.GT.
IF( M-K+I1 ) THEN
258 CALL ZLARFT( 'backward
', 'rowwise
', N-K+I+IB-1, IB,
259 $ A( M-K+I, 1 ), LDA, TAU( I ), WORK, LDWORK )
263 CALL ZLARFB( 'right
', 'no transpose
', 'backward
',
264 $ 'rowwise
', M-K+I-1, N-K+I+IB-1, IB,
265 $ A( M-K+I, 1 ), LDA, WORK, LDWORK, A, LDA,
266 $ WORK( IB+1 ), LDWORK )
269 MU = M - K + I + NB - 1
270 NU = N - K + I + NB - 1
278.GT..AND..GT.
IF( MU0 NU0 )
279 $ CALL ZGERQ2( MU, NU, A, LDA, TAU, WORK, IINFO )
subroutine xerbla(srname, info)
XERBLA
subroutine zgerq2(m, n, a, lda, tau, work, info)
ZGERQ2 computes the RQ factorization of a general rectangular matrix using an unblocked algorithm.
subroutine zgerqf(m, n, a, lda, tau, work, lwork, info)
ZGERQF
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