164 SUBROUTINE dgemqrt( SIDE, TRANS, M, N, K, NB, V, LDV, T, LDT,
165 $ C, LDC, WORK, INFO )
172 CHARACTER SIDE, TRANS
173 INTEGER INFO, K, LDV, LDC, M, N, NB, LDT
176 DOUBLE PRECISION V( LDV, * ), C( LDC, * ), T( LDT, * ), WORK( * )
183 LOGICAL LEFT, RIGHT, TRAN, NOTRAN
184 INTEGER I, IB, LDWORK, KF, Q
201 left = lsame( side,
'L' )
202 right = lsame( side,
'R' )
203 tran = lsame( trans,
'T' )
204 notran = lsame( trans,
'N' )
209 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 .OR. k.GT.q )
THEN
223 ELSE IF( nb.LT.1 .OR. (nb.GT.k .AND. k.GT.0))
THEN
225 ELSE IF( ldv.LT.max( 1, q ) )
THEN
227 ELSE IF( ldt.LT.nb )
THEN
229 ELSE IF( ldc.LT.max( 1, m ) )
THEN
234 CALL xerbla(
'DGEMQRT', -info )
240 IF( m.EQ.0 .OR. n.EQ.0 .OR. k.EQ.0 )
RETURN
242 IF( left .AND. tran )
THEN
245 ib = min( nb, k-i+1 )
246 CALL dlarfb(
'L',
'T',
'F',
'C', 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. notran )
THEN
254 ib = min( nb, k-i+1 )
255 CALL dlarfb(
'R',
'N',
'F',
'C', 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. notran )
THEN
264 ib = min( nb, k-i+1 )
265 CALL dlarfb(
'L',
'N',
'F',
'C', 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. tran )
THEN
274 ib = min( nb, k-i+1 )
275 CALL dlarfb(
'R',
'T',
'F',
'C', m, n-i+1, ib,
276 $ v( i, i ), ldv, t( 1, i ), ldt,
277 $ c( 1, i ), ldc, work, ldwork )
subroutine dgemqrt(side, trans, m, n, k, nb, v, ldv, t, ldt, c, ldc, work, info)
DGEMQRT
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.