195 SUBROUTINE zlamtsqr( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
196 $ LDT, C, LDC, WORK, LWORK, INFO )
203 CHARACTER SIDE, TRANS
204 INTEGER INFO, LDA, M, N, K, MB, NB, LDT, LWORK, LDC
207 COMPLEX*16 A( LDA, * ), WORK( * ), C(LDC, * ),
215 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
216 INTEGER I, II, KK, LW, CTR, Q
229 notran = lsame( trans,
'N' )
230 tran = lsame( trans,
'C' )
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
260 ELSE IF(( lwork.LT.
max(1,lw)).AND.(.NOT.lquery))
THEN
271 CALL xerbla(
'ZLAMTSQR', -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 zgemqrt( side, trans, m, n, k,
285 $ t, ldt, c, ldc, work, info)
289 IF(left.AND.notran)
THEN
293 kk = mod((m-k),(mb-k))
297 CALL ztpmqrt(
'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 ztpmqrt(
'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 zgemqrt(
'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 zgemqrt(
'L',
'C',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 ztpmqrt(
'L',
'C',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 ztpmqrt(
'L',
'C',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 ELSE IF(right.AND.tran)
THEN
354 kk = mod((n-k),(mb-k))
358 CALL ztpmqrt(
'R','c
',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 ZTPMQRT('r
','c
',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 ZGEMQRT('r
','c
',M , MB, K, NB, A(1,1), LDA, T
379 $ ,LDT ,C(1,1), LDC, WORK, INFO )
381.AND.
ELSE IF (RIGHTNOTRAN) THEN
385 KK = MOD((N-K),(MB-K))
388 CALL ZGEMQRT('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 ZTPMQRT('r',
'N', m, mb-k, k, 0,nb, a(i,1), lda,
396 $ t(1, ctr * k + 1),ldt, c(1,1), ldc,
405 CALL ztpmqrt(
'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 )