166 SUBROUTINE dgemlqt( SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT,
167 $ C, LDC, WORK, INFO )
174 CHARACTER SIDE, TRANS
175 INTEGER INFO, K, LDV, LDC, M, N, MB, LDT
178 DOUBLE PRECISION V( LDV, * ), C( LDC, * ), T( , * ), WORK( * )
186INTEGER I, IB, LDWORK, , Q
203 left = lsame( side,
'L' )
204 right = lsame( side, 'r
' )
205 TRAN = LSAME( TRANS, 't
' )
206 NOTRAN = LSAME( TRANS, 'n
' )
211 ELSE IF ( RIGHT ) THEN
215.NOT..AND..NOT.
IF( LEFT RIGHT ) THEN
217.NOT..AND..NOT.
ELSE IF( TRAN NOTRAN ) THEN
219.LT.
ELSE IF( M0 ) THEN
221.LT.
ELSE IF( N0 ) THEN
223.LT..OR..GT.
ELSE IF( K0 KQ ) THEN
225.LT..OR..GT..AND..GT.
ELSE IF( MB1 (MBK K0)) THEN
227.LT.
ELSE IF( LDVMAX( 1, K ) ) THEN
229.LT.
ELSE IF( LDTMB ) THEN
231.LT.
ELSE IF( LDCMAX( 1, M ) ) THEN
236 CALL XERBLA( 'dgemlqt', -INFO )
242.EQ..OR..EQ..OR..EQ.
IF( M0 N0 K0 ) RETURN
244.AND.
IF( LEFT NOTRAN ) THEN
247 IB = MIN( MB, K-I+1 )
248 CALL DLARFB( 'l
', 't
', 'f
', 'r
', M-I+1, N, IB,
249 $ V( I, I ), LDV, T( 1, I ), LDT,
250 $ C( I, 1 ), LDC, WORK, LDWORK )
253.AND.
ELSE IF( RIGHT TRAN ) THEN
256 IB = MIN( MB, K-I+1 )
257 CALL DLARFB( 'r
', 'n',
'F',
'R', m, n-i+1, ib,
258 $ v( i, i ), ldv, t( 1, i ), ldt,
259 $ c( 1, i ), ldc, work, ldwork )
262 ELSE IF( left .AND. tran )
THEN
267 CALL dlarfb(
'L',
'N',
'F',
'R', m-i+1, n, ib,
268 $ v( i, i ), ldv, t( 1, i ), ldt,
269 $ c( i, 1 ), ldc, work, ldwork )
272 ELSE IF( right .AND. notran )
THEN
276 ib =
min( mb, k-i+1 )
277 CALL dlarfb(
'R',
'T',
'F',
'R', m, n-i+1, ib,
278 $ v( i, i ), ldv, t( 1, i ), ldt,
279 $ c( 1, i ), ldc, work, ldwork )
subroutine dgemlqt(side, trans, m, n, k, mb, v, ldv, t, ldt, c, ldc, work, info)
DGEMLQT
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.