151 SUBROUTINE sgemlqt( 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 REAL 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,
'T' )
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(
'SGEMLQT', -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 slarfb(
'L',
'T',
'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 slarfb(
'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 slarfb(
'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 slarfb(
'R',
'T',
'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)
XERBLA
subroutine sgemlqt(SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT, C, LDC, WORK, INFO)
SGEMLQT
subroutine slarfb(SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
SLARFB applies a block reflector or its transpose to a general rectangular matrix.