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 cunmlq(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
CUNMLQ
subroutine cunmqr(SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, LWORK, INFO)
CUNMQR