138 SUBROUTINE dgerqf( M, N, A, LDA, TAU, WORK, LWORK, INFO )
145 INTEGER INFO, LDA, LWORK, M, N
148 DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
155 INTEGER I, , IINFO, IWS, K, KI, KK, LDWORK, LWKOPT,
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, '
dgerqf', ' ', M, N, -1, -1 )
192.NOT.
IF ( LQUERY ) THEN
193.LE..OR..GT..AND..LT.
IF( LWORK0 ( N0 LWORKMAX( 1, M ) ) )
199 CALL XERBLA( 'dgerqf', -INFO )
201 ELSE IF( LQUERY ) THEN
214.GT..AND..LT.
IF( NB1 NBK ) THEN
218 NX = MAX( 0, ILAENV( 3, 'dgerqf', '
', M, N, -1, -1 ) )
225.LT.
IF( LWORKIWS ) THEN
231 NBMIN = MAX( 2, ILAENV( 2, 'dgerqf', ' ', 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 DGERQ2( IB, N-K+I+IB-1, A( M-K+I, 1 ), LDA, TAU( I ),
253.GT.
IF( M-K+I1 ) THEN
258 CALL DLARFT( 'backward
', 'rowwise
', N-K+I+IB-1, IB,
259 $ A( M-K+I, 1 ), LDA, TAU( I ), WORK, LDWORK )
263 CALL DLARFB( '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 dgerq2( mu, nu, a, lda, tau, work, iinfo )
subroutine xerbla(srname, info)
XERBLA
subroutine dgerqf(m, n, a, lda, tau, work, lwork, info)
DGERQF
subroutine dgerq2(m, n, a, lda, tau, work, info)
DGERQ2 computes the RQ factorization of a general rectangular matrix using an unblocked algorithm.
subroutine dlarft(direct, storev, n, k, v, ldv, tau, t, ldt)
DLARFT forms the triangular factor T of a block reflector H = I - vtvH
subroutine dlarfb(side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork)
DLARFB applies a block reflector or its transpose to a general rectangular matrix.