163 SUBROUTINE chetrs_3( UPLO, N, NRHS, A, LDA, E, IPIV, B, LDB,
172 INTEGER INFO, LDA, LDB, N, NRHS
176 COMPLEX A( lda, * ), B( ldb, * ), E( * )
183 parameter( one = ( 1.0e+0,0.0e+0 ) )
189 COMPLEX AK, AKM1, AKM1K, BK, BKM1, DENOM
199 INTRINSIC abs, conjg, max, real
204 upper = lsame( uplo,
'U' )
205 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN 207 ELSE IF( n.LT.0 )
THEN 209 ELSE IF( nrhs.LT.0 )
THEN 211 ELSE IF( lda.LT.max( 1, n ) )
THEN 213 ELSE IF( ldb.LT.max( 1, n ) )
THEN 217 CALL xerbla(
'CHETRS_3', -info )
223 IF( n.EQ.0 .OR. nrhs.EQ.0 )
242 kp = abs( ipiv( k ) )
244 CALL cswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
250 CALL ctrsm(
'L',
'U',
'N',
'U', n, nrhs, one, a, lda, b, ldb )
256 IF( ipiv( i ).GT.0 )
THEN 257 s =
REAL( ONE ) /
REAL( A( I, I ) )
258 CALL csscal( nrhs, s, b( i, 1 ), ldb )
259 ELSE IF ( i.GT.1 )
THEN 261 akm1 = a( i-1, i-1 ) / akm1k
262 ak = a( i, i ) / conjg( akm1k )
263 denom = akm1*ak - one
265 bkm1 = b( i-1, j ) / akm1k
266 bk = b( i, j ) / conjg( akm1k )
267 b( i-1, j ) = ( ak*bkm1-bk ) / denom
268 b( i, j ) = ( akm1*bk-bkm1 ) / denom
277 CALL ctrsm(
'L',
'U',
'C',
'U', n, nrhs, one, a, lda, b, ldb )
289 kp = abs( ipiv( k ) )
291 CALL cswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
310 kp = abs( ipiv( k ) )
312 CALL cswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
318 CALL ctrsm(
'L',
'L',
'N',
'U', n, nrhs, one, a, lda, b, ldb )
324 IF( ipiv( i ).GT.0 )
THEN 325 s =
REAL( ONE ) /
REAL( A( I, I ) )
326 CALL csscal( nrhs, s, b( i, 1 ), ldb )
327 ELSE IF( i.LT.n )
THEN 329 akm1 = a( i, i ) / conjg( akm1k )
330 ak = a( i+1, i+1 ) / akm1k
331 denom = akm1*ak - one
333 bkm1 = b( i, j ) / conjg( akm1k )
334 bk = b( i+1, j ) / akm1k
335 b( i, j ) = ( ak*bkm1-bk ) / denom
336 b( i+1, j ) = ( akm1*bk-bkm1 ) / denom
345 CALL ctrsm(
'L',
'L',
'C',
'U', n, nrhs, one, a, lda, b, ldb )
357 kp = abs( ipiv( k ) )
359 CALL cswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine csscal(N, SA, CX, INCX)
CSSCAL
subroutine ctrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CTRSM
subroutine cswap(N, CX, INCX, CY, INCY)
CSWAP
subroutine chetrs_3(UPLO, N, NRHS, A, LDA, E, IPIV, B, LDB, INFO)
CHETRS_3