version 1.2, 2010/12/21 13:53:40
|
version 1.3, 2011/07/22 07:38:12
|
Line 1
|
Line 1
|
SUBROUTINE DSYTRS2( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, |
SUBROUTINE DSYTRS2( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, |
$ WORK, INFO ) |
$ WORK, INFO ) |
* |
* |
* -- LAPACK PROTOTYPE routine (version 3.3.0) -- |
* -- LAPACK PROTOTYPE routine (version 3.3.1) -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* November 2010 |
* -- April 2011 -- |
* |
* |
* -- Written by Julie Langou of the Univ. of TN -- |
* -- Written by Julie Langou of the Univ. of TN -- |
* |
* |
Line 116
|
Line 116
|
* |
* |
IF( UPPER ) THEN |
IF( UPPER ) THEN |
* |
* |
* Solve A*X = B, where A = U*D*U'. |
* Solve A*X = B, where A = U*D*U**T. |
* |
* |
* P' * B |
* P**T * B |
K=N |
K=N |
DO WHILE ( K .GE. 1 ) |
DO WHILE ( K .GE. 1 ) |
IF( IPIV( K ).GT.0 ) THEN |
IF( IPIV( K ).GT.0 ) THEN |
Line 138
|
Line 138
|
END IF |
END IF |
END DO |
END DO |
* |
* |
* Compute (U \P' * B) -> B [ (U \P' * B) ] |
* Compute (U \P**T * B) -> B [ (U \P**T * B) ] |
* |
* |
CALL DTRSM('L','U','N','U',N,NRHS,ONE,A,N,B,N) |
CALL DTRSM('L','U','N','U',N,NRHS,ONE,A,LDA,B,LDB) |
* |
* |
* Compute D \ B -> B [ D \ (U \P' * B) ] |
* Compute D \ B -> B [ D \ (U \P**T * B) ] |
* |
* |
I=N |
I=N |
DO WHILE ( I .GE. 1 ) |
DO WHILE ( I .GE. 1 ) |
IF( IPIV(I) .GT. 0 ) THEN |
IF( IPIV(I) .GT. 0 ) THEN |
CALL DSCAL( NRHS, ONE / A( I, I ), B( I, 1 ), N ) |
CALL DSCAL( NRHS, ONE / A( I, I ), B( I, 1 ), LDB ) |
ELSEIF ( I .GT. 1) THEN |
ELSEIF ( I .GT. 1) THEN |
IF ( IPIV(I-1) .EQ. IPIV(I) ) THEN |
IF ( IPIV(I-1) .EQ. IPIV(I) ) THEN |
AKM1K = WORK(I) |
AKM1K = WORK(I) |
Line 166
|
Line 166
|
I = I - 1 |
I = I - 1 |
END DO |
END DO |
* |
* |
* Compute (U' \ B) -> B [ U' \ (D \ (U \P' * B) ) ] |
* Compute (U**T \ B) -> B [ U**T \ (D \ (U \P**T * B) ) ] |
* |
* |
CALL DTRSM('L','U','T','U',N,NRHS,ONE,A,N,B,N) |
CALL DTRSM('L','U','T','U',N,NRHS,ONE,A,LDA,B,LDB) |
* |
* |
* P * B [ P * (U' \ (D \ (U \P' * B) )) ] |
* P * B [ P * (U**T \ (D \ (U \P**T * B) )) ] |
* |
* |
K=1 |
K=1 |
DO WHILE ( K .LE. N ) |
DO WHILE ( K .LE. N ) |
Line 193
|
Line 193
|
* |
* |
ELSE |
ELSE |
* |
* |
* Solve A*X = B, where A = L*D*L'. |
* Solve A*X = B, where A = L*D*L**T. |
* |
* |
* P' * B |
* P**T * B |
K=1 |
K=1 |
DO WHILE ( K .LE. N ) |
DO WHILE ( K .LE. N ) |
IF( IPIV( K ).GT.0 ) THEN |
IF( IPIV( K ).GT.0 ) THEN |
Line 215
|
Line 215
|
ENDIF |
ENDIF |
END DO |
END DO |
* |
* |
* Compute (L \P' * B) -> B [ (L \P' * B) ] |
* Compute (L \P**T * B) -> B [ (L \P**T * B) ] |
* |
* |
CALL DTRSM('L','L','N','U',N,NRHS,ONE,A,N,B,N) |
CALL DTRSM('L','L','N','U',N,NRHS,ONE,A,LDA,B,LDB) |
* |
* |
* Compute D \ B -> B [ D \ (L \P' * B) ] |
* Compute D \ B -> B [ D \ (L \P**T * B) ] |
* |
* |
I=1 |
I=1 |
DO WHILE ( I .LE. N ) |
DO WHILE ( I .LE. N ) |
IF( IPIV(I) .GT. 0 ) THEN |
IF( IPIV(I) .GT. 0 ) THEN |
CALL DSCAL( NRHS, ONE / A( I, I ), B( I, 1 ), N ) |
CALL DSCAL( NRHS, ONE / A( I, I ), B( I, 1 ), LDB ) |
ELSE |
ELSE |
AKM1K = WORK(I) |
AKM1K = WORK(I) |
AKM1 = A( I, I ) / AKM1K |
AKM1 = A( I, I ) / AKM1K |
Line 241
|
Line 241
|
I = I + 1 |
I = I + 1 |
END DO |
END DO |
* |
* |
* Compute (L' \ B) -> B [ L' \ (D \ (L \P' * B) ) ] |
* Compute (L**T \ B) -> B [ L**T \ (D \ (L \P**T * B) ) ] |
* |
* |
CALL DTRSM('L','L','T','U',N,NRHS,ONE,A,N,B,N) |
CALL DTRSM('L','L','T','U',N,NRHS,ONE,A,LDA,B,LDB) |
* |
* |
* P * B [ P * (L' \ (D \ (L \P' * B) )) ] |
* P * B [ P * (L**T \ (D \ (L \P**T * B) )) ] |
* |
* |
K=N |
K=N |
DO WHILE ( K .GE. 1 ) |
DO WHILE ( K .GE. 1 ) |