170 SUBROUTINE zgemlq( 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*16 A( LDA, * ), T( * ), C( LDC, * ), WORK( * )
189 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
190 INTEGER MB, NB, LW, NBLCKS, MN, MINMNK, LWMIN
200 INTRINSIC int, max, min, mod
206 lquery = ( lwork.EQ.-1 )
207 notran = lsame( trans,
'N' )
208 tran = lsame( trans,
'C' )
209 left = lsame( side,
'L' )
210 right = lsame( side,
'R' )
222 minmnk = min( m, n, k )
223 IF( minmnk.EQ.0 )
THEN
229 IF( ( nb.GT.k ) .AND. ( mn.GT.k ) )
THEN
230 IF( mod( mn - k, nb - k ) .EQ. 0 )
THEN
231 nblcks = ( mn - k ) / ( nb - k )
233 nblcks = ( mn - k ) / ( nb - k ) + 1
240 IF( .NOT.left .AND. .NOT.right )
THEN
242 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
244 ELSE IF( m.LT.0 )
THEN
246 ELSE IF( n.LT.0 )
THEN
248 ELSE IF( k.LT.0 .OR. k.GT.mn )
THEN
250 ELSE IF( lda.LT.max( 1, k ) )
THEN
252 ELSE IF( tsize.LT.5 )
THEN
254 ELSE IF( ldc.LT.max( 1, m ) )
THEN
256 ELSE IF( ( lwork.LT.lwmin ) .AND. ( .NOT.lquery ) )
THEN
265 CALL xerbla(
'ZGEMLQ', -info )
267 ELSE IF( lquery )
THEN
273 IF( minmnk.EQ.0 )
THEN
277 IF( ( left .AND. m.LE.k ) .OR. ( right .AND. n.LE.k )
278 $ .OR. ( nb.LE.k ) .OR. ( nb.GE.max( m, n, k ) ) )
THEN
279 CALL zgemlqt( side, trans, m, n, k, mb, a, lda,
280 $ t( 6 ), mb, c, ldc, work, info )
282 CALL zlamswlq( side, trans, m, n, k, mb, nb, a, lda, t( 6 ),
283 $ mb, c, ldc, work, lwork, info )
subroutine zgemlq(side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info)
ZGEMLQ
subroutine zgemlqt(side, trans, m, n, k, mb, v, ldv, t, ldt, c, ldc, work, info)
ZGEMLQT
subroutine zlamswlq(side, trans, m, n, k, mb, nb, a, lda, t, ldt, c, ldc, work, lwork, info)
ZLAMSWLQ