134 SUBROUTINE zhetrs_rook( UPLO, N, NRHS, A, LDA, IPIV, B, LDB,
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 zgeru(M, N, ALPHA, X, INCX, Y, INCY, A, LDA)
ZGERU
subroutine zdscal(N, DA, ZX, INCX)
ZDSCAL
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zlacgv(N, X, INCX)
ZLACGV conjugates a complex vector.
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 zgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
ZGEMV
subroutine zswap(N, ZX, INCX, ZY, INCY)
ZSWAP