209 SUBROUTINE clarhs( PATH, XTYPE, UPLO, TRANS, M, N, KL, KU, NRHS,
210 $ a, lda, x, ldx, b, ldb, iseed, info )
218 CHARACTER TRANS, UPLO, XTYPE
220 INTEGER INFO, KL, KU, LDA, LDB, LDX, M, N, NRHS
224 COMPLEX A( lda, * ), B( ldb, * ), X( ldx, * )
231 parameter ( one = ( 1.0e+0, 0.0e+0 ),
232 $ zero = ( 0.0e+0, 0.0e+0 ) )
235 LOGICAL BAND, GEN, NOTRAN, QRS, SYM, TRAN, TRI
241 LOGICAL LSAME, LSAMEN
242 EXTERNAL lsame, lsamen
259 tran = lsame( trans,
'T' ) .OR. lsame( trans,
'C' )
261 gen = lsame( path( 2: 2 ),
'G' )
262 qrs = lsame( path( 2: 2 ),
'Q' ) .OR. lsame( path( 3: 3 ),
'Q' )
263 sym = lsame( path( 2: 2 ),
'P' ) .OR.
264 $ lsame( path( 2: 2 ),
'S' ) .OR. lsame( path( 2: 2 ),
'H' )
265 tri = lsame( path( 2: 2 ),
'T' )
266 band = lsame( path( 3: 3 ),
'B' )
267 IF( .NOT.lsame( c1,
'Complex precision' ) )
THEN
269 ELSE IF( .NOT.( lsame( xtype,
'N' ) .OR. lsame( xtype,
'C' ) ) )
272 ELSE IF( ( sym .OR. tri ) .AND. .NOT.
273 $ ( lsame( uplo,
'U' ) .OR. lsame( uplo,
'L' ) ) )
THEN
275 ELSE IF( ( gen.OR.qrs ) .AND.
276 $ .NOT.( tran .OR. lsame( trans,
'N' ) ) )
THEN
278 ELSE IF( m.LT.0 )
THEN
280 ELSE IF( n.LT.0 )
THEN
282 ELSE IF( band .AND. kl.LT.0 )
THEN
284 ELSE IF( band .AND. ku.LT.0 )
THEN
286 ELSE IF( nrhs.LT.0 )
THEN
288 ELSE IF( ( .NOT.band .AND. lda.LT.max( 1, m ) ) .OR.
289 $ ( band .AND. ( sym .OR. tri ) .AND. lda.LT.kl+1 ) .OR.
290 $ ( band .AND. gen .AND. lda.LT.kl+ku+1 ) )
THEN
292 ELSE IF( ( notran .AND. ldx.LT.max( 1, n ) ) .OR.
293 $ ( tran .AND. ldx.LT.max( 1, m ) ) )
THEN
295 ELSE IF( ( notran .AND. ldb.LT.max( 1, m ) ) .OR.
296 $ ( tran .AND. ldb.LT.max( 1, n ) ) )
THEN
300 CALL xerbla(
'CLARHS', -info )
313 IF( .NOT.lsame( xtype,
'C' ) )
THEN
315 CALL clarnv( 2, iseed, n, x( 1, j ) )
322 IF( lsamen( 2, c2,
'GE' ) .OR. lsamen( 2, c2,
'QR' ) .OR.
323 $ lsamen( 2, c2,
'LQ' ) .OR. lsamen( 2, c2,
'QL' ) .OR.
324 $ lsamen( 2, c2,
'RQ' ) )
THEN
328 CALL cgemm( trans,
'N', mb, nrhs, nx, one, a, lda, x, ldx,
331 ELSE IF( lsamen( 2, c2,
'PO' ) .OR. lsamen( 2, c2,
'HE' ) )
THEN
335 CALL chemm(
'Left', uplo, n, nrhs, one, a, lda, x, ldx, zero,
338 ELSE IF( lsamen( 2, c2,
'SY' ) )
THEN
342 CALL csymm(
'Left', uplo, n, nrhs, one, a, lda, x, ldx, zero,
345 ELSE IF( lsamen( 2, c2,
'GB' ) )
THEN
350 CALL cgbmv( trans, m, n, kl, ku, one, a, lda, x( 1, j ), 1,
351 $ zero, b( 1, j ), 1 )
354 ELSE IF( lsamen( 2, c2,
'PB' ) .OR. lsamen( 2, c2,
'HB' ) )
THEN
359 CALL chbmv( uplo, n, kl, one, a, lda, x( 1, j ), 1, zero,
363 ELSE IF( lsamen( 2, c2,
'SB' ) )
THEN
368 CALL csbmv( uplo, n, kl, one, a, lda, x( 1, j ), 1, zero,
372 ELSE IF( lsamen( 2, c2,
'PP' ) .OR. lsamen( 2, c2,
'HP' ) )
THEN
377 CALL chpmv( uplo, n, one, a, x( 1, j ), 1, zero, b( 1, j ),
381 ELSE IF( lsamen( 2, c2,
'SP' ) )
THEN
386 CALL cspmv( uplo, n, one, a, x( 1, j ), 1, zero, b( 1, j ),
390 ELSE IF( lsamen( 2, c2,
'TR' ) )
THEN
396 CALL clacpy(
'Full', n, nrhs, x, ldx, b, ldb )
402 CALL ctrmm(
'Left', uplo, trans, diag, n, nrhs, one, a, lda, b,
405 ELSE IF( lsamen( 2, c2,
'TP' ) )
THEN
409 CALL clacpy(
'Full', n, nrhs, x, ldx, b, ldb )
416 CALL ctpmv( uplo, trans, diag, n, a, b( 1, j ), 1 )
419 ELSE IF( lsamen( 2, c2,
'TB' ) )
THEN
423 CALL clacpy(
'Full', n, nrhs, x, ldx, b, ldb )
430 CALL ctbmv( uplo, trans, diag, n, kl, a, lda, b( 1, j ), 1 )
438 CALL xerbla(
'CLARHS', -info )
subroutine ctpmv(UPLO, TRANS, DIAG, N, AP, X, INCX)
CTPMV
subroutine csbmv(UPLO, N, K, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CSBMV
subroutine clarhs(PATH, XTYPE, UPLO, TRANS, M, N, KL, KU, NRHS, A, LDA, X, LDX, B, LDB, ISEED, INFO)
CLARHS
subroutine chbmv(UPLO, N, K, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CHBMV
subroutine csymm(SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CSYMM
subroutine chpmv(UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY)
CHPMV
subroutine cspmv(UPLO, N, ALPHA, AP, X, INCX, BETA, Y, INCY)
CSPMV computes a matrix-vector product for complex vectors using a complex symmetric packed matrix ...
subroutine chemm(SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CHEMM
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine cgbmv(TRANS, M, N, KL, KU, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
CGBMV
subroutine clarnv(IDIST, ISEED, N, X)
CLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine ctbmv(UPLO, TRANS, DIAG, N, K, A, LDA, X, INCX)
CTBMV
subroutine clacpy(UPLO, M, N, A, LDA, B, LDB)
CLACPY copies all or part of one two-dimensional array to another.
subroutine ctrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CTRMM
subroutine cgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CGEMM