version 1.5, 2010/12/21 13:53:35
|
version 1.6, 2011/07/22 07:38:09
|
Line 1
|
Line 1
|
SUBROUTINE DPFTRF( TRANSR, UPLO, N, A, INFO ) |
SUBROUTINE DPFTRF( 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 192
|
Line 192
|
* Quick return if possible |
* Quick return if possible |
* |
* |
IF( N.EQ.0 ) |
IF( N.EQ.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 232
|
Line 232
|
* |
* |
CALL DPOTRF( 'L', N1, A( 0 ), N, INFO ) |
CALL DPOTRF( 'L', N1, A( 0 ), N, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ RETURN |
$ RETURN |
CALL DTRSM( 'R', 'L', 'T', 'N', N2, N1, ONE, A( 0 ), N, |
CALL DTRSM( 'R', 'L', 'T', 'N', N2, N1, ONE, A( 0 ), N, |
+ A( N1 ), N ) |
$ A( N1 ), N ) |
CALL DSYRK( 'U', 'N', N2, N1, -ONE, A( N1 ), N, ONE, |
CALL DSYRK( 'U', 'N', N2, N1, -ONE, A( N1 ), N, ONE, |
+ A( N ), N ) |
$ A( N ), N ) |
CALL DPOTRF( 'U', N2, A( N ), N, INFO ) |
CALL DPOTRF( 'U', N2, A( N ), N, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ INFO = INFO + N1 |
$ INFO = INFO + N1 |
* |
* |
ELSE |
ELSE |
* |
* |
Line 249
|
Line 249
|
* |
* |
CALL DPOTRF( 'L', N1, A( N2 ), N, INFO ) |
CALL DPOTRF( 'L', N1, A( N2 ), N, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ RETURN |
$ RETURN |
CALL DTRSM( 'L', 'L', 'N', 'N', N1, N2, ONE, A( N2 ), N, |
CALL DTRSM( 'L', 'L', 'N', 'N', N1, N2, ONE, A( N2 ), N, |
+ A( 0 ), N ) |
$ A( 0 ), N ) |
CALL DSYRK( 'U', 'T', N2, N1, -ONE, A( 0 ), N, ONE, |
CALL DSYRK( 'U', 'T', N2, N1, -ONE, A( 0 ), N, ONE, |
+ A( N1 ), N ) |
$ A( N1 ), N ) |
CALL DPOTRF( 'U', N2, A( N1 ), N, INFO ) |
CALL DPOTRF( 'U', N2, A( N1 ), N, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ INFO = INFO + N1 |
$ INFO = INFO + N1 |
* |
* |
END IF |
END IF |
* |
* |
Line 272
|
Line 272
|
* |
* |
CALL DPOTRF( 'U', N1, A( 0 ), N1, INFO ) |
CALL DPOTRF( 'U', N1, A( 0 ), N1, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ RETURN |
$ RETURN |
CALL DTRSM( 'L', 'U', 'T', 'N', N1, N2, ONE, A( 0 ), N1, |
CALL DTRSM( 'L', 'U', 'T', 'N', N1, N2, ONE, A( 0 ), N1, |
+ A( N1*N1 ), N1 ) |
$ A( N1*N1 ), N1 ) |
CALL DSYRK( 'L', 'T', N2, N1, -ONE, A( N1*N1 ), N1, ONE, |
CALL DSYRK( 'L', 'T', N2, N1, -ONE, A( N1*N1 ), N1, ONE, |
+ A( 1 ), N1 ) |
$ A( 1 ), N1 ) |
CALL DPOTRF( 'L', N2, A( 1 ), N1, INFO ) |
CALL DPOTRF( 'L', N2, A( 1 ), N1, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ INFO = INFO + N1 |
$ INFO = INFO + N1 |
* |
* |
ELSE |
ELSE |
* |
* |
Line 289
|
Line 289
|
* |
* |
CALL DPOTRF( 'U', N1, A( N2*N2 ), N2, INFO ) |
CALL DPOTRF( 'U', N1, A( N2*N2 ), N2, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ RETURN |
$ RETURN |
CALL DTRSM( 'R', 'U', 'N', 'N', N2, N1, ONE, A( N2*N2 ), |
CALL DTRSM( 'R', 'U', 'N', 'N', N2, N1, ONE, A( N2*N2 ), |
+ N2, A( 0 ), N2 ) |
$ N2, A( 0 ), N2 ) |
CALL DSYRK( 'L', 'N', N2, N1, -ONE, A( 0 ), N2, ONE, |
CALL DSYRK( 'L', 'N', N2, N1, -ONE, A( 0 ), N2, ONE, |
+ A( N1*N2 ), N2 ) |
$ A( N1*N2 ), N2 ) |
CALL DPOTRF( 'L', N2, A( N1*N2 ), N2, INFO ) |
CALL DPOTRF( 'L', N2, A( N1*N2 ), N2, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ INFO = INFO + N1 |
$ INFO = INFO + N1 |
* |
* |
END IF |
END IF |
* |
* |
Line 318
|
Line 318
|
* |
* |
CALL DPOTRF( 'L', K, A( 1 ), N+1, INFO ) |
CALL DPOTRF( 'L', K, A( 1 ), N+1, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ RETURN |
$ RETURN |
CALL DTRSM( 'R', 'L', 'T', 'N', K, K, ONE, A( 1 ), N+1, |
CALL DTRSM( 'R', 'L', 'T', 'N', K, K, ONE, A( 1 ), N+1, |
+ A( K+1 ), N+1 ) |
$ A( K+1 ), N+1 ) |
CALL DSYRK( 'U', 'N', K, K, -ONE, A( K+1 ), N+1, ONE, |
CALL DSYRK( 'U', 'N', K, K, -ONE, A( K+1 ), N+1, ONE, |
+ A( 0 ), N+1 ) |
$ A( 0 ), N+1 ) |
CALL DPOTRF( 'U', K, A( 0 ), N+1, INFO ) |
CALL DPOTRF( 'U', K, A( 0 ), N+1, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ INFO = INFO + K |
$ INFO = INFO + K |
* |
* |
ELSE |
ELSE |
* |
* |
Line 335
|
Line 335
|
* |
* |
CALL DPOTRF( 'L', K, A( K+1 ), N+1, INFO ) |
CALL DPOTRF( 'L', K, A( K+1 ), N+1, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ RETURN |
$ RETURN |
CALL DTRSM( 'L', 'L', 'N', 'N', K, K, ONE, A( K+1 ), |
CALL DTRSM( 'L', 'L', 'N', 'N', K, K, ONE, A( K+1 ), |
+ N+1, A( 0 ), N+1 ) |
$ N+1, A( 0 ), N+1 ) |
CALL DSYRK( 'U', 'T', K, K, -ONE, A( 0 ), N+1, ONE, |
CALL DSYRK( 'U', 'T', K, K, -ONE, A( 0 ), N+1, ONE, |
+ A( K ), N+1 ) |
$ A( K ), N+1 ) |
CALL DPOTRF( 'U', K, A( K ), N+1, INFO ) |
CALL DPOTRF( 'U', K, A( K ), N+1, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ INFO = INFO + K |
$ INFO = INFO + K |
* |
* |
END IF |
END IF |
* |
* |
Line 358
|
Line 358
|
* |
* |
CALL DPOTRF( 'U', K, A( 0+K ), K, INFO ) |
CALL DPOTRF( 'U', K, A( 0+K ), K, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ RETURN |
$ RETURN |
CALL DTRSM( 'L', 'U', 'T', 'N', K, K, ONE, A( K ), N1, |
CALL DTRSM( 'L', 'U', 'T', 'N', K, K, ONE, A( K ), N1, |
+ A( K*( K+1 ) ), K ) |
$ A( K*( K+1 ) ), K ) |
CALL DSYRK( 'L', 'T', K, K, -ONE, A( K*( K+1 ) ), K, ONE, |
CALL DSYRK( 'L', 'T', K, K, -ONE, A( K*( K+1 ) ), K, ONE, |
+ A( 0 ), K ) |
$ A( 0 ), K ) |
CALL DPOTRF( 'L', K, A( 0 ), K, INFO ) |
CALL DPOTRF( 'L', K, A( 0 ), K, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ INFO = INFO + K |
$ INFO = INFO + K |
* |
* |
ELSE |
ELSE |
* |
* |
Line 375
|
Line 375
|
* |
* |
CALL DPOTRF( 'U', K, A( K*( K+1 ) ), K, INFO ) |
CALL DPOTRF( 'U', K, A( K*( K+1 ) ), K, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ RETURN |
$ RETURN |
CALL DTRSM( 'R', 'U', 'N', 'N', K, K, ONE, |
CALL DTRSM( 'R', 'U', 'N', 'N', K, K, ONE, |
+ A( K*( K+1 ) ), K, A( 0 ), K ) |
$ A( K*( K+1 ) ), K, A( 0 ), K ) |
CALL DSYRK( 'L', 'N', K, K, -ONE, A( 0 ), K, ONE, |
CALL DSYRK( 'L', 'N', K, K, -ONE, A( 0 ), K, ONE, |
+ A( K*K ), K ) |
$ A( K*K ), K ) |
CALL DPOTRF( 'L', K, A( K*K ), K, INFO ) |
CALL DPOTRF( 'L', K, A( K*K ), K, INFO ) |
IF( INFO.GT.0 ) |
IF( INFO.GT.0 ) |
+ INFO = INFO + K |
$ INFO = INFO + K |
* |
* |
END IF |
END IF |
* |
* |