201 SUBROUTINE ctpmlqt( SIDE, TRANS, M, N, K, L, MB, V, LDV, T, LDT,
202 $ A, LDA, B, LDB, WORK, INFO )
210 CHARACTER SIDE, TRANS
211 INTEGER INFO, K, LDV, LDA, LDB, M, N, L, MB, LDT
214 COMPLEX V( LDV, * ), A( LDA, * ), B( LDB, * ),
215 $ t( ldt, * ), work( * )
222 LOGICAL LEFT, RIGHT, TRAN, NOTRAN
223 INTEGER I, IB, NB, LB, KF, LDAQ
240 left = lsame( side,
'L' )
241 right = lsame( side,
'R' )
242 tran = lsame( trans,
'C' )
243 notran = lsame( trans,
'N' )
247 ELSE IF ( right )
THEN
250 IF( .NOT.left .AND. .NOT.right )
THEN
252 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
254 ELSE IF( m.LT.0 )
THEN
256 ELSE IF( n.LT.0 )
THEN
258 ELSE IF( k.LT.0 )
THEN
260 ELSE IF( l.LT.0 .OR. l.GT.k )
THEN
262 ELSE IF( mb.LT.1 .OR. (mb.GT.k .AND. k.GT.0) )
THEN
264 ELSE IF( ldv.LT.k )
THEN
266 ELSE IF( ldt.LT.mb )
THEN
268 ELSE IF( lda.LT.ldaq )
THEN
270 ELSE IF( ldb.LT.max( 1, m ) )
THEN
275 CALL xerbla(
'CTPMLQT', -info )
281 IF( m.EQ.0 .OR. n.EQ.0 .OR. k.EQ.0 )
RETURN
283 IF( left .AND. notran )
THEN
286 ib = min( mb, k-i+1 )
287 nb = min( m-l+i+ib-1, m )
293 CALL ctprfb(
'L',
'C',
'F',
'R', nb, n, ib, lb,
294 $ v( i, 1 ), ldv, t( 1, i ), ldt,
295 $ a( i, 1 ), lda, b, ldb, work, ib )
298 ELSE IF( right .AND. tran )
THEN
301 ib = min( mb, k-i+1 )
302 nb = min( n-l+i+ib-1, n )
308 CALL ctprfb(
'R',
'N',
'F',
'R', m, nb, ib, lb,
309 $ v( i, 1 ), ldv, t( 1, i ), ldt,
310 $ a( 1, i ), lda, b, ldb, work, m )
313 ELSE IF( left .AND. tran )
THEN
317 ib = min( mb, k-i+1 )
318 nb = min( m-l+i+ib-1, m )
324 CALL ctprfb(
'L',
'N',
'F',
'R', nb, n, ib, lb,
325 $ v( i, 1 ), ldv, t( 1, i ), ldt,
326 $ a( i, 1 ), lda, b, ldb, work, ib )
329 ELSE IF( right .AND. notran )
THEN
333 ib = min( mb, k-i+1 )
334 nb = min( n-l+i+ib-1, n )
340 CALL ctprfb(
'R',
'C',
'F',
'R', m, nb, ib, lb,
341 $ v( i, 1 ), ldv, t( 1, i ), ldt,
342 $ a( 1, i ), lda, b, ldb, work, m )