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 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)
subroutine dgemlqt(SIDE, TRANS, M, N, K, MB, V, LDV, T, LDT, C, LDC, WORK, INFO)
DGEMLQT
subroutine xerbla(SRNAME, INFO)
XERBLA