170 SUBROUTINE cgemqr( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
171 $ C, LDC, WORK, LWORK, INFO )
178 CHARACTER SIDE, TRANS
179 INTEGER INFO, LDA, M, N, K, TSIZE, LWORK, LDC
182 COMPLEX A( LDA, * ), T( * ), C( LDC, * ), WORK( * )
189 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
190 INTEGER MB, NB, LW, NBLCKS, MN
200 INTRINSIC int, max, min, mod
207 notran = lsame( trans,
'N' )
208 tran = lsame( trans,
'C' )
209 left = lsame( side,
'L' )
210 right = lsame( side,
'R' )
222 IF( ( mb.GT.k ) .AND. ( mn.GT.k ) )
THEN
223 IF( mod( mn - k, mb - k ).EQ.0 )
THEN
224 nblcks = ( mn - k ) / ( mb - k )
226 nblcks = ( mn - k ) / ( mb - k ) + 1
233 IF( .NOT.left .AND. .NOT.right )
THEN
235 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
237 ELSE IF( m.LT.0 )
THEN
239 ELSE IF( n.LT.0 )
THEN
241 ELSE IF( k.LT.0 .OR. k.GT.mn )
THEN
243 ELSE IF( lda.LT.max( 1, mn ) )
THEN
245 ELSE IF( tsize.LT.5 )
THEN
247 ELSE IF( ldc.LT.max( 1, m ) )
THEN
249 ELSE IF( ( lwork.LT.max( 1, lw ) ) .AND. ( .NOT.lquery ) )
THEN
258 CALL xerbla(
'CGEMQR', -info )
260 ELSE IF( lquery )
THEN
266 IF( min( m, n, k ).EQ.0 )
THEN
270 IF( ( left .AND. m.LE.k ) .OR. ( right .AND. n.LE.k )
271 $ .OR. ( mb.LE.k ) .OR. ( mb.GE.max( m, n, k ) ) )
THEN
272 CALL cgemqrt( side, trans, m, n, k, nb, a, lda, t( 6 ),
273 $ nb, c, ldc, work, info )
275 CALL clamtsqr( side, trans, m, n, k, mb, nb, a, lda, t( 6 ),
276 $ nb, c, ldc, work, lwork, info )
subroutine cgemqr(SIDE, TRANS, M, N, K, A, LDA, T, TSIZE, C, LDC, WORK, LWORK, INFO)
CGEMQR
subroutine clamtsqr(SIDE, TRANS, M, N, K, MB, NB, A, LDA, T, LDT, C, LDC, WORK, LWORK, INFO)
CLAMTSQR
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cgemqrt(SIDE, TRANS, M, N, K, NB, V, LDV, T, LDT, C, LDC, WORK, INFO)
CGEMQRT