211 SUBROUTINE zggqrf( N, M, P, A, LDA, TAUA, B, LDB, TAUB, WORK,
219 INTEGER INFO, LDA, LDB, LWORK, M, N, P
222 COMPLEX*16 A( LDA, * ), B( LDB, * ), TAUA( * ), TAUB( * ),
230 INTEGER LOPT, LWKOPT, NB, NB1, NB2, NB3
240 INTRINSIC int, max, min
247 nb1 = ilaenv( 1,
'ZGEQRF',
' ', n, m, -1, -1 )
248 nb2 = ilaenv( 1,
'ZGERQF',
' ', n, p, -1, -1 )
249 nb3 = ilaenv( 1,
'ZUNMQR',
' ', n, m, p, -1 )
250 nb = max( nb1, nb2, nb3 )
251 lwkopt = max( 1, max( n, m, p )*nb )
253 lquery = ( lwork.EQ.-1 )
256 ELSE IF( m.LT.0 )
THEN
258 ELSE IF( p.LT.0 )
THEN
260 ELSE IF( lda.LT.max( 1, n ) )
THEN
262 ELSE IF( ldb.LT.max( 1, n ) )
THEN
264 ELSE IF( lwork.LT.max( 1, n, m, p ) .AND. .NOT.lquery )
THEN
268 CALL xerbla(
'ZGGQRF', -info )
270 ELSE IF( lquery )
THEN
276 CALL zgeqrf( n, m, a, lda, taua, work, lwork, info )
277 lopt = int( work( 1 ) )
281 CALL zunmqr(
'Left',
'Conjugate Transpose', n, p, min( n, m ),
283 $ lda, taua, b, ldb, work, lwork, info )
284 lopt = max( lopt, int( work( 1 ) ) )
288 CALL zgerqf( n, p, b, ldb, taub, work, lwork, info )
289 work( 1 ) = max( lopt, int( work( 1 ) ) )
subroutine zgeqrf(m, n, a, lda, tau, work, lwork, info)
ZGEQRF
subroutine zgerqf(m, n, a, lda, tau, work, lwork, info)
ZGERQF
subroutine zggqrf(n, m, p, a, lda, taua, b, ldb, taub, work, lwork, info)
ZGGQRF
subroutine zunmqr(side, trans, m, n, k, a, lda, tau, c, ldc, work, lwork, info)
ZUNMQR