131 SUBROUTINE ssytrs_aa( UPLO, N, NRHS, A, LDA, IPIV, B, LDB,
132 $ WORK, LWORK, INFO )
143 INTEGER N, NRHS, LDA, LDB, LWORK, INFO
147 REAL A( LDA, * ), B( LDB, * ), WORK( * )
153 parameter( one = 1.0e+0 )
156 LOGICAL LQUERY, UPPER
157 INTEGER K, KP, LWKOPT
172 upper = lsame( uplo,
'U' )
173 lquery = ( lwork.EQ.-1 )
174 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
176 ELSE IF( n.LT.0 )
THEN
178 ELSE IF( nrhs.LT.0 )
THEN
180 ELSE IF( lda.LT.max( 1, n ) )
THEN
182 ELSE IF( ldb.LT.max( 1, n ) )
THEN
184 ELSE IF( lwork.LT.max( 1, 3*n-2 ) .AND. .NOT.lquery )
THEN
188 CALL xerbla(
'SSYTRS_AA', -info )
190 ELSE IF( lquery )
THEN
198 IF( n.EQ.0 .OR. nrhs.EQ.0 )
215 $
CALL sswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
221 CALL strsm(
'L',
'U',
'T',
'U', n-1, nrhs, one, a( 1, 2 ),
222 $ lda, b( 2, 1 ), ldb)
229 CALL slacpy(
'F', 1, n, a(1, 1), lda+1, work(n), 1)
231 CALL slacpy(
'F', 1, n-1, a(1, 2), lda+1, work(1), 1)
232 CALL slacpy(
'F', 1, n-1, a(1, 2), lda+1, work(2*n), 1)
234 CALL sgtsv(n, nrhs, work(1), work(n), work(2*n), b, ldb,
244 CALL strsm(
'L',
'U',
'N',
'U', n-1, nrhs, one, a( 1, 2 ),
253 $
CALL sswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
272 $
CALL sswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
278 CALL strsm(
'L',
'L',
'N',
'U', n-1, nrhs, one, a( 2, 1),
286 CALL slacpy(
'F', 1, n, a(1, 1), lda+1, work(n), 1)
288 CALL slacpy(
'F', 1, n-1, a(2, 1), lda+1, work(1), 1)
289 CALL slacpy(
'F', 1, n-1, a(2, 1), lda+1, work(2*n), 1)
291 CALL sgtsv(n, nrhs, work(1), work(n), work(2*n), b, ldb,
300 CALL strsm(
'L',
'L',
'T',
'U', n-1, nrhs, one, a( 2, 1 ),
301 $ lda, b( 2, 1 ), ldb)
309 $
CALL sswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )