202 SUBROUTINE slarhs( PATH, XTYPE, UPLO, TRANS, M, N, KL, KU, NRHS,
203 $ A, LDA, X, LDX, B, LDB, ISEED, INFO )
210 CHARACTER TRANS, UPLO, XTYPE
212 INTEGER INFO, KL, KU, LDA, LDB, LDX, M, N, NRHS
216 REAL A( LDA, * ), B( LDB, * ), X( LDX, * )
223 parameter( one = 1.0e+0, zero = 0.0e+0 )
226 LOGICAL BAND, GEN, NOTRAN, QRS, SYM, TRAN, TRI
232 LOGICAL LSAME, LSAMEN
233 EXTERNAL lsame, lsamen
249 tran = lsame( trans,
'T' ) .OR. lsame( trans,
'C' )
251 gen = lsame( path( 2: 2 ),
'G' )
252 qrs = lsame( path( 2: 2 ),
'Q' ) .OR. lsame( path( 3: 3 ),
'Q' )
253 sym = lsame( path( 2: 2 ),
'P' ) .OR. lsame( path( 2: 2 ),
'S' )
254 tri = lsame( path( 2: 2 ),
'T' )
255 band = lsame( path( 3: 3 ),
'B' )
256 IF( .NOT.lsame( c1,
'Single precision' ) )
THEN
258 ELSE IF( .NOT.( lsame( xtype,
'N' ) .OR. lsame( xtype,
'C' ) ) )
261 ELSE IF( ( sym .OR. tri ) .AND. .NOT.
262 $ ( lsame( uplo,
'U' ) .OR. lsame( uplo,
'L' ) ) )
THEN
264 ELSE IF( ( gen .OR. qrs ) .AND. .NOT.
265 $ ( tran .OR. lsame( trans,
'N' ) ) )
THEN
267 ELSE IF( m.LT.0 )
THEN
269 ELSE IF( n.LT.0 )
THEN
271 ELSE IF( band .AND. kl.LT.0 )
THEN
273 ELSE IF( band .AND. ku.LT.0 )
THEN
275 ELSE IF( nrhs.LT.0 )
THEN
277 ELSE IF( ( .NOT.band .AND. lda.LT.max( 1, m ) ) .OR.
278 $ ( band .AND. ( sym .OR. tri ) .AND. lda.LT.kl+1 ) .OR.
279 $ ( band .AND. gen .AND. lda.LT.kl+ku+1 ) )
THEN
281 ELSE IF( ( notran .AND. ldx.LT.max( 1, n ) ) .OR.
282 $ ( tran .AND. ldx.LT.max( 1, m ) ) )
THEN
284 ELSE IF( ( notran .AND. ldb.LT.max( 1, m ) ) .OR.
285 $ ( tran .AND. ldb.LT.max( 1, n ) ) )
THEN
289 CALL xerbla(
'SLARHS', -info )
302 IF( .NOT.lsame( xtype,
'C' ) )
THEN
304 CALL slarnv( 2, iseed, n, x( 1, j ) )
311 IF( lsamen( 2, c2,
'GE' ) .OR. lsamen( 2, c2,
'QR' ) .OR.
312 $ lsamen( 2, c2,
'LQ' ) .OR. lsamen( 2, c2,
'QL' ) .OR.
313 $ lsamen( 2, c2,
'RQ' ) )
THEN
317 CALL sgemm( trans,
'N', mb, nrhs, nx, one, a, lda, x, ldx,
320 ELSE IF( lsamen( 2, c2,
'PO' ) .OR. lsamen( 2, c2,
'SY' ) )
THEN
324 CALL ssymm(
'Left', uplo, n, nrhs, one, a, lda, x, ldx, zero,
327 ELSE IF( lsamen( 2, c2,
'GB' ) )
THEN
332 CALL sgbmv( trans, mb, nx, kl, ku, one, a, lda, x( 1, j ),
333 $ 1, zero, b( 1, j ), 1 )
336 ELSE IF( lsamen( 2, c2,
'PB' ) )
THEN
341 CALL ssbmv( uplo, n, kl, one, a, lda, x( 1, j ), 1, zero,
345 ELSE IF( lsamen( 2, c2,
'PP' ) .OR. lsamen( 2, c2,
'SP' ) )
THEN
350 CALL sspmv( uplo, n, one, a, x( 1, j ), 1, zero, b( 1, j ),
354 ELSE IF( lsamen( 2, c2,
'TR' ) )
THEN
360 CALL slacpy(
'Full', n, nrhs, x, ldx, b, ldb )
366 CALL strmm(
'Left', uplo, trans, diag, n, nrhs, one, a, lda, b,
369 ELSE IF( lsamen( 2, c2,
'TP' ) )
THEN
373 CALL slacpy(
'Full', n, nrhs, x, ldx, b, ldb )
380 CALL stpmv( uplo, trans, diag, n, a, b( 1, j ), 1 )
383 ELSE IF( lsamen( 2, c2,
'TB' ) )
THEN
387 CALL slacpy(
'Full', n, nrhs, x, ldx, b, ldb )
394 CALL stbmv( uplo, trans, diag, n, kl, a, lda, b( 1, j ), 1 )
402 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 stpmv(UPLO, TRANS, DIAG, N, AP, X, INCX)
STPMV
subroutine stbmv(UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX)
STBMV
subroutine sspmv(UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY)
SSPMV
subroutine ssbmv(UPLO, N, K, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
SSBMV
subroutine strmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
STRMM
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 slarhs(PATH, XTYPE, UPLO, TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B, LDB, ISEED, INFO)
SLARHS