196 SUBROUTINE clamtsqr( SIDE, TRANS, M, N, K, MB, NB, A, LDA, T,
197 $ LDT, C, LDC, WORK, LWORK, INFO )
205 CHARACTER SIDE, TRANS
206 INTEGER INFO, LDA, M, N, K, MB, NB, LDT, LWORK, LDC
209 COMPLEX A( LDA, * ), WORK( * ), C(LDC, * ),
217 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
218 INTEGER I, II, KK, LW, CTR
231 notran = lsame( trans,
'N' )
232 tran = lsame( trans,
'C' )
233 left = lsame( side,
'L' )
234 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.0 )
THEN
248 ELSE IF( n.LT.0 )
THEN
250 ELSE IF( k.LT.0 )
THEN
252 ELSE IF( lda.LT.max( 1, k ) )
THEN
254 ELSE IF( ldt.LT.max( 1, nb) )
THEN
256 ELSE IF( ldc.LT.max( 1, m ) )
THEN
258 ELSE IF(( lwork.LT.max(1,lw)).AND.(.NOT.lquery))
THEN
269 CALL xerbla(
'CLAMTSQR', -info )
271 ELSE IF (lquery)
THEN
277 IF( min(m,n,k).EQ.0 )
THEN
281 IF((mb.LE.k).OR.(mb.GE.max(m,n,k)))
THEN
282 CALL cgemqrt( side, trans, m, n, k, nb, a, lda,
283 $ t, ldt, c, ldc, work, info)
287 IF(left.AND.notran)
THEN
291 kk = mod((m-k),(mb-k))
295 CALL ctpmqrt(
'L',
'N',kk , n, k, 0, nb, a(ii,1), lda,
296 $ t(1, ctr*k+1),ldt , c(1,1), ldc,
297 $ c(ii,1), ldc, work, info )
302 DO i=ii-(mb-k),mb+1,-(mb-k)
307 CALL ctpmqrt(
'L',
'N',mb-k , n, k, 0,nb, a(i,1), lda,
308 $ t(1,ctr*k+1),ldt, c(1,1), ldc,
309 $ c(i,1), ldc, work, info )
315 CALL cgemqrt(
'L',
'N',mb , n, k, nb, a(1,1), lda, t
316 $ ,ldt ,c(1,1), ldc, work, info )
318 ELSE IF (left.AND.tran)
THEN
322 kk = mod((m-k),(mb-k))
325 CALL cgemqrt(
'L',
'C',mb , n, k, nb, a(1,1), lda, t
326 $ ,ldt ,c(1,1), ldc, work, info )
328 DO i=mb+1,ii-mb+k,(mb-k)
332 CALL ctpmqrt(
'L',
'C',mb-k , n, k, 0,nb, a(i,1), lda,
333 $ t(1, ctr*k+1),ldt, c(1,1), ldc,
334 $ c(i,1), ldc, work, info )
342 CALL ctpmqrt(
'L',
'C',kk , n, k, 0,nb, a(ii,1), lda,
343 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
344 $ c(ii,1), ldc, work, info )
348 ELSE IF(right.AND.tran)
THEN
352 kk = mod((n-k),(mb-k))
356 CALL ctpmqrt(
'R',
'C',m , kk, k, 0, nb, a(ii,1), lda,
357 $ t(1, ctr*k+1), ldt, c(1,1), ldc,
358 $ c(1,ii), ldc, work, info )
363 DO i=ii-(mb-k),mb+1,-(mb-k)
368 CALL ctpmqrt(
'R',
'C',m , mb-k, k, 0,nb, a(i,1), lda,
369 $ t(1,ctr*k+1), ldt, c(1,1), ldc,
370 $ c(1,i), ldc, work, info )
375 CALL cgemqrt(
'R',
'C',m , mb, k, nb, a(1,1), lda, t
376 $ ,ldt ,c(1,1), ldc, work, info )
378 ELSE IF (right.AND.notran)
THEN
382 kk = mod((n-k),(mb-k))
385 CALL cgemqrt(
'R',
'N', m, mb , k, nb, a(1,1), lda, t
386 $ ,ldt ,c(1,1), ldc, work, info )
388 DO i=mb+1,ii-mb+k,(mb-k)
392 CALL ctpmqrt(
'R',
'N', m, mb-k, k, 0,nb, a(i,1), lda,
393 $ t(1,ctr*k+1),ldt, c(1,1), ldc,
394 $ c(1,i), ldc, work, info )
402 CALL ctpmqrt(
'R',
'N', m, kk , k, 0,nb, a(ii,1), lda,
403 $ t(1,ctr*k+1),ldt, c(1,1), ldc,
404 $ c(1,ii), ldc, work, info )