202 SUBROUTINE slamswlq( 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 REAL 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,
'T' )
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(
'SLAMSWLQ', -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 sgemlqt( 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 stpmlqt(
'L',
'T',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 stpmlqt(
'L',
'T',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 )
317 CALL sgemlqt(
'L',
'T',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 sgemlqt(
'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 stpmlqt(
'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 stpmlqt(
'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 stpmlqt(
'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 stpmlqt(
'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 )
378 CALL sgemlqt(
'R',
'N',m , nb, k, mb, a(1,1), lda, t
379 $ ,ldt ,c(1,1), ldc, work, info )
381 ELSE IF (right.AND.tran)
THEN 385 kk = mod((n-k),(nb-k))
388 CALL sgemlqt(
'R',
'T',m , nb, k, mb, a(1,1), lda, t
389 $ ,ldt ,c(1,1), ldc, work, info )
391 DO i=nb+1,ii-nb+k,(nb-k)
395 CALL stpmlqt(
'R',
'T',m , nb-k, k, 0,mb, a(1,i), lda,
396 $ t(1, ctr*k+1), ldt, c(1,1), ldc,
397 $ c(1,i), ldc, work, info )
405 CALL stpmlqt(
'R',
'T',m , kk, k, 0,mb, a(1,ii), lda,
406 $ t(1,ctr*k+1),ldt, c(1,1), ldc,
407 $ c(1,ii), ldc, work, info )
subroutine sgemlqt(SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT, C, LDC, WORK, INFO)
subroutine slamswlq(SIDE, TRANS, M, N, K, MB, NB, A, LDA, T, LDT, C, LDC, WORK, LWORK, INFO)
subroutine stpmlqt(SIDE, TRANS, M, N, K, L, MB, V, LDV, T, LDT, A, LDA, B, LDB, WORK, INFO)
DTPMLQT
subroutine xerbla(SRNAME, INFO)
XERBLA