version 1.17, 2016/08/27 15:34:31
|
version 1.18, 2017/06/17 10:53:57
|
Line 140
|
Line 140
|
*> \author Univ. of Colorado Denver |
*> \author Univ. of Colorado Denver |
*> \author NAG Ltd. |
*> \author NAG Ltd. |
* |
* |
*> \date November 2013 |
*> \date December 2016 |
* |
* |
*> \ingroup auxOTHERauxiliary |
*> \ingroup OTHERauxiliary |
* |
* |
*> \par Contributors: |
*> \par Contributors: |
* ================== |
* ================== |
Line 153
|
Line 153
|
* ===================================================================== |
* ===================================================================== |
SUBROUTINE DLASD4( N, I, D, Z, DELTA, RHO, SIGMA, WORK, INFO ) |
SUBROUTINE DLASD4( N, I, D, Z, DELTA, RHO, SIGMA, WORK, INFO ) |
* |
* |
* -- LAPACK auxiliary routine (version 3.5.0) -- |
* -- LAPACK auxiliary routine (version 3.7.0) -- |
* -- 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 2013 |
* December 2016 |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
INTEGER I, INFO, N |
INTEGER I, INFO, N |
Line 331
|
Line 331
|
TEMP = Z( N ) / ( DELTA( N )*WORK( N ) ) |
TEMP = Z( N ) / ( DELTA( N )*WORK( N ) ) |
PHI = Z( N )*TEMP |
PHI = Z( N )*TEMP |
DPHI = TEMP*TEMP |
DPHI = TEMP*TEMP |
ERRETM = EIGHT*( -PHI-PSI ) + ERRETM - PHI + RHOINV |
ERRETM = EIGHT*( -PHI-PSI ) + ERRETM - PHI + RHOINV |
* $ + ABS( TAU2 )*( DPSI+DPHI ) |
* $ + ABS( TAU2 )*( DPSI+DPHI ) |
* |
* |
W = RHOINV + PHI + PSI |
W = RHOINV + PHI + PSI |
Line 400
|
Line 400
|
TEMP = Z( N ) / TAU2 |
TEMP = Z( N ) / TAU2 |
PHI = Z( N )*TEMP |
PHI = Z( N )*TEMP |
DPHI = TEMP*TEMP |
DPHI = TEMP*TEMP |
ERRETM = EIGHT*( -PHI-PSI ) + ERRETM - PHI + RHOINV |
ERRETM = EIGHT*( -PHI-PSI ) + ERRETM - PHI + RHOINV |
* $ + ABS( TAU2 )*( DPSI+DPHI ) |
* $ + ABS( TAU2 )*( DPSI+DPHI ) |
* |
* |
W = RHOINV + PHI + PSI |
W = RHOINV + PHI + PSI |
Line 470
|
Line 470
|
TEMP = Z( N ) / TAU2 |
TEMP = Z( N ) / TAU2 |
PHI = Z( N )*TEMP |
PHI = Z( N )*TEMP |
DPHI = TEMP*TEMP |
DPHI = TEMP*TEMP |
ERRETM = EIGHT*( -PHI-PSI ) + ERRETM - PHI + RHOINV |
ERRETM = EIGHT*( -PHI-PSI ) + ERRETM - PHI + RHOINV |
* $ + ABS( TAU2 )*( DPSI+DPHI ) |
* $ + ABS( TAU2 )*( DPSI+DPHI ) |
* |
* |
W = RHOINV + PHI + PSI |
W = RHOINV + PHI + PSI |
Line 622
|
Line 622
|
DW = DPSI + DPHI + TEMP*TEMP |
DW = DPSI + DPHI + TEMP*TEMP |
TEMP = Z( II )*TEMP |
TEMP = Z( II )*TEMP |
W = W + TEMP |
W = W + TEMP |
ERRETM = EIGHT*( PHI-PSI ) + ERRETM + TWO*RHOINV |
ERRETM = EIGHT*( PHI-PSI ) + ERRETM + TWO*RHOINV |
$ + THREE*ABS( TEMP ) |
$ + THREE*ABS( TEMP ) |
* $ + ABS( TAU2 )*DW |
* $ + ABS( TAU2 )*DW |
* |
* |
* Test for convergence |
* Test for convergence |
Line 703
|
Line 703
|
* |
* |
IF( INFO.NE.0 ) THEN |
IF( INFO.NE.0 ) THEN |
* |
* |
* If INFO is not 0, i.e., DLAED6 failed, switch back |
* If INFO is not 0, i.e., DLAED6 failed, switch back |
* to 2 pole interpolation. |
* to 2 pole interpolation. |
* |
* |
SWTCH3 = .FALSE. |
SWTCH3 = .FALSE. |
Line 803
|
Line 803
|
DW = DPSI + DPHI + TEMP*TEMP |
DW = DPSI + DPHI + TEMP*TEMP |
TEMP = Z( II )*TEMP |
TEMP = Z( II )*TEMP |
W = RHOINV + PHI + PSI + TEMP |
W = RHOINV + PHI + PSI + TEMP |
ERRETM = EIGHT*( PHI-PSI ) + ERRETM + TWO*RHOINV |
ERRETM = EIGHT*( PHI-PSI ) + ERRETM + TWO*RHOINV |
$ + THREE*ABS( TEMP ) |
$ + THREE*ABS( TEMP ) |
* $ + ABS( TAU2 )*DW |
* $ + ABS( TAU2 )*DW |
* |
* |
SWTCH = .FALSE. |
SWTCH = .FALSE. |
Line 922
|
Line 922
|
* |
* |
IF( INFO.NE.0 ) THEN |
IF( INFO.NE.0 ) THEN |
* |
* |
* If INFO is not 0, i.e., DLAED6 failed, switch |
* If INFO is not 0, i.e., DLAED6 failed, switch |
* back to two pole interpolation |
* back to two pole interpolation |
* |
* |
SWTCH3 = .FALSE. |
SWTCH3 = .FALSE. |
Line 1038
|
Line 1038
|
DW = DPSI + DPHI + TEMP*TEMP |
DW = DPSI + DPHI + TEMP*TEMP |
TEMP = Z( II )*TEMP |
TEMP = Z( II )*TEMP |
W = RHOINV + PHI + PSI + TEMP |
W = RHOINV + PHI + PSI + TEMP |
ERRETM = EIGHT*( PHI-PSI ) + ERRETM + TWO*RHOINV |
ERRETM = EIGHT*( PHI-PSI ) + ERRETM + TWO*RHOINV |
$ + THREE*ABS( TEMP ) |
$ + THREE*ABS( TEMP ) |
* $ + ABS( TAU2 )*DW |
* $ + ABS( TAU2 )*DW |
* |
* |
IF( W*PREW.GT.ZERO .AND. ABS( W ).GT.ABS( PREW ) / TEN ) |
IF( W*PREW.GT.ZERO .AND. ABS( W ).GT.ABS( PREW ) / TEN ) |