151 SUBROUTINE cgemlqt( SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT,
152 $ C, LDC, WORK, INFO )
159 CHARACTER SIDE, TRANS
160 INTEGER INFO, K, LDV, LDC, M, N, MB, LDT
163 COMPLEX V( LDV, * ), C( LDC, * ), T( LDT, * ), WORK( * )
170 LOGICAL LEFT, RIGHT, TRAN, NOTRAN
171 INTEGER I, IB, LDWORK, KF, Q
188 left = lsame( side,
'L' )
189 right = lsame( side,
'R' )
190 tran = lsame( trans,
'C' )
191 notran = lsame( trans,
'N' )
196 ELSE IF ( right )
THEN
200 IF( .NOT.left .AND. .NOT.right )
THEN
202 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
204 ELSE IF( m.LT.0 )
THEN
206 ELSE IF( n.LT.0 )
THEN
208 ELSE IF( k.LT.0 .OR. k.GT.q )
THEN
210 ELSE IF( mb.LT.1 .OR. (mb.GT.k .AND. k.GT.0))
THEN
212 ELSE IF( ldv.LT.max( 1, k ) )
THEN
214 ELSE IF( ldt.LT.mb )
THEN
216 ELSE IF( ldc.LT.max( 1, m ) )
THEN
221 CALL xerbla(
'CGEMLQT', -info )
227 IF( m.EQ.0 .OR. n.EQ.0 .OR. k.EQ.0 )
RETURN
229 IF( left .AND. notran )
THEN
232 ib = min( mb, k-i+1 )
233 CALL clarfb(
'L',
'C',
'F',
'R', m-i+1, n, ib,
234 $ v( i, i ), ldv, t( 1, i ), ldt,
235 $ c( i, 1 ), ldc, work, ldwork )
238 ELSE IF( right .AND. tran )
THEN
241 ib = min( mb, k-i+1 )
242 CALL clarfb(
'R',
'N',
'F',
'R', m, n-i+1, ib,
243 $ v( i, i ), ldv, t( 1, i ), ldt,
244 $ c( 1, i ), ldc, work, ldwork )
247 ELSE IF( left .AND. tran )
THEN
251 ib = min( mb, k-i+1 )
252 CALL clarfb(
'L',
'N',
'F',
'R', m-i+1, n, ib,
253 $ v( i, i ), ldv, t( 1, i ), ldt,
254 $ c( i, 1 ), ldc, work, ldwork )
257 ELSE IF( right .AND. notran )
THEN
261 ib = min( mb, k-i+1 )
262 CALL clarfb(
'R',
'C',
'F',
'R', m, n-i+1, ib,
263 $ v( i, i ), ldv, t( 1, i ), ldt,
264 $ c( 1, i ), ldc, work, ldwork )
subroutine xerbla(srname, info)
subroutine cgemlqt(side, trans, m, n, k, mb, v, ldv, t, ldt, c, ldc, work, info)
CGEMLQT
subroutine clarfb(side, trans, direct, storev, m, n, k, v, ldv, t, ldt, c, ldc, work, ldwork)
CLARFB applies a block reflector or its conjugate-transpose to a general rectangular matrix.