206 SUBROUTINE clarhs( PATH, XTYPE, UPLO, TRANS, M, N, KL, KU, NRHS,
207 $ A, LDA, X, LDX, B, LDB, ISEED, INFO )
214 CHARACTER TRANS, UPLO, XTYPE
216 INTEGER INFO, KL, KU, LDA, LDB, LDX, M, N, NRHS
220 COMPLEX A( LDA, * ), B( LDB, * ), X( LDX, * )
227 parameter( one = ( 1.0e+0, 0.0e+0 ),
228 $ zero = ( 0.0e+0, 0.0e+0 ) )
231 LOGICAL BAND, GEN, NOTRAN, QRS, SYM, TRAN, TRI
237 LOGICAL LSAME, LSAMEN
238 EXTERNAL lsame, lsamen
255 tran = lsame( trans,
'T' ) .OR. lsame( trans,
'C' )
257 gen = lsame( path( 2: 2 ),
'G' )
258 qrs = lsame( path( 2: 2 ),
'Q' ) .OR. lsame( path( 3: 3 ),
'Q' )
259 sym = lsame( path( 2: 2 ),
'P' ) .OR.
260 $ lsame( path( 2: 2 ),
'S' ) .OR. lsame( path( 2: 2 ),
'H' )
261 tri = lsame( path( 2: 2 ),
'T' )
262 band = lsame( path( 3: 3 ),
'B' )
263 IF( .NOT.lsame( c1,
'Complex precision' ) )
THEN
265 ELSE IF( .NOT.( lsame( xtype,
'N' ) .OR. lsame( xtype,
'C' ) ) )
268 ELSE IF( ( sym .OR. tri ) .AND. .NOT.
269 $ ( lsame( uplo,
'U' ) .OR. lsame( uplo,
'L' ) ) )
THEN
271 ELSE IF( ( gen.OR.qrs ) .AND.
272 $ .NOT.( tran .OR. lsame( trans,
'N' ) ) )
THEN
274 ELSE IF( m.LT.0 )
THEN
276 ELSE IF( n.LT.0 )
THEN
278 ELSE IF( band .AND. kl.LT.0 )
THEN
280 ELSE IF( band .AND. ku.LT.0 )
THEN
282 ELSE IF( nrhs.LT.0 )
THEN
284 ELSE IF( ( .NOT.band .AND. lda.LT.max( 1, m ) ) .OR.
285 $ ( band .AND. ( sym .OR. tri ) .AND. lda.LT.kl+1 ) .OR.
286 $ ( band .AND. gen .AND. lda.LT.kl+ku+1 ) )
THEN
288 ELSE IF( ( notran .AND. ldx.LT.max( 1, n ) ) .OR.
289 $ ( tran .AND. ldx.LT.max( 1, m ) ) )
THEN
291 ELSE IF( ( notran .AND. ldb.LT.max( 1, m ) ) .OR.
292 $ ( tran .AND. ldb.LT.max( 1, n ) ) )
THEN
296 CALL xerbla(
'CLARHS', -info )
309 IF( .NOT.lsame( xtype,
'C' ) )
THEN
311 CALL clarnv( 2, iseed, n, x( 1, j ) )
318 IF( lsamen( 2, c2,
'GE' ) .OR. lsamen( 2, c2,
'QR' ) .OR.
319 $ lsamen( 2, c2,
'LQ' ) .OR. lsamen( 2, c2,
'QL' ) .OR.
320 $ lsamen( 2, c2,
'RQ' ) )
THEN
324 CALL cgemm( trans,
'N', mb, nrhs, nx, one, a, lda, x, ldx,
327 ELSE IF( lsamen( 2, c2,
'PO' ) .OR. lsamen( 2, c2,
'HE' ) )
THEN
331 CALL chemm(
'Left', uplo, n, nrhs, one, a, lda, x, ldx, zero,
334 ELSE IF( lsamen( 2, c2,
'SY' ) )
THEN
338 CALL csymm(
'Left', uplo, n, nrhs, one, a, lda, x, ldx, zero,
341 ELSE IF( lsamen( 2, c2,
'GB' ) )
THEN
346 CALL cgbmv( trans, m, n, kl, ku, one, a, lda, x( 1, j ), 1,
347 $ zero, b( 1, j ), 1 )
350 ELSE IF( lsamen( 2, c2,
'PB' ) .OR. lsamen( 2, c2,
'HB' ) )
THEN
355 CALL chbmv( uplo, n, kl, one, a, lda, x( 1, j ), 1, zero,
359 ELSE IF( lsamen( 2, c2,
'SB' ) )
THEN
364 CALL csbmv( uplo, n, kl, one, a, lda, x( 1, j ), 1, zero,
368 ELSE IF( lsamen( 2, c2,
'PP' ) .OR. lsamen( 2, c2,
'HP' ) )
THEN
373 CALL chpmv( uplo, n, one, a, x( 1, j ), 1, zero, b( 1, j ),
377 ELSE IF( lsamen( 2, c2,
'SP' ) )
THEN
382 CALL cspmv( uplo, n, one, a, x( 1, j ), 1, zero, b( 1, j ),
386 ELSE IF( lsamen( 2, c2,
'TR' ) )
THEN
392 CALL clacpy(
'Full', n, nrhs, x, ldx, b, ldb )
398 CALL ctrmm(
'Left', uplo, trans, diag, n, nrhs, one, a, lda, b,
401 ELSE IF( lsamen( 2, c2,
'TP' ) )
THEN
405 CALL clacpy(
'Full', n, nrhs, x, ldx, b, ldb )
412 CALL ctpmv( uplo, trans, diag, n, a, b( 1, j ), 1 )
415 ELSE IF( lsamen( 2, c2,
'TB' ) )
THEN
419 CALL clacpy(
'Full', n, nrhs, x, ldx, b, ldb )
426 CALL ctbmv( uplo, trans, diag, n, kl, a, lda, b( 1, j ), 1 )
434 CALL xerbla(
'CLARHS', -info )