132 SUBROUTINE zhetrs_aa( UPLO, N, NRHS, A, LDA, IPIV, B, LDB,
133 $ WORK, LWORK, INFO )
144 INTEGER N, NRHS, LDA, LDB, LWORK, INFO
148 COMPLEX*16 A( LDA, * ), B( LDB, * ), WORK( * )
154 parameter( one = 1.0d+0 )
157 LOGICAL LQUERY, UPPER
158 INTEGER K, KP, LWKOPT
173 upper = lsame( uplo,
'U' )
174 lquery = ( lwork.EQ.-1 )
175 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
177 ELSE IF( n.LT.0 )
THEN
179 ELSE IF( nrhs.LT.0 )
THEN
181 ELSE IF( lda.LT.max( 1, n ) )
THEN
183 ELSE IF( ldb.LT.max( 1, n ) )
THEN
185 ELSE IF( lwork.LT.max( 1, 3*n-2 ) .AND. .NOT.lquery )
THEN
189 CALL xerbla(
'ZHETRS_AA', -info )
191 ELSE IF( lquery )
THEN
199 IF( n.EQ.0 .OR. nrhs.EQ.0 )
215 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
220 CALL ztrsm(
'L',
'U',
'C',
'U', n-1, nrhs, one, a( 1, 2 ),
221 $ lda, b( 2, 1 ), ldb )
228 CALL zlacpy(
'F', 1, n, a(1, 1), lda+1, work(n), 1 )
230 CALL zlacpy(
'F', 1, n-1, a( 1, 2 ), lda+1, work( 2*n ), 1)
231 CALL zlacpy(
'F', 1, n-1, a( 1, 2 ), lda+1, work( 1 ), 1 )
232 CALL zlacgv( n-1, work( 1 ), 1 )
234 CALL zgtsv( n, nrhs, work(1), work(n), work(2*n), b, ldb,
243 CALL ztrsm(
'L',
'U',
'N',
'U', n-1, nrhs, one, a( 1, 2 ),
251 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
268 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
273 CALL ztrsm(
'L',
'L',
'N',
'U', n-1, nrhs, one, a( 2, 1 ),
281 CALL zlacpy(
'F', 1, n, a(1, 1), lda+1, work(n), 1)
283 CALL zlacpy(
'F', 1, n-1, a( 2, 1 ), lda+1, work( 1 ), 1)
284 CALL zlacpy(
'F', 1, n-1, a( 2, 1 ), lda+1, work( 2*n ), 1)
285 CALL zlacgv( n-1, work( 2*n ), 1 )
287 CALL zgtsv(n, nrhs, work(1), work(n), work(2*n), b, ldb,
296 CALL ztrsm(
'L',
'L',
'C',
'U', n-1, nrhs, one, a( 2, 1 ),
297 $ lda, b( 2, 1 ), ldb)
304 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )