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)
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.