213 SUBROUTINE zggqrf( N, M, P, A, LDA, TAUA, B, LDB, TAUB, WORK,
221 INTEGER INFO, LDA, LDB, LWORK, M, N, P
224 COMPLEX*16 A( LDA, * ), B( LDB, * ), TAUA( * ), TAUB( * ),
232 INTEGER LOPT, LWKOPT, NB, NB1, NB2, NB3
242 INTRINSIC int, max, min
249 nb1 = ilaenv( 1,
'ZGEQRF',
' ', n, m, -1, -1 )
250 nb2 = ilaenv( 1,
'ZGERQF',
' ', n, p, -1, -1 )
251 nb3 = ilaenv( 1,
'ZUNMQR',
' ', n, m, p, -1 )
252 nb = max( nb1, nb2, nb3 )
253 lwkopt = max( n, m, p )*nb
255 lquery = ( lwork.EQ.-1 )
258 ELSE IF( m.LT.0 )
THEN
260 ELSE IF( p.LT.0 )
THEN
262 ELSE IF( lda.LT.max( 1, n ) )
THEN
264 ELSE IF( ldb.LT.max( 1, n ) )
THEN
266 ELSE IF( lwork.LT.max( 1, n, m, p ) .AND. .NOT.lquery )
THEN
270 CALL xerbla(
'ZGGQRF', -info )
272 ELSE IF( lquery )
THEN
278 CALL zgeqrf( n, m, a, lda, taua, work, lwork, info )
279 lopt = int( work( 1 ) )
283 CALL zunmqr(
'Left',
'Conjugate Transpose', n, p, min( n, m ), a,
284 $ lda, taua, b, ldb, work, lwork, info )
285 lopt = max( lopt, int( work( 1 ) ) )
289 CALL zgerqf( n, p, b, ldb, taub, work, lwork, info )
290 work( 1 ) = max( lopt, int( work( 1 ) ) )
subroutine xerbla(srname, info)
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