172 SUBROUTINE cgemqr( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
173 $ C, LDC, WORK, LWORK, INFO )
180 CHARACTER SIDE, TRANS
181 INTEGER INFO, LDA, M, N, K, TSIZE, LWORK, LDC
184 COMPLEX A( LDA, * ), T( * ), C( LDC, * ), WORK( * )
191 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
192 INTEGER MB, NB, LW, NBLCKS, MN
202 INTRINSIC int, max, min, mod
209 notran = lsame( trans,
'N' )
210 tran = lsame( trans,
'C' )
211 left = lsame( side,
'L' )
212 right = lsame( side,
'R' )
224 IF( ( mb.GT.k ) .AND. ( mn.GT.k ) )
THEN
225 IF( mod( mn - k, mb - k ).EQ.0 )
THEN
226 nblcks = ( mn - k ) / ( mb - k )
228 nblcks = ( mn - k ) / ( mb - k ) + 1
235 IF( .NOT.left .AND. .NOT.right )
THEN
237 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
239 ELSE IF( m.LT.0 )
THEN
241 ELSE IF( n.LT.0 )
THEN
243 ELSE IF( k.LT.0 .OR. k.GT.mn )
THEN
245 ELSE IF( lda.LT.max( 1, mn ) )
THEN
247 ELSE IF( tsize.LT.5 )
THEN
249 ELSE IF( ldc.LT.max( 1, m ) )
THEN
251 ELSE IF( ( lwork.LT.max( 1, lw ) ) .AND. ( .NOT.lquery ) )
THEN
260 CALL xerbla(
'CGEMQR', -info )
262 ELSE IF( lquery )
THEN
268 IF( min( m, n, k ).EQ.0 )
THEN
272 IF( ( left .AND. m.LE.k ) .OR. ( right .AND. n.LE.k )
273 $ .OR. ( mb.LE.k ) .OR. ( mb.GE.max( m, n, k ) ) )
THEN
274 CALL cgemqrt( side, trans, m, n, k, nb, a, lda, t( 6 ),
275 $ nb, c, ldc, work, info )
277 CALL clamtsqr( side, trans, m, n, k, mb, nb, a, lda, t( 6 ),
278 $ nb, c, ldc, work, lwork, info )
subroutine xerbla(srname, info)
subroutine cgemqr(side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info)
CGEMQR
subroutine cgemqrt(side, trans, m, n, k, nb, v, ldv, t, ldt, c, ldc, work, info)
CGEMQRT
subroutine clamtsqr(side, trans, m, n, k, mb, nb, a, lda, t, ldt, c, ldc, work, lwork, info)
CLAMTSQR