195 SUBROUTINE slamtsqr( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
196 $ LDT, C, LDC, WORK, LWORK, INFO )
203 CHARACTER SIDE, TRANS
204 INTEGER INFO, , M, N, K, MB, NB, LDT, LWORK, LDC
207 REAL A( LDA, * ), WORK( * ), C(LDC, * ),
215 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
216 INTEGER , II, KK, LW, CTR, Q
229 notran = lsame( trans,
'N' )
230 tran = lsame( trans,
'T' )
231 left = lsame( side,
'L' )
232 right = lsame( side,
'R' )
242 IF( .NOT.left .AND. .NOT.right )
THEN
244 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
246 ELSE IF( m.LT.k )
THEN
248 ELSE IF( n.LT.0 )
THEN
250 ELSE IF( k.LT.0 )
THEN
252 ELSE IF( k.LT.nb .OR. nb.LT.1 )
THEN
254 ELSE IF( lda.LT.
max( 1, q ) )
THEN
256 ELSE IF( ldt.LT.
max( 1, nb) )
THEN
258 ELSE IF( ldc.LT.
max( 1, m ) )
THEN
260 ELSE IF(( lwork.LT.
max(1,lw)).AND.(.NOT.lquery))
THEN
271 CALL xerbla(
'SLAMTSQR', -info )
273 ELSE IF (lquery)
THEN
279 IF(
min(m,n,k).EQ.0 )
THEN
283 IF((mb.LE.k).OR.(mb.GE.
max(m,n,k)))
THEN
284 CALL sgemqrt( side, trans, m, n, k, nb, a, lda,
285 $ t, ldt, c, ldc, work, info)
289 IF(left.AND.notran)
THEN
293 kk = mod((m-k),(mb-k))
297 CALL stpmqrt(
'L',
'N',kk , n, k, 0, nb, a(ii,1), lda,
298 $ t(1,ctr*k+1),ldt , c(1,1), ldc,
299 $ c(ii,1), ldc, work, info )
304 DO i=ii-(mb-k),mb+1,-(mb-k)
309 CALL stpmqrt(
'L',
'N',mb-k , n, k, 0,nb, a(i,1), lda,
310 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
311 $ c(i,1), ldc, work, info
317 CALL sgemqrt(
'L',
'N',mb , n, k, nb, a(1,1), lda, t
318 $ ,ldt ,c(1,1), ldc, work, info )
320 ELSE IF (left.AND.tran)
THEN
324 kk = mod((m-k),(mb-k))
327 CALL sgemqrt(
'L','t
',MB , N, K, NB, A(1,1), LDA, T
328 $ ,LDT ,C(1,1), LDC, WORK, INFO )
330 DO I=MB+1,II-MB+K,(MB-K)
334 CALL STPMQRT('l
','t
',MB-K , N, K, 0,NB, A(I,1), LDA,
335 $ T(1,CTR * K + 1),LDT, C(1,1), LDC,
336 $ C(I,1), LDC, WORK, INFO )
344 CALL STPMQRT('l
','t
',KK , N, K, 0,NB, A(II,1), LDA,
345 $ T(1, CTR * K + 1), LDT, C(1,1), LDC,
346 $ C(II,1), LDC, WORK, INFO )
350.AND.
ELSE IF(RIGHTTRAN) THEN
354 KK = MOD((N-K),(MB-K))
358 CALL STPMQRT('r
','t',m , kk, k, 0, nb, a(ii,1), lda,
359 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
360 $ c(1,ii), ldc, work, info )
365 DO i=ii-(mb-k),mb+1,-(mb-k)
370 CALL stpmqrt(
'R',
'T',m , mb-k, k, 0,nb, a(i,1), lda,
371 $ t(1, ctr * k + 1), ldt, c(1,1), ldc,
372 $ c(1,i), ldc, work, info )
378 CALL sgemqrt(
'R',
'T',m , mb, k, nb, a(1,1), lda, t
379 $ ,ldt ,c(1,1), ldc, work, info )
381 ELSE IF (right.AND.notran)
THEN
385 kk = mod((n-k),(mb-k))
388 CALL sgemqrt(
'R','n
', M, MB , K, NB, A(1,1), LDA, T
389 $ ,LDT ,C(1,1), LDC, WORK, INFO )
391 DO I=MB+1,II-MB+K,(MB-K)
395 CALL STPMQRT('r
','n
', M, MB-K, K, 0,NB, A(I,1), LDA,
396 $ T(1, CTR * K + 1),LDT, C(1,1), LDC,
397 $ C(1,I), LDC, WORK, INFO )
405 CALL STPMQRT('r
','n', m, kk , k, 0,nb, a(ii,1), lda,
406 $ t(1, ctr * k + 1),ldt, c(1,1), ldc,
407 $ c(1,ii), ldc, work, info )