170 SUBROUTINE sgemqr( SIDE, TRANS, M, N, K, A, LDA, T, TSIZE,
171 $ C, LDC, WORK, LWORK, INFO )
178 CHARACTER SIDE, TRANS
179 INTEGER INFO, LDA, M, N, K, TSIZE, LWORK, LDC
182 REAL 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(
'SGEMQR', -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 sgemqrt( side, trans, m, n, k, nb, a, lda, t( 6 ),
273 $ nb, c, ldc, work, info )
275 CALL slamtsqr( side, trans, m, n, k, mb, nb, a, lda, t( 6 ),
276 $ nb, c, ldc, work, lwork, info )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sgemqrt(SIDE, TRANS, M, N, K, NB, V, LDV, T, LDT, C, LDC, WORK, INFO)
SGEMQRT
subroutine sgemqr(SIDE, TRANS, M, N, K, A, LDA, T, TSIZE, C, LDC, WORK, LWORK, INFO)
SGEMQR
subroutine slamtsqr(SIDE, TRANS, M, N, K, MB, NB, A, LDA, T, LDT, C, LDC, WORK, LWORK, INFO)
SLAMTSQR