Doxygen Source Code Documentation
        
Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search   
eis_imtql1.c
Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 #include "f2c.h"
00007 
00008 
00009 
00010 static doublereal c_b10 = 1.;
00011 
00012  int imtql1_(integer *n, doublereal *d__, doublereal *e, 
00013         integer *ierr)
00014 {
00015     
00016     integer i__1, i__2;
00017     doublereal d__1, d__2;
00018 
00019     
00020     double d_sign(doublereal *, doublereal *);
00021 
00022     
00023     static doublereal b, c__, f, g;
00024     static integer i__, j, l, m;
00025     static doublereal p, r__, s;
00026     static integer ii;
00027     extern doublereal pythag_(doublereal *, doublereal *);
00028     static integer mml;
00029     static doublereal tst1, tst2;
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060 
00061 
00062 
00063 
00064 
00065 
00066 
00067 
00068 
00069 
00070 
00071 
00072 
00073 
00074 
00075     
00076     --e;
00077     --d__;
00078 
00079     
00080     *ierr = 0;
00081     if (*n == 1) {
00082         goto L1001;
00083     }
00084 
00085     i__1 = *n;
00086     for (i__ = 2; i__ <= i__1; ++i__) {
00087 
00088         e[i__ - 1] = e[i__];
00089     }
00090 
00091     e[*n] = 0.;
00092 
00093     i__1 = *n;
00094     for (l = 1; l <= i__1; ++l) {
00095         j = 0;
00096 
00097 L105:
00098         i__2 = *n;
00099         for (m = l; m <= i__2; ++m) {
00100             if (m == *n) {
00101                 goto L120;
00102             }
00103             tst1 = (d__1 = d__[m], abs(d__1)) + (d__2 = d__[m + 1], abs(d__2))
00104                     ;
00105             tst2 = tst1 + (d__1 = e[m], abs(d__1));
00106             if (tst2 == tst1) {
00107                 goto L120;
00108             }
00109 
00110         }
00111 
00112 L120:
00113         p = d__[l];
00114         if (m == l) {
00115             goto L215;
00116         }
00117         if (j == 30) {
00118             goto L1000;
00119         }
00120         ++j;
00121 
00122         g = (d__[l + 1] - p) / (e[l] * 2.);
00123         r__ = pythag_(&g, &c_b10);
00124         g = d__[m] - p + e[l] / (g + d_sign(&r__, &g));
00125         s = 1.;
00126         c__ = 1.;
00127         p = 0.;
00128         mml = m - l;
00129 
00130         i__2 = mml;
00131         for (ii = 1; ii <= i__2; ++ii) {
00132             i__ = m - ii;
00133             f = s * e[i__];
00134             b = c__ * e[i__];
00135             r__ = pythag_(&f, &g);
00136             e[i__ + 1] = r__;
00137             if (r__ == 0.) {
00138                 goto L210;
00139             }
00140             s = f / r__;
00141             c__ = g / r__;
00142             g = d__[i__ + 1] - p;
00143             r__ = (d__[i__] - g) * s + c__ * 2. * b;
00144             p = s * r__;
00145             d__[i__ + 1] = g + p;
00146             g = c__ * r__ - b;
00147 
00148         }
00149 
00150         d__[l] -= p;
00151         e[l] = g;
00152         e[m] = 0.;
00153         goto L105;
00154 
00155 L210:
00156         d__[i__ + 1] -= p;
00157         e[m] = 0.;
00158         goto L105;
00159 
00160 L215:
00161         if (l == 1) {
00162             goto L250;
00163         }
00164 
00165         i__2 = l;
00166         for (ii = 2; ii <= i__2; ++ii) {
00167             i__ = l + 2 - ii;
00168             if (p >= d__[i__ - 1]) {
00169                 goto L270;
00170             }
00171             d__[i__] = d__[i__ - 1];
00172 
00173         }
00174 
00175 L250:
00176         i__ = 1;
00177 L270:
00178         d__[i__] = p;
00179 
00180     }
00181 
00182     goto L1001;
00183 
00184 
00185 L1000:
00186     *ierr = l;
00187 L1001:
00188     return 0;
00189 } 
00190