193 SUBROUTINE clamswlq( 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 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(
'CLAMSWLQ', -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 cgemlqt( 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))
289 CALL ctpmlqt(
'L',
'C',kk , n, k, 0, mb, a(1,ii), lda,
290 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
291 $ c(ii,1), ldc, work, info )
296 DO i=ii-(nb-k),nb+1,-(nb-k)
301 CALL ctpmlqt(
'L',
'C',nb-k , n, k, 0,mb, a(1,i), lda,
302 $ t(1,ctr*k+1),ldt, c(1,1), ldc,
303 $ c(i,1), ldc, work, info )
309 CALL cgemlqt(
'L',
'C',nb , n, k, mb, a(1,1), lda, t
310 $ ,ldt ,c(1,1), ldc, work, info )
312 ELSE IF (left.AND.notran)
THEN 316 kk = mod((m-k),(nb-k))
319 CALL cgemlqt(
'L',
'N',nb , n, k, mb, a(1,1), lda, t
320 $ ,ldt ,c(1,1), ldc, work, info )
322 DO i=nb+1,ii-nb+k,(nb-k)
326 CALL ctpmlqt(
'L',
'N',nb-k , n, k, 0,mb, a(1,i), lda,
327 $ t(1, ctr *k+1), ldt, c(1,1), ldc,
328 $ c(i,1), ldc, work, info )
336 CALL ctpmlqt(
'L',
'N',kk , n, k, 0, mb, a(1,ii), lda,
337 $ t(1, ctr*k+1), ldt, c(1,1), ldc,
338 $ c(ii,1), ldc, work, info )
342 ELSE IF(right.AND.notran)
THEN 346 kk = mod((n-k),(nb-k))
350 CALL ctpmlqt(
'R',
'N',m , kk, k, 0, mb, a(1, ii), lda,
351 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
352 $ c(1,ii), ldc, work, info )
357 DO i=ii-(nb-k),nb+1,-(nb-k)
362 CALL ctpmlqt(
'R',
'N', m, nb-k, k, 0, mb, a(1, i), lda,
363 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
364 $ c(1,i), ldc, work, info )
369 CALL cgemlqt(
'R',
'N',m , nb, k, mb, a(1,1), lda, t
370 $ ,ldt ,c(1,1), ldc, work, info )
372 ELSE IF (right.AND.tran)
THEN 376 kk = mod((n-k),(nb-k))
379 CALL cgemlqt(
'R',
'C',m , nb, k, mb, a(1,1), lda, t
380 $ ,ldt ,c(1,1), ldc, work, info )
382 DO i=nb+1,ii-nb+k,(nb-k)
386 CALL ctpmlqt(
'R',
'C',m , nb-k, k, 0,mb, a(1,i), lda,
387 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
388 $ c(1,i), ldc, work, info )
396 CALL ctpmlqt(
'R',
'C',m , kk, k, 0,mb, a(1,ii), lda,
397 $ t(1,ctr*k+1),ldt, c(1,1), ldc,
398 $ c(1,ii), ldc, work, info )
logical function lsame(CA, CB)
LSAME
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ctpmlqt(SIDE, TRANS, M, N, K, L, MB, V, LDV, T, LDT, A, LDA, B, LDB, WORK, INFO)
CTPMLQT
subroutine cgemlqt(SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT, C, LDC, WORK, INFO)
CGEMLQT