202 SUBROUTINE dlarhs( 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 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), X( LDX, * )
222 DOUBLE PRECISION ONE, ZERO
223 parameter( one = 1.0d+0, zero = 0.0d+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,
'Double 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(
'DLARHS', -info )
302 IF( .NOT.lsame( xtype,
'C' ) )
THEN
304 CALL dlarnv( 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 dgemm( 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 dsymm(
'Left', uplo, n, nrhs, one, a, lda, x, ldx, zero,
327 ELSE IF( lsamen( 2, c2,
'GB' ) )
THEN
332 CALL dgbmv( 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 dsbmv( 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 dspmv( uplo, n, one, a, x( 1, j ), 1, zero, b( 1, j ),
354 ELSE IF( lsamen( 2, c2,
'TR' ) )
THEN
360 CALL dlacpy(
'Full', n, nrhs, x, ldx, b, ldb )
366 CALL dtrmm(
'Left', uplo, trans, diag, n, nrhs, one, a, lda, b,
369 ELSE IF( lsamen( 2, c2,
'TP' ) )
THEN
373 CALL dlacpy(
'Full', n, nrhs, x, ldx, b, ldb )
380 CALL dtpmv( uplo, trans, diag, n, a, b( 1, j ), 1 )
383 ELSE IF( lsamen( 2, c2,
'TB' ) )
THEN
387 CALL dlacpy(
'Full', n, nrhs, x, ldx, b, ldb )
394 CALL dtbmv( uplo, trans, diag, n, kl, a, lda, b( 1, j ), 1 )
402 CALL xerbla(
'DLARHS', -info )
subroutine dlarnv(IDIST, ISEED, N, X)
DLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine dlacpy(UPLO, M, N, A, LDA, B, LDB)
DLACPY copies all or part of one two-dimensional array to another.
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dgbmv(TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
DGBMV
subroutine dtpmv(UPLO, TRANS, DIAG, N, AP, X, INCX)
DTPMV
subroutine dsbmv(UPLO, N, K, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
DSBMV
subroutine dtbmv(UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX)
DTBMV
subroutine dspmv(UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY)
DSPMV
subroutine dsymm(SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
DSYMM
subroutine dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
DGEMM
subroutine dtrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRMM
subroutine dlarhs(PATH, XTYPE, UPLO, TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B, LDB, ISEED, INFO)
DLARHS