202 SUBROUTINE zlamswlq( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
203 $ LDT, C, LDC, WORK, LWORK, INFO )
211 CHARACTER SIDE, TRANS
212 INTEGER INFO, LDA, M, N, K, MB, NB, LDT, LWORK, LDC
215 COMPLEX*16 A( lda, * ), WORK( * ), C(ldc, * ),
223 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
224 INTEGER I, II, KK, LW, CTR
237 notran = lsame( trans,
'N' )
238 tran = lsame( trans,
'C' )
239 left = lsame( side,
'L' )
240 right = lsame( side,
'R' )
248 IF( .NOT.left .AND. .NOT.right )
THEN 250 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN 252 ELSE IF( m.LT.0 )
THEN 254 ELSE IF( n.LT.0 )
THEN 256 ELSE IF( k.LT.0 )
THEN 258 ELSE IF( lda.LT.max( 1, k ) )
THEN 260 ELSE IF( ldt.LT.max( 1, mb) )
THEN 262 ELSE IF( ldc.LT.max( 1, m ) )
THEN 264 ELSE IF(( lwork.LT.max(1,lw)).AND.(.NOT.lquery))
THEN 269 CALL xerbla(
'ZLAMSWLQ', -info )
272 ELSE IF (lquery)
THEN 279 IF( min(m,n,k).EQ.0 )
THEN 283 IF((nb.LE.k).OR.(nb.GE.max(m,n,k)))
THEN 284 CALL zgemlqt( side, trans, m, n, k, mb, a, lda,
285 $ t, ldt, c, ldc, work, info)
289 IF(left.AND.tran)
THEN 293 kk = mod((m-k),(nb-k))
298 CALL ztpmlqt(
'L',
'C',kk , n, k, 0, mb, a(1,ii), lda,
299 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
300 $ c(ii,1), ldc, work, info )
305 DO i=ii-(nb-k),nb+1,-(nb-k)
310 CALL ztpmlqt(
'L',
'C',nb-k , n, k, 0,mb, a(1,i), lda,
311 $ t(1,ctr*k+1),ldt, c(1,1), ldc,
312 $ c(i,1), ldc, work, info )
318 CALL zgemlqt(
'L',
'C',nb , n, k, mb, a(1,1), lda, t
319 $ ,ldt ,c(1,1), ldc, work, info )
321 ELSE IF (left.AND.notran)
THEN 325 kk = mod((m-k),(nb-k))
328 CALL zgemlqt(
'L',
'N',nb , n, k, mb, a(1,1), lda, t
329 $ ,ldt ,c(1,1), ldc, work, info )
331 DO i=nb+1,ii-nb+k,(nb-k)
335 CALL ztpmlqt(
'L',
'N',nb-k , n, k, 0,mb, a(1,i), lda,
336 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
337 $ c(i,1), ldc, work, info )
345 CALL ztpmlqt(
'L',
'N',kk , n, k, 0, mb, a(1,ii), lda,
346 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
347 $ c(ii,1), ldc, work, info )
351 ELSE IF(right.AND.notran)
THEN 355 kk = mod((n-k),(nb-k))
359 CALL ztpmlqt(
'R',
'N',m , kk, k, 0, mb, a(1, ii), lda,
360 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
361 $ c(1,ii), ldc, work, info )
366 DO i=ii-(nb-k),nb+1,-(nb-k)
371 CALL ztpmlqt(
'R',
'N', m, nb-k, k, 0, mb, a(1, i), lda,
372 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
373 $ c(1,i), ldc, work, info )
379 CALL zgemlqt(
'R',
'N',m , nb, k, mb, a(1,1), lda, t
380 $ ,ldt ,c(1,1), ldc, work, info )
382 ELSE IF (right.AND.tran)
THEN 386 kk = mod((n-k),(nb-k))
388 CALL zgemlqt(
'R',
'C',m , nb, k, mb, a(1,1), lda, t
389 $ ,ldt ,c(1,1), ldc, work, info )
392 DO i=nb+1,ii-nb+k,(nb-k)
396 CALL ztpmlqt(
'R',
'C',m , nb-k, k, 0,mb, a(1,i), lda,
397 $ t(1,ctr *k+1), ldt, c(1,1), ldc,
398 $ c(1,i), ldc, work, info )
406 CALL ztpmlqt(
'R',
'C',m , kk, k, 0,mb, a(1,ii), lda,
407 $ t(1, ctr * k + 1),ldt, c(1,1), ldc,
408 $ c(1,ii), ldc, work, info )
subroutine zlamswlq(SIDE, TRANS, M, N, K, MB, NB, A, LDA, T, LDT, C, LDC, WORK, LWORK, INFO)
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
subroutine xerbla(SRNAME, INFO)
XERBLA