154      SUBROUTINE cungbr( VECT, M, N, K, A, LDA, TAU, WORK, LWORK,
 
  163      INTEGER            INFO, K, LDA, LWORK, M, N
 
  166      COMPLEX            A( LDA, * ), TAU( * ), WORK( * )
 
  173      parameter( zero = ( 0.0e+0, 0.0e+0 ),
 
  174     $                   one = ( 1.0e+0, 0.0e+0 ) )
 
  177      LOGICAL            LQUERY, WANTQ
 
  178      INTEGER            I, IINFO, J, LWKOPT, MN
 
  183      EXTERNAL           lsame, sroundup_lwork
 
  196      wantq = lsame( vect, 
'Q' )
 
  198      lquery = ( lwork.EQ.-1 )
 
  199      IF( .NOT.wantq .AND. .NOT.lsame( vect, 
'P' ) ) 
THEN 
  201      ELSE IF( m.LT.0 ) 
THEN 
  203      ELSE IF( n.LT.0 .OR. ( wantq .AND. ( n.GT.m .OR. n.LT.min( m,
 
  204     $         k ) ) ) .OR. ( .NOT.wantq .AND. ( m.GT.n .OR. m.LT.
 
  205     $         min( n, k ) ) ) ) 
THEN 
  207      ELSE IF( k.LT.0 ) 
THEN 
  209      ELSE IF( lda.LT.max( 1, m ) ) 
THEN 
  211      ELSE IF( lwork.LT.max( 1, mn ) .AND. .NOT.lquery ) 
THEN 
  219               CALL cungqr( m, n, k, a, lda, tau, work, -1, iinfo )
 
  222                  CALL cungqr( m-1, m-1, m-1, a, lda, tau, work, -1,
 
  228               CALL cunglq( m, n, k, a, lda, tau, work, -1, iinfo )
 
  231                  CALL cunglq( n-1, n-1, n-1, a, lda, tau, work, -1,
 
  236         lwkopt = int( work( 1 ) )
 
  237         lwkopt = max(lwkopt, mn)
 
  241         CALL xerbla( 
'CUNGBR', -info )
 
  243      ELSE IF( lquery ) 
THEN 
  244         work( 1 ) = sroundup_lwork(lwkopt)
 
  250      IF( m.EQ.0 .OR. n.EQ.0 ) 
THEN 
  264            CALL cungqr( m, n, k, a, lda, tau, work, lwork, iinfo )
 
  277                  a( i, j ) = a( i, j-1 )
 
  288               CALL cungqr( m-1, m-1, m-1, a( 2, 2 ), lda, tau, work,
 
  301            CALL cunglq( m, n, k, a, lda, tau, work, lwork, iinfo )
 
  316               DO 50 i = j - 1, 2, -1
 
  317                  a( i, j ) = a( i-1, j )
 
  325               CALL cunglq( n-1, n-1, n-1, a( 2, 2 ), lda, tau, work,
 
  330      work( 1 ) = sroundup_lwork(lwkopt)