|
44 | 44 | *> being combined by the matrix of eigenvectors of the K-by-K system |
45 | 45 | *> which is solved here. |
46 | 46 | *> |
47 | | -*> This code makes very mild assumptions about floating point |
48 | | -*> arithmetic. It will work on machines with a guard digit in |
49 | | -*> add/subtract, or on those binary machines without guard digits |
50 | | -*> which subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. |
51 | | -*> It could conceivably fail on hexadecimal or decimal machines |
52 | | -*> without guard digits, but we know of none. |
53 | 47 | *> \endverbatim |
54 | 48 | * |
55 | 49 | * Arguments: |
|
104 | 98 | *> RHO >= 0 required. |
105 | 99 | *> \endverbatim |
106 | 100 | *> |
107 | | -*> \param[in,out] DLAMDA |
| 101 | +*> \param[in] DLAMDA |
108 | 102 | *> \verbatim |
109 | 103 | *> DLAMDA is DOUBLE PRECISION array, dimension (K) |
110 | 104 | *> The first K elements of this array contain the old roots |
111 | 105 | *> of the deflated updating problem. These are the poles |
112 | | -*> of the secular equation. May be changed on output by |
113 | | -*> having lowest order bit set to zero on Cray X-MP, Cray Y-MP, |
114 | | -*> Cray-2, or Cray C-90, as described above. |
| 106 | +*> of the secular equation. |
115 | 107 | *> \endverbatim |
116 | 108 | *> |
117 | 109 | *> \param[in] Q2 |
@@ -240,26 +232,6 @@ SUBROUTINE DLAED3( K, N, N1, D, Q, LDQ, RHO, DLAMDA, Q2, INDX, |
240 | 232 | IF( K.EQ.0 ) |
241 | 233 | $ RETURN |
242 | 234 | * |
243 | | -* Modify values DLAMDA(i) to make sure all DLAMDA(i)-DLAMDA(j) can |
244 | | -* be computed with high relative accuracy (barring over/underflow). |
245 | | -* This is a problem on machines without a guard digit in |
246 | | -* add/subtract (Cray XMP, Cray YMP, Cray C 90 and Cray 2). |
247 | | -* The following code replaces DLAMDA(I) by 2*DLAMDA(I)-DLAMDA(I), |
248 | | -* which on any of these machines zeros out the bottommost |
249 | | -* bit of DLAMDA(I) if it is 1; this makes the subsequent |
250 | | -* subtractions DLAMDA(I)-DLAMDA(J) unproblematic when cancellation |
251 | | -* occurs. On binary machines with a guard digit (almost all |
252 | | -* machines) it does not change DLAMDA(I) at all. On hexadecimal |
253 | | -* and decimal machines with a guard digit, it slightly |
254 | | -* changes the bottommost bits of DLAMDA(I). It does not account |
255 | | -* for hexadecimal or decimal machines without guard digits |
256 | | -* (we know of none). We use a subroutine call to compute |
257 | | -* 2*DLAMBDA(I) to prevent optimizing compilers from eliminating |
258 | | -* this code. |
259 | | -* |
260 | | - DO 10 I = 1, K |
261 | | - DLAMDA( I ) = DLAMC3( DLAMDA( I ), DLAMDA( I ) ) - DLAMDA( I ) |
262 | | - 10 CONTINUE |
263 | 235 | * |
264 | 236 | DO 20 J = 1, K |
265 | 237 | CALL DLAED4( K, J, DLAMDA, W, Q( 1, J ), RHO, D( J ), INFO ) |
|
0 commit comments