203 SUBROUTINE slarhs( PATH, XTYPE, UPLO, TRANS, M, N, KL, KU, NRHS,
204 $ A, LDA, X, LDX, B, LDB, ISEED, INFO )
211 CHARACTER TRANS, UPLO, XTYPE
213 INTEGER INFO, KL, KU, LDA, LDB, LDX, M, N, NRHS
217 REAL A( LDA, * ), B( LDB, * ), X( LDX, * )
224 parameter( one = 1.0e+0, zero = 0.0e+0 )
227 LOGICAL BAND, GEN, NOTRAN, QRS, SYM, TRAN, TRI
233 LOGICAL LSAME, LSAMEN
234 EXTERNAL lsame, lsamen
250 tran = lsame( trans,
'T' ) .OR. lsame( trans,
'C' )
252 gen = lsame( path( 2: 2 ),
'G' )
253 qrs = lsame( path( 2: 2 )
'Q''Q' )
254 sym = lsame( path( 2: 2 ),
'P' ) .OR. lsame( path( 2: 2 ),
'S' )
255 tri = lsame( path( 2: 2 ),
'T' )
256 band = lsame( path( 3: 3 ),
'B' )
257 IF( .NOT.lsame( c1,
'Single precision' ) )
THEN
259 ELSE IF( .NOT.( lsame( xtype,
'N' ) .OR. lsame( xtype,
'C' ) ) )
262 ELSE IF( ( sym .OR. tri ) .AND. .NOT.
263 $ ( lsame( uplo, 'u.OR.
' ) LSAME( UPLO, 'l
' ) ) ) THEN
265.OR..AND..NOT.
ELSE IF( ( GEN QRS )
266.OR.
$ ( TRAN LSAME( TRANS, 'n
' ) ) ) THEN
268.LT.
ELSE IF( M0 ) THEN
270.LT.
ELSE IF( N0 ) THEN
272.AND..LT.
ELSE IF( BAND KL0 ) THEN
274.AND..LT.
ELSE IF( BAND KU0 ) THEN
276.LT.
ELSE IF( NRHS0 ) THEN
278.NOT..AND..LT..OR.
ELSE IF( ( BAND LDAMAX( 1, M ) )
279.AND..OR..AND..LT..OR.
$ ( BAND ( SYM TRI ) LDAKL+1 )
280.AND..AND..LT.
$ ( BAND GEN LDAKL+KU+1 ) ) THEN
282.AND..LT..OR.
ELSE IF( ( NOTRAN LDXMAX( 1, N ) )
283.AND..LT.
$ ( TRAN LDXMAX( 1, M ) ) ) THEN
285.AND..LT..OR.
ELSE IF( ( NOTRAN LDBMAX( 1, M ) )
286.AND..LT.
$ ( TRAN LDBMAX( 1, N ) ) ) THEN
290 CALL XERBLA( 'slarhs', -INFO )
303.NOT.
IF( LSAME( XTYPE, 'c
' ) ) THEN
305 CALL SLARNV( 2, ISEED, N, X( 1, J ) )
312 IF( LSAMEN( 2, C2, 'ge.OR.
' ) LSAMEN( 2, C2, 'qr.OR.
' )
313 $ LSAMEN( 2, C2, 'lq.OR.
' ) LSAMEN( 2, C2, 'ql.OR.
' )
314 $ LSAMEN( 2, C2, 'rq
' ) ) THEN
318 CALL SGEMM( TRANS, 'n
', MB, NRHS, NX, ONE, A, LDA, X, LDX,
321 ELSE IF( LSAMEN( 2, C2, 'po.OR.
' ) LSAMEN( 2, C2, 'sy
' ) ) THEN
325 CALL SSYMM( 'left
', UPLO, N, NRHS, ONE, A, LDA, X, LDX, ZERO,
328 ELSE IF( LSAMEN( 2, C2, 'gb
' ) ) THEN
333 CALL SGBMV( TRANS, MB, NX, KL, KU, ONE, A, LDA, X( 1, J ),
334 $ 1, ZERO, B( 1, J ), 1 )
337 ELSE IF( LSAMEN( 2, C2, 'pb
' ) ) THEN
342 CALL SSBMV( UPLO, N, KL, ONE, A, LDA, X( 1, J ), 1, ZERO,
346 ELSE IF( LSAMEN( 2, C2, 'pp.OR.
' ) LSAMEN( 2, C2, 'sp
' ) ) THEN
351 CALL SSPMV( UPLO, N, ONE, A, X( 1, J ), 1, ZERO, B( 1, J ),
355 ELSE IF( LSAMEN( 2, C2, 'tr
' ) ) THEN
361 CALL SLACPY( 'full
', N, NRHS, X, LDX, B, LDB )
367 CALL STRMM( 'left
', UPLO, TRANS, DIAG, N, NRHS, ONE, A, LDA, B,
370 ELSE IF( LSAMEN( 2, C2, 'tp
' ) ) THEN
374 CALL SLACPY( 'full
', N, NRHS, X, LDX, B, LDB )
381 CALL STPMV( UPLO, TRANS, DIAG, N, A, B( 1, J ), 1 )
384 ELSE IF( LSAMEN( 2, C2, 'tb
' ) ) THEN
388 CALL SLACPY( 'full
', N, NRHS, X, LDX, B, LDB )
395 CALL STBMV( UPLO, TRANS, DIAG, N, KL, A, LDA, B( 1, J ), 1 )
403 CALL XERBLA( 'slarhs', -INFO )
subroutine slarnv(idist, iseed, n, x)
SLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
subroutine xerbla(srname, info)
XERBLA
subroutine sgbmv(trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y, incy)
SGBMV
subroutine stbmv(uplo, trans, diag, n, k, a, lda, x, incx)
STBMV
subroutine stpmv(uplo, trans, diag, n, ap, x, incx)
STPMV
subroutine ssbmv(uplo, n, k, alpha, a, lda, x, incx, beta, y, incy)
SSBMV
subroutine sspmv(uplo, n, alpha, ap, x, incx, beta, y, incy)
SSPMV
subroutine ssymm(side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc)
SSYMM
subroutine sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
SGEMM
subroutine strmm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRMM
subroutine slarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
SLARHS