193 SUBROUTINE zlamswlq( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
194 $ LDT, C, LDC, WORK, LWORK, INFO )
201 CHARACTER side, trans
202 INTEGER info, lda, m, n, k, mb, nb, ldt, lwork, ldc
205 COMPLEX*16 a( lda, * ), work( * ), c(ldc, * ),
213 LOGICAL left, right, tran, notran, lquery
214 INTEGER i, ii, kk, lw, ctr
227 notran =
lsame( trans,
'N' )
228 tran =
lsame( trans,
'C' )
229 left =
lsame( side,
'L' )
230 right =
lsame( side,
'R' )
238 IF( .NOT.left .AND. .NOT.right )
THEN 240 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN 242 ELSE IF( k.LT.0 )
THEN 244 ELSE IF( m.LT.k )
THEN 246 ELSE IF( n.LT.0 )
THEN 248 ELSE IF( k.LT.mb .OR. mb.LT.1)
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 )
logical function lsame(CA, CB)
LSAME
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ztpmlqt(SIDE, TRANS, M, N, K, L, MB, V, LDV, T, LDT, A, LDA, B, LDB, WORK, INFO)
ZTPMLQT
subroutine zgemlqt(SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT, C, LDC, WORK, INFO)
ZGEMLQT