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