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