195 SUBROUTINE zlamswlq( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
196 $ LDT, C, LDC, WORK, LWORK, INFO )
203 CHARACTER SIDE, TRANS
204 INTEGER INFO, LDA, M, N, K, MB, NB, LDT, LWORK, LDC
207 COMPLEX*16 A( LDA, * ), WORK( * ), C(LDC, * ),
215 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
216 INTEGER I, II, KK, LW, CTR
229 notran = lsame( trans,
'N' )
230 tran = lsame( trans,
'C' )
231 left = lsame( side,
'L' )
232 right = lsame( side,
'R' )
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 )
THEN
250 ELSE IF( lda.LT.max( 1, k ) )
THEN
252 ELSE IF( ldt.LT.max( 1, mb) )
THEN
254 ELSE IF( ldc.LT.max( 1, m ) )
THEN
256 ELSE IF(( lwork.LT.max(1,lw)).AND.(.NOT.lquery))
THEN
261 CALL xerbla(
'ZLAMSWLQ', -info )
264 ELSE IF (lquery)
THEN
271 IF( min(m,n,k).EQ.0 )
THEN
275 IF((nb.LE.k).OR.(nb.GE.max(m,n,k)))
THEN
276 CALL zgemlqt( side, trans, m, n, k, mb, a, lda,
277 $ t, ldt, c, ldc, work, info)
281 IF(left.AND.tran)
THEN
285 kk = mod((m-k),(nb-k))
290 CALL ztpmlqt(
'L',
'C',kk , n, k, 0, mb, a(1,ii), lda,
291 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
292 $ c(ii,1), ldc, work, info )
297 DO i=ii-(nb-k),nb+1,-(nb-k)
302 CALL ztpmlqt(
'L',
'C',nb-k , n, k, 0,mb, a(1,i), lda,
303 $ t(1,ctr*k+1),ldt, c(1,1), ldc,
304 $ c(i,1), ldc, work, info )
310 CALL zgemlqt(
'L',
'C',nb , n, k, mb, a(1,1), lda, t
311 $ ,ldt ,c(1,1), ldc, work, info )
313 ELSE IF (left.AND.notran)
THEN
317 kk = mod((m-k),(nb-k))
320 CALL zgemlqt(
'L',
'N',nb , n, k, mb, a(1,1), lda, t
321 $ ,ldt ,c(1,1), ldc, work, info )
323 DO i=nb+1,ii-nb+k,(nb-k)
327 CALL ztpmlqt(
'L',
'N',nb-k , n, k, 0,mb, a(1,i), lda,
328 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
329 $ c(i,1), ldc, work, info )
337 CALL ztpmlqt(
'L',
'N',kk , n, k, 0, mb, a(1,ii), lda,
338 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
339 $ c(ii,1), ldc, work, info )
343 ELSE IF(right.AND.notran)
THEN
347 kk = mod((n-k),(nb-k))
351 CALL ztpmlqt(
'R',
'N',m , kk, k, 0, mb, a(1, ii), lda,
352 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
353 $ c(1,ii), ldc, work, info )
358 DO i=ii-(nb-k),nb+1,-(nb-k)
363 CALL ztpmlqt(
'R',
'N', m, nb-k, k, 0, mb, a(1, i), lda,
364 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
365 $ c(1,i), ldc, work, info )
371 CALL zgemlqt(
'R',
'N',m , nb, k, mb, a(1,1), lda, t
372 $ ,ldt ,c(1,1), ldc, work, info )
374 ELSE IF (right.AND.tran)
THEN
378 kk = mod((n-k),(nb-k))
380 CALL zgemlqt(
'R',
'C',m , nb, k, mb, a(1,1), lda, t
381 $ ,ldt ,c(1,1), ldc, work, info )
384 DO i=nb+1,ii-nb+k,(nb-k)
388 CALL ztpmlqt(
'R',
'C',m , nb-k, k, 0,mb, a(1,i), lda,
389 $ t(1,ctr *k+1), ldt, c(1,1), ldc,
390 $ c(1,i), ldc, work, info )
398 CALL ztpmlqt(
'R',
'C',m , kk, k, 0,mb, a(1,ii), lda,
399 $ t(1, ctr * k + 1),ldt, c(1,1), ldc,
400 $ c(1,ii), ldc, work, info )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zgemlqt(SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT, C, LDC, WORK, INFO)
ZGEMLQT
subroutine ztpmlqt(SIDE, TRANS, M, N, K, L, MB, V, LDV, T, LDT, A, LDA, B, LDB, WORK, INFO)
ZTPMLQT
subroutine zlamswlq(SIDE, TRANS, M, N, K, MB, NB, A, LDA, T, LDT, C, LDC, WORK, LWORK, INFO)
ZLAMSWLQ