168 SUBROUTINE cgemlq( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
169 $ C, LDC, WORK, LWORK, INFO )
177 CHARACTER SIDE, TRANS
178 INTEGER INFO, LDA, M, N, K, TSIZE, LWORK, LDC
181 COMPLEX A( LDA, * ), T( * ), C( LDC, * ), WORK( * )
188 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
189 INTEGER MB, NB, LW, NBLCKS, MN
199 INTRINSIC int, max, min, mod
206 notran = lsame( trans,
'N' )
207 tran = lsame( trans,
'C' )
208 left = lsame( side,
'L' )
209 right = lsame( side,
'R' )
221 IF( ( nb.GT.k ) .AND. ( mn.GT.k ) )
THEN
222 IF( mod( mn - k, nb - k ) .EQ. 0 )
THEN
223 nblcks = ( mn - k ) / ( nb - k )
225 nblcks = ( mn - k ) / ( nb - k ) + 1
232 IF( .NOT.left .AND. .NOT.right )
THEN
234 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
236 ELSE IF( m.LT.0 )
THEN
238 ELSE IF( n.LT.0 )
THEN
240 ELSE IF( k.LT.0 .OR. k.GT.mn )
THEN
242 ELSE IF( lda.LT.max( 1, k ) )
THEN
244 ELSE IF( tsize.LT.5 )
THEN
246 ELSE IF( ldc.LT.max( 1, m ) )
THEN
248 ELSE IF( ( lwork.LT.max( 1, lw ) ) .AND. ( .NOT.lquery ) )
THEN
253 work( 1 ) = real( lw )
257 CALL xerbla(
'CGEMLQ', -info )
259 ELSE IF( lquery )
THEN
265 IF( min( m, n, k ).EQ.0 )
THEN
269 IF( ( left .AND. m.LE.k ) .OR. ( right .AND. n.LE.k )
270 $ .OR. ( nb.LE.k ) .OR. ( nb.GE.max( m, n, k ) ) )
THEN
271 CALL cgemlqt( side, trans, m, n, k, mb, a, lda,
272 $ t( 6 ), mb, c, ldc, work, info )
274 CALL clamswlq( side, trans, m, n, k, mb, nb, a, lda, t( 6 ),
275 $ mb, c, ldc, work, lwork, info )
278 work( 1 ) = real( lw )