193 SUBROUTINE dlamswlq( 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 DOUBLE PRECISION A( LDA, * ), WORK( * ), C(LDC, * ),
213 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
214 INTEGER I, II, KK, CTR, LW
227 notran = lsame( trans,
'N' )
228 tran = lsame( trans,
'T' )
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(
'DLAMSWLQ', -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 dgemlqt( 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 dtpmlqt(
'L',
'T',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 dtpmlqt(
'L',
'T',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 dgemlqt(
'L',
'T',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 dgemlqt(
'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 dtpmlqt(
'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 dtpmlqt(
'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 dtpmlqt(
'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 dtpmlqt(
'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 )
370 CALL dgemlqt(
'R',
'N',m , nb, k, mb, a(1,1), lda, t
371 $ ,ldt ,c(1,1), ldc, work, info )
373 ELSE IF (right.AND.tran)
THEN
377 kk = mod((n-k),(nb-k))
380 CALL dgemlqt(
'R',
'T',m , nb, k, mb, a(1,1), lda, t
381 $ ,ldt ,c(1,1), ldc, work, info )
383 DO i=nb+1,ii-nb+k,(nb-k)
387 CALL dtpmlqt(
'R',
'T',m , nb-k, k, 0,mb, a(1,i), lda,
388 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
389 $ c(1,i), ldc, work, info )
397 CALL dtpmlqt(
'R',
'T',m , kk, k, 0,mb, a(1,ii), lda,
398 $ t(1,ctr*k+1),ldt, c(1,1), ldc,
399 $ c(1,ii), ldc, work, info )
subroutine dlamswlq(SIDE, TRANS, M, N, K, MB, NB, A, LDA, T, LDT, C, LDC, WORK, LWORK, INFO)
DLAMSWLQ
subroutine xerbla(SRNAME, INFO)
XERBLA
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