169 SUBROUTINE dgemqr( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
170 $ C, LDC, WORK, LWORK, INFO )
178 CHARACTER SIDE, TRANS
179 INTEGER INFO, LDA, M, N, K, TSIZE, LWORK, LDC
182 DOUBLE PRECISION A( lda, * ), T( * ), C( ldc, * ), WORK( * )
189 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
190 INTEGER MB, NB, LW, NBLCKS, MN
200 INTRINSIC int, max, min, mod
207 notran = lsame( trans,
'N' )
208 tran = lsame( trans,
'T' )
209 left = lsame( side,
'L' )
210 right = lsame( side,
'R' )
222 IF( ( mb.GT.k ) .AND. ( mn.GT.k ) )
THEN 223 IF( mod( mn - k, mb - k ).EQ.0 )
THEN 224 nblcks = ( mn - k ) / ( mb - k )
226 nblcks = ( mn - k ) / ( mb - k ) + 1
233 IF( .NOT.left .AND. .NOT.right )
THEN 235 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN 237 ELSE IF( m.LT.0 )
THEN 239 ELSE IF( n.LT.0 )
THEN 241 ELSE IF( k.LT.0 .OR. k.GT.mn )
THEN 243 ELSE IF( lda.LT.max( 1, mn ) )
THEN 245 ELSE IF( tsize.LT.5 )
THEN 247 ELSE IF( ldc.LT.max( 1, m ) )
THEN 249 ELSE IF( ( lwork.LT.max( 1, lw ) ) .AND. ( .NOT.lquery ) )
THEN 258 CALL xerbla(
'DGEMQR', -info )
260 ELSE IF( lquery )
THEN 266 IF( min( m, n, k ).EQ.0 )
THEN 270 IF( ( left .AND. m.LE.k ) .OR. ( right .AND. n.LE.k )
271 $ .OR. ( mb.LE.k ) .OR. ( mb.GE.max( m, n, k ) ) )
THEN 272 CALL dgemqrt( side, trans, m, n, k, nb, a, lda, t( 6 ),
273 $ nb, c, ldc, work, info )
275 CALL dlamtsqr( side, trans, m, n, k, mb, nb, a, lda, t( 6 ),
276 $ nb, c, ldc, work, lwork, info )
subroutine dlamtsqr(SIDE, TRANS, M, N, K, MB, NB, A, LDA, T, LDT, C, LDC, WORK, LWORK, INFO)
subroutine dgemqrt(SIDE, TRANS, M, N, K, NB, V, LDV, T, LDT, C, LDC, WORK, INFO)
DGEMQRT
subroutine dgemqr(SIDE, TRANS, M, N, K, A, LDA, T, TSIZE, C, LDC, WORK, LWORK, INFO)
subroutine xerbla(SRNAME, INFO)
XERBLA