195 SUBROUTINE cunmbr( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C,
196 $ LDC, WORK, LWORK, INFO )
203 CHARACTER SIDE, TRANS, VECT
204 INTEGER INFO, K, LDA, LDC, LWORK, M, N
207 COMPLEX A( lda, * ), C( ldc, * ), TAU( * ),
214 LOGICAL APPLYQ, LEFT, LQUERY, NOTRAN
216 INTEGER I1, I2, IINFO, LWKOPT, MI, NB, NI, NQ, NW
221 EXTERNAL ilaenv, lsame
234 applyq = lsame( vect,
'Q' )
235 left = lsame( side,
'L' )
236 notran = lsame( trans,
'N' )
237 lquery = ( lwork.EQ.-1 )
248 IF( .NOT.applyq .AND. .NOT.lsame( vect,
'P' ) )
THEN 250 ELSE IF( .NOT.left .AND. .NOT.lsame( side,
'R' ) )
THEN 252 ELSE IF( .NOT.notran .AND. .NOT.lsame( trans,
'C' ) )
THEN 254 ELSE IF( m.LT.0 )
THEN 256 ELSE IF( n.LT.0 )
THEN 258 ELSE IF( k.LT.0 )
THEN 260 ELSE IF( ( applyq .AND. lda.LT.max( 1, nq ) ) .OR.
261 $ ( .NOT.applyq .AND. lda.LT.max( 1, min( nq, k ) ) ) )
264 ELSE IF( ldc.LT.max( 1, m ) )
THEN 266 ELSE IF( lwork.LT.nw .AND. .NOT.lquery )
THEN 271 IF( m.GT.0 .AND. n.GT.0 )
THEN 274 nb = ilaenv( 1,
'CUNMQR', side // trans, m-1, n, m-1,
277 nb = ilaenv( 1,
'CUNMQR', side // trans, m, n-1, n-1,
282 nb = ilaenv( 1,
'CUNMLQ', side // trans, m-1, n, m-1,
285 nb = ilaenv( 1,
'CUNMLQ', side // trans, m, n-1, n-1,
297 CALL xerbla(
'CUNMBR', -info )
299 ELSE IF( lquery )
THEN 305 IF( m.EQ.0 .OR. n.EQ.0 )
316 CALL cunmqr( side, trans, m, n, k, a, lda, tau, c, ldc,
317 $ work, lwork, iinfo )
318 ELSE IF( nq.GT.1 )
THEN 333 CALL cunmqr( side, trans, mi, ni, nq-1, a( 2, 1 ), lda, tau,
334 $ c( i1, i2 ), ldc, work, lwork, iinfo )
349 CALL cunmlq( side, transt, m, n, k, a, lda, tau, c, ldc,
350 $ work, lwork, iinfo )
351 ELSE IF( nq.GT.1 )
THEN 366 CALL cunmlq( side, transt, mi, ni, nq-1, a( 1, 2 ), lda,
367 $ tau, c( i1, i2 ), ldc, work, lwork, iinfo )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cunmbr(VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
CUNMBR
subroutine cunmqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
CUNMQR
subroutine cunmlq(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
CUNMLQ