168 SUBROUTINE dgemlqt( SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT,
169 $ C, LDC, WORK, INFO )
177 CHARACTER SIDE, TRANS
178 INTEGER INFO, K, LDV, LDC, M, N, MB, LDT
181 DOUBLE PRECISION V( ldv, * ), C( ldc, * ), T( ldt, * ), WORK( * )
188 LOGICAL LEFT, RIGHT, TRAN, NOTRAN
189 INTEGER I, IB, LDWORK, KF, Q
206 left = lsame( side,
'L' )
207 right = lsame( side,
'R' )
208 tran = lsame( trans,
'T' )
209 notran = lsame( trans,
'N' )
213 ELSE IF ( right )
THEN 216 IF( .NOT.left .AND. .NOT.right )
THEN 218 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN 220 ELSE IF( m.LT.0 )
THEN 222 ELSE IF( n.LT.0 )
THEN 224 ELSE IF( k.LT.0)
THEN 226 ELSE IF( mb.LT.1 .OR. (mb.GT.k .AND. k.GT.0))
THEN 228 ELSE IF( ldv.LT.max( 1, k ) )
THEN 230 ELSE IF( ldt.LT.mb )
THEN 232 ELSE IF( ldc.LT.max( 1, m ) )
THEN 237 CALL xerbla(
'DGEMLQT', -info )
243 IF( m.EQ.0 .OR. n.EQ.0 .OR. k.EQ.0 )
RETURN 245 IF( left .AND. notran )
THEN 248 ib = min( mb, k-i+1 )
249 CALL dlarfb(
'L',
'T',
'F',
'R', m-i+1, n, ib,
250 $ v( i, i ), ldv, t( 1, i ), ldt,
251 $ c( i, 1 ), ldc, work, ldwork )
254 ELSE IF( right .AND. tran )
THEN 257 ib = min( mb, k-i+1 )
258 CALL dlarfb(
'R',
'N',
'F',
'R', m, n-i+1, ib,
259 $ v( i, i ), ldv, t( 1, i ), ldt,
260 $ c( 1, i ), ldc, work, ldwork )
263 ELSE IF( left .AND. tran )
THEN 267 ib = min( mb, k-i+1 )
268 CALL dlarfb(
'L',
'N',
'F',
'R', m-i+1, n, ib,
269 $ v( i, i ), ldv, t( 1, i ), ldt,
270 $ c( i, 1 ), ldc, work, ldwork )
273 ELSE IF( right .AND. notran )
THEN 277 ib = min( mb, k-i+1 )
278 CALL dlarfb(
'R',
'T',
'F',
'R', m, n-i+1, ib,
279 $ v( i, i ), ldv, t( 1, i ), ldt,
280 $ c( 1, i ), ldc, work, ldwork )
subroutine dgemlqt(SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT, C, LDC, WORK, INFO)
DGEMLQT
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dlarfb(SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, T, LDT, C, LDC, WORK, LDWORK)
DLARFB applies a block reflector or its transpose to a general rectangular matrix.