168 SUBROUTINE dgemlq( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
169 $ C, LDC, WORK, LWORK, INFO )
177 CHARACTER SIDE, TRANS
178 INTEGER INFO, LDA, M, N, K, TSIZE, LWORK, LDC
181 DOUBLE PRECISION A( lda, * ), T( * ), C( ldc, * ), WORK( * )
188 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
189 INTEGER MB, NB, LW, NBLCKS, MN
199 INTRINSIC int, max, min, mod
206 notran = lsame( trans,
'N' )
207 tran = lsame( trans,
'T' )
208 left = lsame( side,
'L' )
209 right = lsame( side,
'R' )
221 IF( ( nb.GT.k ) .AND. ( mn.GT.k ) )
THEN 222 IF( mod( mn - k, nb - k ) .EQ. 0 )
THEN 223 nblcks = ( mn - k ) / ( nb - k )
225 nblcks = ( mn - k ) / ( nb - k ) + 1
232 IF( .NOT.left .AND. .NOT.right )
THEN 234 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN 236 ELSE IF( m.LT.0 )
THEN 238 ELSE IF( n.LT.0 )
THEN 240 ELSE IF( k.LT.0 .OR. k.GT.mn )
THEN 242 ELSE IF( lda.LT.max( 1, k ) )
THEN 244 ELSE IF( tsize.LT.5 )
THEN 246 ELSE IF( ldc.LT.max( 1, m ) )
THEN 248 ELSE IF( ( lwork.LT.max( 1, lw ) ) .AND. ( .NOT.lquery ) )
THEN 257 CALL xerbla(
'DGEMLQ', -info )
259 ELSE IF( lquery )
THEN 265 IF( min( m, n, k ).EQ.0 )
THEN 269 IF( ( left .AND. m.LE.k ) .OR. ( right .AND. n.LE.k )
270 $ .OR. ( nb.LE.k ) .OR. ( nb.GE.max( m, n, k ) ) )
THEN 271 CALL dgemlqt( side, trans, m, n, k, mb, a, lda,
272 $ t( 6 ), mb, c, ldc, work, info )
274 CALL dlamswlq( side, trans, m, n, k, mb, nb, a, lda, t( 6 ),
275 $ mb, c, ldc, work, lwork, info )
subroutine dgemlqt(SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT, C, LDC, WORK, INFO)
DGEMLQT
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dgemlq(SIDE, TRANS, M, N, K, A, LDA, T, TSIZE, C, LDC, WORK, LWORK, INFO)
subroutine dlamswlq(SIDE, TRANS, M, N, K, MB, NB, A, LDA, T, LDT, C, LDC, WORK, LWORK, INFO)