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
188 left = lsame( side,
'L' )
189 right = lsame( side,
'R' )
190 tran = lsame( trans,
'T' )
191 notran = lsame( trans,
'N' )
195 ELSE IF ( right )
THEN
198 IF( .NOT.left .AND. .NOT.right )
THEN
200 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
202 ELSE IF( m.LT.0 )
THEN
204 ELSE IF( n.LT.0 )
THEN
206 ELSE IF( k.LT.0)
THEN
208 ELSE IF( mb.LT.1 .OR. (mb.GT.k .AND. k.GT.0))
THEN
210 ELSE IF( ldv.LT.max( 1, k ) )
THEN
212 ELSE IF( ldt.LT.mb )
THEN
214 ELSE IF( ldc.LT.max( 1, m ) )
THEN
219 CALL xerbla(
'SGEMLQT', -info )
225 IF( m.EQ.0 .OR. n.EQ.0 .OR. k.EQ.0 )
RETURN
227 IF( left .AND. notran )
THEN
230 ib = min( mb, k-i+1 )
231 CALL slarfb(
'L',
'T',
'F',
'R', m-i+1, n, ib,
232 $ v( i, i ), ldv, t( 1, i ), ldt,
233 $ c( i, 1 ), ldc, work, ldwork )
236 ELSE IF( right .AND. tran )
THEN
239 ib = min( mb, k-i+1 )
240 CALL slarfb(
'R',
'N',
'F',
'R', m, n-i+1, ib,
241 $ v( i, i ), ldv, t( 1, i ), ldt,
242 $ c( 1, i ), ldc, work, ldwork )
245 ELSE IF( left .AND. tran )
THEN
249 ib = min( mb, k-i+1 )
250 CALL slarfb(
'L',
'N',
'F',
'R', m-i+1, n, ib,
251 $ v( i, i ), ldv, t( 1, i ), ldt,
252 $ c( i, 1 ), ldc, work, ldwork )
255 ELSE IF( right .AND. notran )
THEN
259 ib = min( mb, k-i+1 )
260 CALL slarfb(
'R',
'T',
'F',
'R', m, n-i+1, ib,
261 $ v( i, i ), ldv, t( 1, i ), ldt,
262 $ 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.