200 SUBROUTINE zlamswlq( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
201 $ ldt, c, ldc, work, lwork, info )
209 CHARACTER SIDE, TRANS
210 INTEGER INFO, LDA, M, N, K, MB, NB, LDT, LWORK, LDC, LW
213 COMPLEX*16 A( lda, * ), WORK( * ), C(ldc, * ),
221 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
222 INTEGER I, II, KK, CTR
235 notran = lsame( trans,
'N' )
236 tran = lsame( trans,
'C' )
237 left = lsame( side,
'L' )
238 right = lsame( side,
'R' )
246 IF( .NOT.left .AND. .NOT.right )
THEN
248 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
250 ELSE IF( m.LT.0 )
THEN
252 ELSE IF( n.LT.0 )
THEN
254 ELSE IF( k.LT.0 )
THEN
256 ELSE IF( lda.LT.max( 1, k ) )
THEN
258 ELSE IF( ldt.LT.max( 1, mb) )
THEN
260 ELSE IF( ldc.LT.max( 1, m ) )
THEN
262 ELSE IF(( lwork.LT.max(1,lw)).AND.(.NOT.lquery))
THEN
267 CALL xerbla(
'ZLAMSWLQ', -info )
270 ELSE IF (lquery)
THEN
277 IF( min(m,n,k).EQ.0 )
THEN
281 IF((nb.LE.k).OR.(nb.GE.max(m,n,k)))
THEN
282 CALL zgemlqt( side, trans, m, n, k, mb, a, lda,
283 $ t, ldt, c, ldc, work, info)
287 IF(left.AND.tran)
THEN
291 kk = mod((m-k),(nb-k))
296 CALL ztpmlqt(
'L',
'C',kk , n, k, 0, mb, a(1,ii), lda,
297 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
298 $ c(ii,1), ldc, work, info )
303 DO i=ii-(nb-k),nb+1,-(nb-k)
308 CALL ztpmlqt(
'L',
'C',nb-k , n, k, 0,mb, a(1,i), lda,
309 $ t(1,ctr*k+1),ldt, c(1,1), ldc,
310 $ c(i,1), ldc, work, info )
316 CALL zgemlqt(
'L',
'C',nb , n, k, mb, a(1,1), lda, t
317 $ ,ldt ,c(1,1), ldc, work, info )
319 ELSE IF (left.AND.notran)
THEN
323 kk = mod((m-k),(nb-k))
326 CALL zgemlqt(
'L',
'N',nb , n, k, mb, a(1,1), lda, t
327 $ ,ldt ,c(1,1), ldc, work, info )
329 DO i=nb+1,ii-nb+k,(nb-k)
333 CALL ztpmlqt(
'L',
'N',nb-k , n, k, 0,mb, a(1,i), lda,
334 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
335 $ c(i,1), ldc, work, info )
343 CALL ztpmlqt(
'L',
'N',kk , n, k, 0, mb, a(1,ii), lda,
344 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
345 $ c(ii,1), ldc, work, info )
349 ELSE IF(right.AND.notran)
THEN
353 kk = mod((n-k),(nb-k))
357 CALL ztpmlqt(
'R',
'N',m , kk, k, 0, mb, a(1, ii), lda,
358 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
359 $ c(1,ii), ldc, work, info )
364 DO i=ii-(nb-k),nb+1,-(nb-k)
369 CALL ztpmlqt(
'R',
'N', m, nb-k, k, 0, mb, a(1, i), lda,
370 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
371 $ c(1,i), ldc, work, info )
377 CALL zgemlqt(
'R',
'N',m , nb, k, mb, a(1,1), lda, t
378 $ ,ldt ,c(1,1), ldc, work, info )
380 ELSE IF (right.AND.tran)
THEN
384 kk = mod((n-k),(nb-k))
386 CALL zgemlqt(
'R',
'C',m , nb, k, mb, a(1,1), lda, t
387 $ ,ldt ,c(1,1), ldc, work, info )
390 DO i=nb+1,ii-nb+k,(nb-k)
394 CALL ztpmlqt(
'R',
'C',m , nb-k, k, 0,mb, a(1,i), lda,
395 $ t(1,ctr *k+1), ldt, c(1,1), ldc,
396 $ c(1,i), ldc, work, info )
404 CALL ztpmlqt(
'R',
'C',m , kk, k, 0,mb, a(1,ii), lda,
405 $ t(1, ctr * k + 1),ldt, c(1,1), ldc,
406 $ c(1,ii), ldc, work, info )
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)
subroutine xerbla(SRNAME, INFO)
XERBLA