202 SUBROUTINE dlamswlq( 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 DOUBLE PRECISION A( lda, * ), WORK( * ), C(ldc, * ),
223 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
224 INTEGER I, II, KK, CTR, LW
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(
'DLAMSWLQ', -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 dgemlqt( 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 dtpmlqt(
'L',
'T',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 dtpmlqt(
'L',
'T',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 dgemlqt(
'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 dgemlqt(
'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 dtpmlqt(
'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 dtpmlqt(
'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 dtpmlqt(
'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 dtpmlqt(
'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 dgemlqt(
'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 dgemlqt(
'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 dtpmlqt(
'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 dtpmlqt(
'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 dgemlqt(SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT, C, LDC, WORK, INFO)
DGEMLQT
subroutine dtpmlqt(SIDE, TRANS, M, N, K, L, MB, V, LDV, T, LDT, A, LDA, B, LDB, WORK, INFO)
DTPMLQT
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dlamswlq(SIDE, TRANS, M, N, K, MB, NB, A, LDA, T, LDT, C, LDC, WORK, LWORK, INFO)