143 INTEGER INFO, LDA, LDB, N, NRHS
147 COMPLEX*16 A( LDA, * ), B( LDB, * )
154 parameter( one = ( 1.0d+0, 0.0d+0 ) )
160 COMPLEX*16 AK, AKM1, AKM1K, BK, BKM1, DENOM
170 INTRINSIC dconjg, max, dble
175 upper = lsame( uplo,
'U' )
176 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
178 ELSE IF( n.LT.0 )
THEN
180 ELSE IF( nrhs.LT.0 )
THEN
182 ELSE IF( lda.LT.max( 1, n ) )
THEN
184 ELSE IF( ldb.LT.max( 1, n ) )
THEN
188 CALL xerbla(
'ZHETRS_ROOK', -info )
194 IF( n.EQ.0 .OR. nrhs.EQ.0 )
214 IF( ipiv( k ).GT.0 )
THEN
222 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
227 CALL zgeru( k-1, nrhs, -one, a( 1, k ), 1, b( k, 1 ), ldb,
232 s = dble( one ) / dble( a( k, k ) )
233 CALL zdscal( nrhs, s, b( k, 1 ), ldb )
243 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
247 $
CALL zswap( nrhs, b( k-1, 1 ), ldb, b( kp, 1 ), ldb )
252 CALL zgeru( k-2, nrhs, -one, a( 1, k ), 1, b( k, 1 ), ldb,
254 CALL zgeru( k-2, nrhs, -one, a( 1, k-1 ), 1, b( k-1, 1 ),
255 $ ldb, b( 1, 1 ), ldb )
260 akm1 = a( k-1, k-1 ) / akm1k
261 ak = a( k, k ) / dconjg( akm1k )
262 denom = akm1*ak - one
264 bkm1 = b( k-1, j ) / akm1k
265 bk = b( k, j ) / dconjg( akm1k )
266 b( k-1, j ) = ( ak*bkm1-bk ) / denom
267 b( k, j ) = ( akm1*bk-bkm1 ) / denom
288 IF( ipiv( k ).GT.0 )
THEN
296 CALL zlacgv( nrhs, b( k, 1 ), ldb )
297 CALL zgemv(
'Conjugate transpose', k-1, nrhs, -one, b,
298 $ ldb, a( 1, k ), 1, one, b( k, 1 ), ldb )
299 CALL zlacgv( nrhs, b( k, 1 ), ldb )
306 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
316 CALL zlacgv( nrhs, b( k, 1 ), ldb )
317 CALL zgemv(
'Conjugate transpose', k-1, nrhs, -one, b,
318 $ ldb, a( 1, k ), 1, one, b( k, 1 ), ldb )
319 CALL zlacgv( nrhs, b( k, 1 ), ldb )
321 CALL zlacgv( nrhs, b( k+1, 1 ), ldb )
322 CALL zgemv(
'Conjugate transpose', k-1, nrhs, -one, b,
323 $ ldb, a( 1, k+1 ), 1, one, b( k+1, 1 ), ldb )
324 CALL zlacgv( nrhs, b( k+1, 1 ), ldb )
331 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
335 $
CALL zswap( nrhs, b( k+1, 1 ), ldb, b( kp, 1 ), ldb )
360 IF( ipiv( k ).GT.0 )
THEN
368 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
374 $
CALL zgeru( n-k, nrhs, -one, a( k+1, k ), 1, b( k, 1 ),
375 $ ldb, b( k+1, 1 ), ldb )
379 s = dble( one ) / dble( a( k, k ) )
380 CALL zdscal( nrhs, s, b( k, 1 ), ldb )
390 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
394 $
CALL zswap( nrhs, b( k+1, 1 ), ldb, b( kp, 1 ), ldb )
400 CALL zgeru( n-k-1, nrhs, -one, a( k+2, k ), 1, b( k, 1 ),
401 $ ldb, b( k+2, 1 ), ldb )
402 CALL zgeru( n-k-1, nrhs, -one, a( k+2, k+1 ), 1,
403 $ b( k+1, 1 ), ldb, b( k+2, 1 ), ldb )
409 akm1 = a( k, k ) / dconjg( akm1k )
410 ak = a( k+1, k+1 ) / akm1k
411 denom = akm1*ak - one
413 bkm1 = b( k, j ) / dconjg( akm1k )
414 bk = b( k+1, j ) / akm1k
415 b( k, j ) = ( ak*bkm1-bk ) / denom
416 b( k+1, j ) = ( akm1*bk-bkm1 ) / denom
437 IF( ipiv( k ).GT.0 )
THEN
445 CALL zlacgv( nrhs, b( k, 1 ), ldb )
446 CALL zgemv(
'Conjugate transpose', n-k, nrhs, -one,
447 $ b( k+1, 1 ), ldb, a( k+1, k ), 1, one,
449 CALL zlacgv( nrhs, b( k, 1 ), ldb )
456 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
466 CALL zlacgv( nrhs, b( k, 1 ), ldb )
467 CALL zgemv(
'Conjugate transpose', n-k, nrhs, -one,
468 $ b( k+1, 1 ), ldb, a( k+1, k ), 1, one,
470 CALL zlacgv( nrhs, b( k, 1 ), ldb )
472 CALL zlacgv( nrhs, b( k-1, 1 ), ldb )
473 CALL zgemv(
'Conjugate transpose', n-k, nrhs, -one,
474 $ b( k+1, 1 ), ldb, a( k+1, k-1 ), 1, one,
476 CALL zlacgv( nrhs, b( k-1, 1 ), ldb )
483 $
CALL zswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
487 $
CALL zswap( nrhs, b( k-1, 1 ), ldb, b( kp, 1 ), ldb )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zswap(N, ZX, INCX, ZY, INCY)
ZSWAP
subroutine zdscal(N, DA, ZX, INCX)
ZDSCAL
subroutine zgeru(M, N, ALPHA, X, INCX, Y, INCY, A, LDA)
ZGERU
subroutine zgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
ZGEMV
subroutine zhetrs_rook(UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO)
ZHETRS_ROOK computes the solution to a system of linear equations A * X = B for HE matrices using fac...
subroutine zlacgv(N, X, INCX)
ZLACGV conjugates a complex vector.