171 SUBROUTINE sgemlq( 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 REAL A( LDA, * ), T( * ), C( LDC, * ), WORK( * )
190 LOGICAL LEFT, RIGHT, TRAN, NOTRAN, LQUERY
191 INTEGER MB, NB, LW, NBLCKS, MN, MINMNK, LWMIN
199 EXTERNAL sroundup_lwork
205 INTRINSIC int, max, min, mod
211 lquery = ( lwork.EQ.-1 )
212 notran = lsame( trans,
'N' )
213 tran = lsame( trans,
'T' )
214 left = lsame( side,
'L' )
215 right = lsame( side,
'R' )
227 minmnk = min( m, n, k )
228 IF( minmnk.EQ.0 )
THEN
234 IF( ( nb.GT.k ) .AND. ( mn.GT.k ) )
THEN
235 IF( mod( mn - k, nb - k ) .EQ. 0 )
THEN
236 nblcks = ( mn - k ) / ( nb - k )
238 nblcks = ( mn - k ) / ( nb - k ) + 1
245 IF( .NOT.left .AND. .NOT.right )
THEN
247 ELSE IF( .NOT.tran .AND. .NOT.notran )
THEN
249 ELSE IF( m.LT.0 )
THEN
251 ELSE IF( n.LT.0 )
THEN
253 ELSE IF( k.LT.0 .OR. k.GT.mn )
THEN
255 ELSE IF( lda.LT.max( 1, k ) )
THEN
257 ELSE IF( tsize.LT.5 )
THEN
259 ELSE IF( ldc.LT.max( 1, m ) )
THEN
261 ELSE IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
266 work( 1 ) = sroundup_lwork( lwmin )
270 CALL xerbla(
'SGEMLQ', -info )
272 ELSE IF( lquery )
THEN
278 IF( minmnk.EQ.0 )
THEN
282 IF( ( left .AND. m.LE.k ) .OR. ( right .AND. n.LE.k )
283 $ .OR. ( nb.LE.k ) .OR. ( nb.GE.max( m, n, k ) ) )
THEN
284 CALL sgemlqt( side, trans, m, n, k, mb, a, lda,
285 $ t( 6 ), mb, c, ldc, work, info )
287 CALL slamswlq( side, trans, m, n, k, mb, nb, a, lda, t( 6 ),
288 $ mb, c, ldc, work, lwork, info )
291 work( 1 ) = sroundup_lwork( lwmin )
subroutine sgemlq(side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info)
SGEMLQ
subroutine sgemlqt(side, trans, m, n, k, mb, v, ldv, t, ldt, c, ldc, work, info)
SGEMLQT
subroutine slamswlq(side, trans, m, n, k, mb, nb, a, lda, t, ldt, c, ldc, work, lwork, info)
SLAMSWLQ