Doxygen Source Code Documentation
        
Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search   
eis_tred1.c
Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 #include "f2c.h"
00007 
00008  int tred1_(integer *nm, integer *n, doublereal *a, 
00009         doublereal *d__, doublereal *e, doublereal *e2)
00010 {
00011     
00012     integer a_dim1, a_offset, i__1, i__2, i__3;
00013     doublereal d__1;
00014 
00015     
00016     double d_sign(doublereal *, doublereal *);
00017 
00018     
00019     static doublereal f, g, h__;
00020     static integer i__, j, k, l;
00021     static doublereal scale;
00022     static integer ii, jp1;
00023 
00024 
00025 
00026 
00027 
00028 
00029 
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     --e2;
00070     --e;
00071     --d__;
00072     a_dim1 = *nm;
00073     a_offset = a_dim1 + 1;
00074     a -= a_offset;
00075 
00076     
00077     i__1 = *n;
00078     for (i__ = 1; i__ <= i__1; ++i__) {
00079         d__[i__] = a[*n + i__ * a_dim1];
00080         a[*n + i__ * a_dim1] = a[i__ + i__ * a_dim1];
00081 
00082     }
00083 
00084     i__1 = *n;
00085     for (ii = 1; ii <= i__1; ++ii) {
00086         i__ = *n + 1 - ii;
00087         l = i__ - 1;
00088         h__ = 0.;
00089         scale = 0.;
00090         if (l < 1) {
00091             goto L130;
00092         }
00093 
00094         i__2 = l;
00095         for (k = 1; k <= i__2; ++k) {
00096 
00097             scale += (d__1 = d__[k], abs(d__1));
00098         }
00099 
00100         if (scale != 0.) {
00101             goto L140;
00102         }
00103 
00104         i__2 = l;
00105         for (j = 1; j <= i__2; ++j) {
00106             d__[j] = a[l + j * a_dim1];
00107             a[l + j * a_dim1] = a[i__ + j * a_dim1];
00108             a[i__ + j * a_dim1] = 0.;
00109 
00110         }
00111 
00112 L130:
00113         e[i__] = 0.;
00114         e2[i__] = 0.;
00115         goto L300;
00116 
00117 L140:
00118         i__2 = l;
00119         for (k = 1; k <= i__2; ++k) {
00120             d__[k] /= scale;
00121             h__ += d__[k] * d__[k];
00122 
00123         }
00124 
00125         e2[i__] = scale * scale * h__;
00126         f = d__[l];
00127         d__1 = sqrt(h__);
00128         g = -d_sign(&d__1, &f);
00129         e[i__] = scale * g;
00130         h__ -= f * g;
00131         d__[l] = f - g;
00132         if (l == 1) {
00133             goto L285;
00134         }
00135 
00136         i__2 = l;
00137         for (j = 1; j <= i__2; ++j) {
00138 
00139             e[j] = 0.;
00140         }
00141 
00142         i__2 = l;
00143         for (j = 1; j <= i__2; ++j) {
00144             f = d__[j];
00145             g = e[j] + a[j + j * a_dim1] * f;
00146             jp1 = j + 1;
00147             if (l < jp1) {
00148                 goto L220;
00149             }
00150 
00151             i__3 = l;
00152             for (k = jp1; k <= i__3; ++k) {
00153                 g += a[k + j * a_dim1] * d__[k];
00154                 e[k] += a[k + j * a_dim1] * f;
00155 
00156             }
00157 
00158 L220:
00159             e[j] = g;
00160 
00161         }
00162 
00163         f = 0.;
00164 
00165         i__2 = l;
00166         for (j = 1; j <= i__2; ++j) {
00167             e[j] /= h__;
00168             f += e[j] * d__[j];
00169 
00170         }
00171 
00172         h__ = f / (h__ + h__);
00173 
00174         i__2 = l;
00175         for (j = 1; j <= i__2; ++j) {
00176 
00177             e[j] -= h__ * d__[j];
00178         }
00179 
00180         i__2 = l;
00181         for (j = 1; j <= i__2; ++j) {
00182             f = d__[j];
00183             g = e[j];
00184 
00185             i__3 = l;
00186             for (k = j; k <= i__3; ++k) {
00187 
00188                 a[k + j * a_dim1] = a[k + j * a_dim1] - f * e[k] - g * d__[k];
00189             }
00190 
00191 
00192         }
00193 
00194 L285:
00195         i__2 = l;
00196         for (j = 1; j <= i__2; ++j) {
00197             f = d__[j];
00198             d__[j] = a[l + j * a_dim1];
00199             a[l + j * a_dim1] = a[i__ + j * a_dim1];
00200             a[i__ + j * a_dim1] = f * scale;
00201 
00202         }
00203 
00204 L300:
00205         ;
00206     }
00207 
00208     return 0;
00209 } 
00210