170 SUBROUTINE cgemqr( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
171 $ C, LDC, WORK, LWORK, INFO )
179 CHARACTER SIDE, TRANS
180 INTEGER INFO, LDA, M, N, K, TSIZE, LWORK, LDC
183 COMPLEX A( LDA, * ), T( * ), C( LDC, * ), WORK( * )
190 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
191 INTEGER MB, NB, LW, NBLCKS, MN
201 INTRINSIC int, max, min, mod
208 notran = lsame( trans,
'N' )
209 tran = lsame( trans,
'C' )
210 left = lsame( side,
'L' )
211 right = lsame( side,
'R' )
223 IF( ( mb.GT.k ) .AND. ( mn.GT.k ) )
THEN
224 IF( mod( mn - k, mb - k ).EQ.0 )
THEN
225 nblcks = ( mn - k ) / ( mb - k )
227 nblcks = ( mn - k ) / ( mb - k ) + 1
234 IF( .NOT.left .AND. .NOT.right )
THEN
236 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
238 ELSE IF( m.LT.0 )
THEN
240 ELSE IF( n.LT.0 )
THEN
242 ELSE IF( k.LT.0 .OR. k.GT.mn )
THEN
244 ELSE IF( lda.LT.max( 1, mn ) )
THEN
246 ELSE IF( tsize.LT.5 )
THEN
248 ELSE IF( ldc.LT.max( 1, m ) )
THEN
250 ELSE IF( ( lwork.LT.max( 1, lw ) ) .AND. ( .NOT.lquery ) )
THEN
259 CALL xerbla(
'CGEMQR', -info )
261 ELSE IF( lquery )
THEN
267 IF( min( m, n, k ).EQ.0 )
THEN
271 IF( ( left .AND. m.LE.k ) .OR. ( right .AND. n.LE.k )
272 $ .OR. ( mb.LE.k ) .OR. ( mb.GE.max( m, n, k ) ) )
THEN
273 CALL cgemqrt( side, trans, m, n, k, nb, a, lda, t( 6 ),
274 $ nb, c, ldc, work, info )
276 CALL clamtsqr( side, trans, m, n, k, mb, nb, a, lda, t( 6 ),
277 $ nb, c, ldc, work, lwork, info )