170 SUBROUTINE cgemlq( 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( ( nb.GT.k ) .AND. ( mn.GT.k ) )
THEN
223 IF( mod( mn - k, nb - k ) .EQ. 0 )
THEN
224 nblcks = ( mn - k ) / ( nb - k )
226 nblcks = ( mn - k ) / ( nb - 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, k ) )
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
254 work( 1 ) = real( lw )
258 CALL xerbla(
'CGEMLQ', -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. ( nb.LE.k ) .OR. ( nb.GE.max( m, n, k ) ) )
THEN
272 CALL cgemlqt( side, trans, m, n, k, mb, a, lda,
273 $ t( 6 ), mb, c, ldc, work, info )
275 CALL clamswlq( side, trans, m, n, k, mb, nb, a, lda, t( 6 ),
276 $ mb, c, ldc, work, lwork, info )
279 work( 1 ) = real( lw )
subroutine xerbla(srname, info)
subroutine cgemlq(side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info)
CGEMLQ
subroutine cgemlqt(side, trans, m, n, k, mb, v, ldv, t, ldt, c, ldc, work, info)
CGEMLQT
subroutine clamswlq(side, trans, m, n, k, mb, nb, a, lda, t, ldt, c, ldc, work, lwork, info)
CLAMSWLQ