172 SUBROUTINE dgemqr( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
173 $ C, LDC, WORK, LWORK, INFO )
180 CHARACTER SIDE, TRANS
181 INTEGER INFO, LDA, M, N, K, TSIZE, LWORK, LDC
184 DOUBLE PRECISION A( LDA, * ), T( * ), C( LDC, * ), WORK( * )
191 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
192 INTEGER MB, NB, LW, NBLCKS, MN
202 INTRINSIC int, max, min, mod
209 notran = lsame( trans,
'N' )
210 tran = lsame( trans,
'T' )
211 left = lsame( side,
'L' )
212 right = lsame( side,
'R' )
224 IF( ( mb.GT.k ) .AND. ( mn.GT.k ) )
THEN
225 IF( mod( mn - k, mb - k ).EQ.0 )
THEN
226 nblcks = ( mn - k ) / ( mb - k )
228 nblcks = ( mn - k ) / ( mb - k ) + 1
235 IF( .NOT.left .AND. .NOT.right )
THEN
237 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
239 ELSE IF( m.LT.0 )
THEN
241 ELSE IF( n.LT.0 )
THEN
243 ELSE IF( k.LT.0 .OR. k.GT.mn )
THEN
245 ELSE IF( lda.LT.max( 1, mn ) )
THEN
247 ELSE IF( tsize.LT.5 )
THEN
249 ELSE IF( ldc.LT.max( 1, m ) )
THEN
251 ELSE IF( ( lwork.LT.max( 1, lw ) ) .AND. ( .NOT.lquery ) )
THEN
260 CALL xerbla(
'DGEMQR', -info )
262 ELSE IF( lquery )
THEN
268 IF( min( m, n, k ).EQ.0 )
THEN
272 IF( ( left .AND. m.LE.k ) .OR. ( right .AND. n.LE.k )
273 $ .OR. ( mb.LE.k ) .OR. ( mb.GE.max( m, n, k ) ) )
THEN
274 CALL dgemqrt( side, trans, m, n, k, nb, a, lda, t( 6 ),
275 $ nb, c, ldc, work, info )
277 CALL dlamtsqr( side, trans, m, n, k, mb, nb, a, lda, t( 6 ),
278 $ nb, c, ldc, work, lwork, info )
subroutine xerbla(srname, info)
subroutine dgemqr(side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info)
DGEMQR
subroutine dgemqrt(side, trans, m, n, k, nb, v, ldv, t, ldt, c, ldc, work, info)
DGEMQRT
subroutine dlamtsqr(side, trans, m, n, k, mb, nb, a, lda, t, ldt, c, ldc, work, lwork, info)
DLAMTSQR