163 SUBROUTINE dsytrs_3( UPLO, N, NRHS, A, LDA, E, IPIV, B, LDB,
172 INTEGER INFO, LDA, LDB, , NRHS
176 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), E( * )
183 parameter( one = 1.0d+0 )
188 DOUBLE PRECISION AK, AKM1, AKM1K, BK, BKM1, DENOM
203 upper = lsame( uplo,
'U' )
204 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
206 ELSE IF( n.LT.0 )
THEN
208 ELSE IF( nrhs.LT.0 )
THEN
210 ELSE IF( lda.LT.
max( 1, n ) )
THEN
212 ELSE IF( ldb.LT.
max( 1, n ) )
THEN
216 CALL xerbla(
'DSYTRS_3', -info )
222 IF( n.EQ.0 .OR. nrhs.EQ.0 )
241 kp = abs( ipiv( k ) )
243 CALL dswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
249 CALL dtrsm(
'L',
'U',
'N',
'U', n, nrhs, one, a, lda, b, ldb )
255 IF( ipiv( i ).GT.0 )
THEN
256 CALL dscal( nrhs, one / a( i, i ), b( i, 1 ), ldb )
257 ELSE IF ( i.GT.1 )
THEN
259 akm1 = a( i-1, i-1 ) / akm1k
260 ak = a( i, i ) / akm1k
261 denom = akm1*ak - one
263 bkm1 = b( i-1, j ) / akm1k
264 bk = b( i, j ) / akm1k
265 b( i-1, j ) = ( ak*bkm1-bk ) / denom
266 b( i, j ) = ( akm1*bk-bkm1 ) / denom
275 CALL dtrsm(
'L',
'U',
'T',
'U', n, nrhs, one, a, lda, b, ldb )
287 kp = abs( ipiv( k ) )
289 CALL dswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
308 kp = abs( ipiv( k ) )
310 CALL dswap( nrhs, b( k, 1 ), ldb, b( kp, 1 ), ldb )
316 CALL dtrsm(
'L',
'L',
'N', 'u
', N, NRHS, ONE, A, LDA, B, LDB )
322.GT.
IF( IPIV( I )0 ) THEN
323 CALL DSCAL( NRHS, ONE / A( I, I ), B( I, 1 ), LDB )
324.LT.
ELSE IF( IN ) THEN
326 AKM1 = A( I, I ) / AKM1K
327 AK = A( I+1, I+1 ) / AKM1K
328 DENOM = AKM1*AK - ONE
330 BKM1 = B( I, J ) / AKM1K
331 BK = B( I+1, J ) / AKM1K
332 B( I, J ) = ( AK*BKM1-BK ) / DENOM
333 B( I+1, J ) = ( AKM1*BK-BKM1 ) / DENOM
342 CALL DTRSM('l
', 'l
', 't
', 'u
', N, NRHS, ONE, A, LDA, B, LDB )
354 KP = ABS( IPIV( K ) )
356 CALL DSWAP( NRHS, B( K, 1 ), LDB, B( KP, 1 ), LDB )
subroutine dsytrs_3(uplo, n, nrhs, a, lda, e, ipiv, b, ldb, info)
DSYTRS_3
subroutine dtrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
DTRSM