version 1.5, 2010/12/21 13:53:35
|
version 1.6, 2011/07/22 07:38:09
|
Line 1
|
Line 1
|
SUBROUTINE DPFTRI( TRANSR, UPLO, N, A, INFO ) |
SUBROUTINE DPFTRI( TRANSR, UPLO, N, A, INFO ) |
* |
* |
* -- LAPACK routine (version 3.3.0) -- |
* -- LAPACK routine (version 3.3.1) -- |
* |
* |
* -- Contributed by Fred Gustavson of the IBM Watson Research Center -- |
* -- Contributed by Fred Gustavson of the IBM Watson Research Center -- |
* November 2010 |
* -- April 2011 -- |
* |
* |
* -- 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..-- |
Line 184
|
Line 184
|
* Quick return if possible |
* Quick return if possible |
* |
* |
IF( N.EQ.0 ) |
IF( N.EQ.0 ) |
+ RETURN |
$ RETURN |
* |
* |
* Invert the triangular Cholesky factor U or L. |
* Invert the triangular Cholesky factor U or L. |
* |
* |
CALL DTFTRI( TRANSR, UPLO, 'N', N, A, INFO ) |
CALL DTFTRI( TRANSR, UPLO, 'N', N, A, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ RETURN |
$ RETURN |
* |
* |
* If N is odd, set NISODD = .TRUE. |
* If N is odd, set NISODD = .TRUE. |
* If N is even, set K = N/2 and NISODD = .FALSE. |
* If N is even, set K = N/2 and NISODD = .FALSE. |
Line 231
|
Line 231
|
* |
* |
CALL DLAUUM( 'L', N1, A( 0 ), N, INFO ) |
CALL DLAUUM( 'L', N1, A( 0 ), N, INFO ) |
CALL DSYRK( 'L', 'T', N1, N2, ONE, A( N1 ), N, ONE, |
CALL DSYRK( 'L', 'T', N1, N2, ONE, A( N1 ), N, ONE, |
+ A( 0 ), N ) |
$ A( 0 ), N ) |
CALL DTRMM( 'L', 'U', 'N', 'N', N2, N1, ONE, A( N ), N, |
CALL DTRMM( 'L', 'U', 'N', 'N', N2, N1, ONE, A( N ), N, |
+ A( N1 ), N ) |
$ A( N1 ), N ) |
CALL DLAUUM( 'U', N2, A( N ), N, INFO ) |
CALL DLAUUM( 'U', N2, A( N ), N, INFO ) |
* |
* |
ELSE |
ELSE |
Line 244
|
Line 244
|
* |
* |
CALL DLAUUM( 'L', N1, A( N2 ), N, INFO ) |
CALL DLAUUM( 'L', N1, A( N2 ), N, INFO ) |
CALL DSYRK( 'L', 'N', N1, N2, ONE, A( 0 ), N, ONE, |
CALL DSYRK( 'L', 'N', N1, N2, ONE, A( 0 ), N, ONE, |
+ A( N2 ), N ) |
$ A( N2 ), N ) |
CALL DTRMM( 'R', 'U', 'T', 'N', N1, N2, ONE, A( N1 ), N, |
CALL DTRMM( 'R', 'U', 'T', 'N', N1, N2, ONE, A( N1 ), N, |
+ A( 0 ), N ) |
$ A( 0 ), N ) |
CALL DLAUUM( 'U', N2, A( N1 ), N, INFO ) |
CALL DLAUUM( 'U', N2, A( N1 ), N, INFO ) |
* |
* |
END IF |
END IF |
Line 262
|
Line 262
|
* |
* |
CALL DLAUUM( 'U', N1, A( 0 ), N1, INFO ) |
CALL DLAUUM( 'U', N1, A( 0 ), N1, INFO ) |
CALL DSYRK( 'U', 'N', N1, N2, ONE, A( N1*N1 ), N1, ONE, |
CALL DSYRK( 'U', 'N', N1, N2, ONE, A( N1*N1 ), N1, ONE, |
+ A( 0 ), N1 ) |
$ A( 0 ), N1 ) |
CALL DTRMM( 'R', 'L', 'N', 'N', N1, N2, ONE, A( 1 ), N1, |
CALL DTRMM( 'R', 'L', 'N', 'N', N1, N2, ONE, A( 1 ), N1, |
+ A( N1*N1 ), N1 ) |
$ A( N1*N1 ), N1 ) |
CALL DLAUUM( 'L', N2, A( 1 ), N1, INFO ) |
CALL DLAUUM( 'L', N2, A( 1 ), N1, INFO ) |
* |
* |
ELSE |
ELSE |
Line 274
|
Line 274
|
* |
* |
CALL DLAUUM( 'U', N1, A( N2*N2 ), N2, INFO ) |
CALL DLAUUM( 'U', N1, A( N2*N2 ), N2, INFO ) |
CALL DSYRK( 'U', 'T', N1, N2, ONE, A( 0 ), N2, ONE, |
CALL DSYRK( 'U', 'T', N1, N2, ONE, A( 0 ), N2, ONE, |
+ A( N2*N2 ), N2 ) |
$ A( N2*N2 ), N2 ) |
CALL DTRMM( 'L', 'L', 'T', 'N', N2, N1, ONE, A( N1*N2 ), |
CALL DTRMM( 'L', 'L', 'T', 'N', N2, N1, ONE, A( N1*N2 ), |
+ N2, A( 0 ), N2 ) |
$ N2, A( 0 ), N2 ) |
CALL DLAUUM( 'L', N2, A( N1*N2 ), N2, INFO ) |
CALL DLAUUM( 'L', N2, A( N1*N2 ), N2, INFO ) |
* |
* |
END IF |
END IF |
Line 299
|
Line 299
|
* |
* |
CALL DLAUUM( 'L', K, A( 1 ), N+1, INFO ) |
CALL DLAUUM( 'L', K, A( 1 ), N+1, INFO ) |
CALL DSYRK( 'L', 'T', K, K, ONE, A( K+1 ), N+1, ONE, |
CALL DSYRK( 'L', 'T', K, K, ONE, A( K+1 ), N+1, ONE, |
+ A( 1 ), N+1 ) |
$ A( 1 ), N+1 ) |
CALL DTRMM( 'L', 'U', 'N', 'N', K, K, ONE, A( 0 ), N+1, |
CALL DTRMM( 'L', 'U', 'N', 'N', K, K, ONE, A( 0 ), N+1, |
+ A( K+1 ), N+1 ) |
$ A( K+1 ), N+1 ) |
CALL DLAUUM( 'U', K, A( 0 ), N+1, INFO ) |
CALL DLAUUM( 'U', K, A( 0 ), N+1, INFO ) |
* |
* |
ELSE |
ELSE |
Line 312
|
Line 312
|
* |
* |
CALL DLAUUM( 'L', K, A( K+1 ), N+1, INFO ) |
CALL DLAUUM( 'L', K, A( K+1 ), N+1, INFO ) |
CALL DSYRK( 'L', 'N', K, K, ONE, A( 0 ), N+1, ONE, |
CALL DSYRK( 'L', 'N', K, K, ONE, A( 0 ), N+1, ONE, |
+ A( K+1 ), N+1 ) |
$ A( K+1 ), N+1 ) |
CALL DTRMM( 'R', 'U', 'T', 'N', K, K, ONE, A( K ), N+1, |
CALL DTRMM( 'R', 'U', 'T', 'N', K, K, ONE, A( K ), N+1, |
+ A( 0 ), N+1 ) |
$ A( 0 ), N+1 ) |
CALL DLAUUM( 'U', K, A( K ), N+1, INFO ) |
CALL DLAUUM( 'U', K, A( K ), N+1, INFO ) |
* |
* |
END IF |
END IF |
Line 331
|
Line 331
|
* |
* |
CALL DLAUUM( 'U', K, A( K ), K, INFO ) |
CALL DLAUUM( 'U', K, A( K ), K, INFO ) |
CALL DSYRK( 'U', 'N', K, K, ONE, A( K*( K+1 ) ), K, ONE, |
CALL DSYRK( 'U', 'N', K, K, ONE, A( K*( K+1 ) ), K, ONE, |
+ A( K ), K ) |
$ A( K ), K ) |
CALL DTRMM( 'R', 'L', 'N', 'N', K, K, ONE, A( 0 ), K, |
CALL DTRMM( 'R', 'L', 'N', 'N', K, K, ONE, A( 0 ), K, |
+ A( K*( K+1 ) ), K ) |
$ A( K*( K+1 ) ), K ) |
CALL DLAUUM( 'L', K, A( 0 ), K, INFO ) |
CALL DLAUUM( 'L', K, A( 0 ), K, INFO ) |
* |
* |
ELSE |
ELSE |
Line 344
|
Line 344
|
* |
* |
CALL DLAUUM( 'U', K, A( K*( K+1 ) ), K, INFO ) |
CALL DLAUUM( 'U', K, A( K*( K+1 ) ), K, INFO ) |
CALL DSYRK( 'U', 'T', K, K, ONE, A( 0 ), K, ONE, |
CALL DSYRK( 'U', 'T', K, K, ONE, A( 0 ), K, ONE, |
+ A( K*( K+1 ) ), K ) |
$ A( K*( K+1 ) ), K ) |
CALL DTRMM( 'L', 'L', 'T', 'N', K, K, ONE, A( K*K ), K, |
CALL DTRMM( 'L', 'L', 'T', 'N', K, K, ONE, A( K*K ), K, |
+ A( 0 ), K ) |
$ A( 0 ), K ) |
CALL DLAUUM( 'L', K, A( K*K ), K, INFO ) |
CALL DLAUUM( 'L', K, A( K*K ), K, INFO ) |
* |
* |
END IF |
END IF |