202 SUBROUTINE clamswlq( 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 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(
'CLAMSWLQ', -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 cgemlqt( 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))
297 CALL ctpmlqt(
'L',
'C',kk , n, k, 0, mb, a(1,ii), lda,
298 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
299 $ c(ii,1), ldc, work, info )
304 DO i=ii-(nb-k),nb+1,-(nb-k)
309 CALL ctpmlqt(
'L',
'C',nb-k , n, k, 0,mb, a(1,i), lda,
310 $ t(1,ctr*k+1),ldt, c(1,1), ldc,
311 $ c(i,1), ldc, work, info )
317 CALL cgemlqt(
'L',
'C',nb , n, k, mb, a(1,1), lda, t
318 $ ,ldt ,c(1,1), ldc, work, info )
320 ELSE IF (left.AND.notran)
THEN 324 kk = mod((m-k),(nb-k))
327 CALL cgemlqt(
'L',
'N',nb , n, k, mb, a(1,1), lda, t
328 $ ,ldt ,c(1,1), ldc, work, info )
330 DO i=nb+1,ii-nb+k,(nb-k)
334 CALL ctpmlqt(
'L',
'N',nb-k , n, k, 0,mb, a(1,i), lda,
335 $ t(1, ctr *k+1), ldt, c(1,1), ldc,
336 $ c(i,1), ldc, work, info )
344 CALL ctpmlqt(
'L',
'N',kk , n, k, 0, mb, a(1,ii), lda,
345 $ t(1, ctr*k+1), ldt, c(1,1), ldc,
346 $ c(ii,1), ldc, work, info )
350 ELSE IF(right.AND.notran)
THEN 354 kk = mod((n-k),(nb-k))
358 CALL ctpmlqt(
'R',
'N',m , kk, k, 0, mb, a(1, ii), lda,
359 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
360 $ c(1,ii), ldc, work, info )
365 DO i=ii-(nb-k),nb+1,-(nb-k)
370 CALL ctpmlqt(
'R',
'N', m, nb-k, k, 0, mb, a(1, i), lda,
371 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
372 $ c(1,i), ldc, work, info )
377 CALL cgemlqt(
'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))
387 CALL cgemlqt(
'R',
'C',m , nb, k, mb, a(1,1), lda, t
388 $ ,ldt ,c(1,1), ldc, work, info )
390 DO i=nb+1,ii-nb+k,(nb-k)
394 CALL ctpmlqt(
'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 ctpmlqt(
'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 ctpmlqt(SIDE, TRANS, M, N, K, L, MB, V, LDV, T, LDT, A, LDA, B, LDB, WORK, INFO)
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine clamswlq(SIDE, TRANS, M, N, K, MB, NB, A, LDA, T, LDT, C, LDC, WORK, LWORK, INFO)
subroutine cgemlqt(SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT, C, LDC, WORK, INFO)