158 SUBROUTINE cungbr( VECT, M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
167 INTEGER INFO, K, LDA, LWORK, M, N
170 COMPLEX A( lda, * ), TAU( * ), WORK( * )
177 parameter( zero = ( 0.0e+0, 0.0e+0 ),
178 $ one = ( 1.0e+0, 0.0e+0 ) )
181 LOGICAL LQUERY, WANTQ
182 INTEGER I, IINFO, J, LWKOPT, MN
187 EXTERNAL ilaenv, lsame
200 wantq = lsame( vect,
'Q' )
202 lquery = ( lwork.EQ.-1 )
203 IF( .NOT.wantq .AND. .NOT.lsame( vect,
'P' ) )
THEN
205 ELSE IF( m.LT.0 )
THEN
207 ELSE IF( n.LT.0 .OR. ( wantq .AND. ( n.GT.m .OR. n.LT.min( m,
208 $ k ) ) ) .OR. ( .NOT.wantq .AND. ( m.GT.n .OR. m.LT.
209 $ min( n, k ) ) ) )
THEN
211 ELSE IF( k.LT.0 )
THEN
213 ELSE IF( lda.LT.max( 1, m ) )
THEN
215 ELSE IF( lwork.LT.max( 1, mn ) .AND. .NOT.lquery )
THEN
223 CALL
cungqr( m, n, k, a, lda, tau, work, -1, iinfo )
226 CALL
cungqr( m-1, m-1, m-1, a( 2, 2 ), lda, tau, work,
232 CALL
cunglq( m, n, k, a, lda, tau, work, -1, iinfo )
235 CALL
cunglq( n-1, n-1, n-1, a( 2, 2 ), lda, tau, work,
241 lwkopt = max(lwkopt, mn)
245 CALL
xerbla(
'CUNGBR', -info )
247 ELSE IF( lquery )
THEN
254 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
268 CALL
cungqr( m, n, k, a, lda, tau, work, lwork, iinfo )
281 a( i, j ) = a( i, j-1 )
292 CALL
cungqr( m-1, m-1, m-1, a( 2, 2 ), lda, tau, work,
305 CALL
cunglq( m, n, k, a, lda, tau, work, lwork, iinfo )
320 DO 50 i = j - 1, 2, -1
321 a( i, j ) = a( i-1, j )
329 CALL
cunglq( n-1, n-1, n-1, a( 2, 2 ), lda, tau, work,
subroutine cungbr(VECT, M, N, K, A, LDA, TAU, WORK, LWORK, INFO)
CUNGBR
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cunglq(M, N, K, A, LDA, TAU, WORK, LWORK, INFO)
CUNGLQ
subroutine cungqr(M, N, K, A, LDA, TAU, WORK, LWORK, INFO)
CUNGQR