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
199 wantq = lsame( vect,
'Q' )
201 lquery = ( lwork.EQ.-1 )
202 IF( .NOT.wantq .AND. .NOT.lsame( vect,
'P' ) )
THEN
204 ELSE IF( m.LT.0 )
THEN
206 ELSE IF( n.LT.0 .OR. ( wantq .AND. ( n.GT.m .OR. n.LT.min( m,
207 $ k ) ) ) .OR. ( .NOT.wantq .AND. ( m.GT.n .OR. m.LT.
208 $ min( n, k ) ) ) )
THEN
210 ELSE IF( k.LT.0 )
THEN
212 ELSE IF( lda.LT.max( 1, m ) )
THEN
214 ELSE IF( lwork.LT.max( 1, mn ) .AND. .NOT.lquery )
THEN
222 CALL cungqr( m, n, k, a, lda, tau, work, -1, iinfo )
225 CALL cungqr( m-1, m-1, m-1, a( 2, 2 ), lda, tau, work,
231 CALL cunglq( m, n, k, a, lda, tau, work, -1, iinfo )
234 CALL cunglq( n-1, n-1, n-1, a( 2, 2 ), lda, tau, work,
240 lwkopt = max(lwkopt, mn)
244 CALL xerbla(
'CUNGBR', -info )
246 ELSE IF( lquery )
THEN
253 IF( m.EQ.0 .OR. n.EQ.0 )
THEN
267 CALL cungqr( m, n, k, a, lda, tau, work, lwork, iinfo )
280 a( i, j ) = a( i, j-1 )
291 CALL cungqr( m-1, m-1, m-1, a( 2, 2 ), lda, tau, work,
304 CALL cunglq( m, n, k, a, lda, tau, work, lwork, iinfo )
319 DO 50 i = j - 1, 2, -1
320 a( i, j ) = a( i-1, j )
328 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 cungqr(M, N, K, A, LDA, TAU, WORK, LWORK, INFO)
CUNGQR
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cunglq(M, N, K, A, LDA, TAU, WORK, LWORK, INFO)
CUNGLQ