212 SUBROUTINE zggrqf( M, P, N, A, LDA, TAUA, B, LDB, TAUB, WORK,
220 INTEGER INFO, LDA, , LWORK, M, N, P
223 COMPLEX*16 A( LDA, * ), B( LDB, * ), TAUA( * ), TAUB( * ),
231 INTEGER , LWKOPT, NB, NB1, NB2, NB3
248 nb1 = ilaenv( 1,
'ZGERQF',
' ', m, n, -1, -1 )
249 nb2 = ilaenv( 1,
'ZGEQRF',
' ', p, n, -1, -1 )
250 nb3 = ilaenv( 1,
'ZUNMRQ',
' ', m, n, p, -1 )
251 nb =
max( nb1, nb2, nb3 )
252 lwkopt =
max( n, m, p )*nb
254 lquery = ( lwork.EQ.-1 )
257 ELSE IF( p.LT.0 )
THEN
259 ELSE IF( n.LT.0 )
THEN
261 ELSE IF( lda.LT.
max( 1, m ) )
THEN
263 ELSE IF( ldb.LT.
max( 1, p ) )
THEN
265 ELSE IF( lwork.LT.
max( 1, m, p, n ) .AND. .NOT.lquery )
THEN
269 CALL xerbla(
'ZGGRQF', -info )
271 ELSE IF( lquery )
THEN
277 CALL zgerqf( m, n, a, lda, taua, work, lwork, info )
278 lopt = dble( work( 1 ) )
282 CALL zunmrq(
'Right',
'Conjugate Transpose', p, n,
min( m, n ),
283 $ a(
max( 1, m-n+1 ), 1 ), lda, taua, b, ldb, work,
285 lopt =
max( lopt, int( work( 1 ) ) )
289 CALL zgeqrf( p, n, b, ldb, taub, work, lwork, info )
290 work( 1 ) =
max( lopt, int( work( 1 ) ) )
subroutine zgerqf(m, n, a, lda, tau, work, lwork, info)
ZGERQF
subroutine zunmrq(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
ZUNMRQ
subroutine zggrqf(m, p, n, a, lda, taua, b, ldb, taub, work, lwork, info)
ZGGRQF
subroutine zgeqrf(m, n, a, lda, tau, work, lwork, info)
ZGEQRF VARIANT: left-looking Level 3 BLAS of the algorithm.