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( LDT, * ), WORK( * )
185 LOGICAL LEFT, RIGHT, TRAN, NOTRAN
186 INTEGER I, IB, LDWORK, KF
203 left = lsame( side,
'L' )
204 right = lsame( side,
'R' )
205 tran = lsame( trans,
'T' )
206 notran = lsame( trans,
'N' )
210 ELSE IF ( right )
THEN
213 IF( .NOT.left .AND. .NOT.right )
THEN
215 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
217 ELSE IF( m.LT.0 )
THEN
219 ELSE IF( n.LT.0 )
THEN
221 ELSE IF( k.LT.0)
THEN
223 ELSE IF( mb.LT.1 .OR. (mb.GT.k .AND. k.GT.0))
THEN
225 ELSE IF( ldv.LT.max( 1, k ) )
THEN
227 ELSE IF( ldt.LT.mb )
THEN
229 ELSE IF( ldc.LT.max( 1, m ) )
THEN
234 CALL xerbla(
'DGEMLQT', -info )
240 IF( m.EQ.0 .OR. n.EQ.0 .OR. k.EQ.0 )
RETURN
242 IF( left .AND. notran )
THEN
245 ib = min( mb, k-i+1 )
246 CALL dlarfb(
'L',
'T',
'F',
'R', m-i+1, n, ib,
247 $ v( i, i ), ldv, t( 1, i ), ldt,
248 $ c( i, 1 ), ldc, work, ldwork )
251 ELSE IF( right .AND. tran )
THEN
254 ib = min( mb, k-i+1 )
255 CALL dlarfb(
'R',
'N',
'F',
'R', m, n-i+1, ib,
256 $ v( i, i ), ldv, t( 1, i ), ldt,
257 $ c( 1, i ), ldc, work, ldwork )
260 ELSE IF( left .AND. tran )
THEN
264 ib = min( mb, k-i+1 )
265 CALL dlarfb(
'L',
'N',
'F',
'R', m-i+1, n, ib,
266 $ v( i, i ), ldv, t( 1, i ), ldt,
267 $ c( i, 1 ), ldc, work, ldwork )
270 ELSE IF( right .AND. notran )
THEN
274 ib = min( mb, k-i+1 )
275 CALL dlarfb(
'R',
'T',
'F',
'R', m, n-i+1, ib,
276 $ v( i, i ), ldv, t( 1, i ), ldt,
277 $ c( 1, i ), ldc, work, ldwork )
subroutine xerbla(SRNAME, INFO)
XERBLA
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.