171 SUBROUTINE dgemlq( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
172 $ C, LDC, WORK, LWORK, INFO )
179 CHARACTER SIDE, TRANS
180 INTEGER INFO, LDA, M, N, K, TSIZE, LWORK, LDC
183 DOUBLE PRECISION A( LDA, * ), T( * ), C( LDC, * ), WORK( * )
190 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
191 INTEGER MB, NB, LW, NBLCKS, MN
201 INTRINSIC int, max, min, mod
208 notran = lsame( trans,
'N' )
209 tran = lsame( trans,
'T' )
210 left = lsame( side,
'L' )
211 right = lsame( side,
'R' )
223 IF( ( nb.GT.k ) .AND. ( mn.GT.k ) )
THEN
224 IF( mod( mn - k, nb - k ) .EQ. 0 )
THEN
225 nblcks = ( mn - k ) / ( nb - k )
227 nblcks = ( mn - k ) / ( nb - k ) + 1
234 IF( .NOT.left .AND. .NOT.right )
THEN
236 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
238 ELSE IF( m.LT.0 )
THEN
240 ELSE IF( n.LT.0 )
THEN
242 ELSE IF( k.LT.0 .OR. k.GT.mn )
THEN
244 ELSE IF( lda.LT.max( 1, k ) )
THEN
246 ELSE IF( tsize.LT.5 )
THEN
248 ELSE IF( ldc.LT.max( 1, m ) )
THEN
250 ELSE IF( ( lwork.LT.max( 1, lw ) ) .AND. ( .NOT.lquery ) )
THEN
259 CALL xerbla(
'DGEMLQ', -info )
261 ELSE IF( lquery )
THEN
267 IF( min( m, n, k ).EQ.0 )
THEN
271 IF( ( left .AND. m.LE.k ) .OR. ( right .AND. n.LE.k )
272 $ .OR. ( nb.LE.k ) .OR. ( nb.GE.max( m, n, k ) ) )
THEN
273 CALL dgemlqt( side, trans, m, n, k, mb, a, lda,
274 $ t( 6 ), mb, c, ldc, work, info )
276 CALL dlamswlq( side, trans, m, n, k, mb, nb, a, lda, t( 6 ),
277 $ mb, c, ldc, work, lwork, info )
subroutine xerbla(srname, info)
subroutine dgemlq(side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info)
DGEMLQ
subroutine dgemlqt(side, trans, m, n, k, mb, v, ldv, t, ldt, c, ldc, work, info)
DGEMLQT
subroutine dlamswlq(side, trans, m, n, k, mb, nb, a, lda, t, ldt, c, ldc, work, lwork, info)
DLAMSWLQ