210 SUBROUTINE cggrqf( M, P, N, A, LDA, TAUA, B, LDB, TAUB, WORK,
218 INTEGER INFO, LDA, LDB, LWORK, M, N, P
221 COMPLEX A( LDA, * ), B( LDB, * ), TAUA( * ), TAUB( * ),
229 INTEGER LOPT, LWKOPT, NB, NB1, NB2, NB3
237 EXTERNAL ilaenv, sroundup_lwork
240 INTRINSIC int, max, min
247 nb1 = ilaenv( 1,
'CGERQF',
' ', m, n, -1, -1 )
248 nb2 = ilaenv( 1,
'CGEQRF',
' ', p, n, -1, -1 )
249 nb3 = ilaenv( 1,
'CUNMRQ',
' ', m, n, p, -1 )
250 nb = max( nb1, nb2, nb3 )
251 lwkopt = max( 1, max( n, m, p )*nb )
252 work( 1 ) = sroundup_lwork( lwkopt )
253 lquery = ( lwork.EQ.-1 )
256 ELSE IF( p.LT.0 )
THEN
258 ELSE IF( n.LT.0 )
THEN
260 ELSE IF( lda.LT.max( 1, m ) )
THEN
262 ELSE IF( ldb.LT.max( 1, p ) )
THEN
264 ELSE IF( lwork.LT.max( 1, m, p, n ) .AND. .NOT.lquery )
THEN
268 CALL xerbla(
'CGGRQF', -info )
270 ELSE IF( lquery )
THEN
276 CALL cgerqf( m, n, a, lda, taua, work, lwork, info )
277 lopt = int( work( 1 ) )
281 CALL cunmrq(
'Right',
'Conjugate Transpose', p, n, min( m, n ),
282 $ a( max( 1, m-n+1 ), 1 ), lda, taua, b, ldb, work,
284 lopt = max( lopt, int( work( 1 ) ) )
288 CALL cgeqrf( p, n, b, ldb, taub, work, lwork, info )
289 work( 1 ) = sroundup_lwork( max( lopt, int( work( 1 ) ) ) )
subroutine cgeqrf(m, n, a, lda, tau, work, lwork, info)
CGEQRF
subroutine cgerqf(m, n, a, lda, tau, work, lwork, info)
CGERQF
subroutine cggrqf(m, p, n, a, lda, taua, b, ldb, taub, work, lwork, info)
CGGRQF
subroutine cunmrq(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
CUNMRQ