136 SUBROUTINE cgerqf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
143 INTEGER INFO, LDA, LWORK, M, N
146 COMPLEX A( LDA, * ), TAU( * ), WORK( * )
153 INTEGER I, IB, IINFO, IWS, K, KI, KK, LDWORK, LWKOPT,
154 $ MU, NB, NBMIN, NU, NX
165 EXTERNAL ilaenv, sroundup_lwork
172 lquery = ( lwork.EQ.-1 )
175 ELSE IF( n.LT.0 )
THEN
177 ELSE IF( lda.LT.max( 1, m ) )
THEN
186 nb = ilaenv( 1,
'CGERQF',
' ', m, n, -1, -1 )
189 work( 1 ) = sroundup_lwork(lwkopt)
191 IF ( .NOT.lquery )
THEN
192 IF( lwork.LE.0 .OR. ( n.GT.0 .AND. lwork.LT.max( 1, m ) ) )
198 CALL xerbla(
'CGERQF', -info )
200 ELSE IF( lquery )
THEN
213 IF( nb.GT.1 .AND. nb.LT.k )
THEN
217 nx = max( 0, ilaenv( 3,
'CGERQF',
' ', m, n, -1, -1 ) )
224 IF( lwork.LT.iws )
THEN
230 nbmin = max( 2, ilaenv( 2,
'CGERQF',
' ', m, n, -1,
236 IF( nb.GE.nbmin .AND. nb.LT.k .AND. nx.LT.k )
THEN
241 ki = ( ( k-nx-1 ) / nb )*nb
244 DO 10 i = k - kk + ki + 1, k - kk + 1, -nb
245 ib = min( k-i+1, nb )
250 CALL cgerq2( ib, n-k+i+ib-1, a( m-k+i, 1 ), lda,
253 IF( m-k+i.GT.1 )
THEN
258 CALL clarft(
'Backward',
'Rowwise', n-k+i+ib-1, ib,
259 $ a( m-k+i, 1 ), lda, tau( i ), work, ldwork )
263 CALL clarfb(
'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 IF( mu.GT.0 .AND. nu.GT.0 )
279 $
CALL cgerq2( mu, nu, a, lda, tau, work, iinfo )
281 work( 1 ) = sroundup_lwork(iws)
subroutine cgerq2(m, n, a, lda, tau, work, info)
CGERQ2 computes the RQ factorization of a general rectangular matrix using an unblocked algorithm.
subroutine cgerqf(m, n, a, lda, tau, work, lwork, info)
CGERQF
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.
recursive subroutine clarft(direct, storev, n, k, v, ldv, tau, t, ldt)
CLARFT forms the triangular factor T of a block reflector H = I - vtvH