00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "f2c.h"
00014 #include "blaswrap.h"
00015
00016
00017
00018 static doublereal c_b4 = -1.;
00019 static doublereal c_b5 = 1.;
00020 static integer c__1 = 1;
00021 static doublereal c_b38 = 0.;
00022
00023 int dlahrd_(integer *n, integer *k, integer *nb, doublereal *
00024 a, integer *lda, doublereal *tau, doublereal *t, integer *ldt,
00025 doublereal *y, integer *ldy)
00026 {
00027
00028 integer a_dim1, a_offset, t_dim1, t_offset, y_dim1, y_offset, i__1, i__2,
00029 i__3;
00030 doublereal d__1;
00031
00032
00033 integer i__;
00034 doublereal ei;
00035 extern int dscal_(integer *, doublereal *, doublereal *,
00036 integer *), dgemv_(char *, integer *, integer *, doublereal *,
00037 doublereal *, integer *, doublereal *, integer *, doublereal *,
00038 doublereal *, integer *), dcopy_(integer *, doublereal *,
00039 integer *, doublereal *, integer *), daxpy_(integer *, doublereal
00040 *, doublereal *, integer *, doublereal *, integer *), dtrmv_(char
00041 *, char *, char *, integer *, doublereal *, integer *, doublereal
00042 *, integer *), dlarfg_(integer *,
00043 doublereal *, doublereal *, integer *, doublereal *);
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
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159 --tau;
00160 a_dim1 = *lda;
00161 a_offset = 1 + a_dim1;
00162 a -= a_offset;
00163 t_dim1 = *ldt;
00164 t_offset = 1 + t_dim1;
00165 t -= t_offset;
00166 y_dim1 = *ldy;
00167 y_offset = 1 + y_dim1;
00168 y -= y_offset;
00169
00170
00171 if (*n <= 1) {
00172 return 0;
00173 }
00174
00175 i__1 = *nb;
00176 for (i__ = 1; i__ <= i__1; ++i__) {
00177 if (i__ > 1) {
00178
00179
00180
00181
00182
00183 i__2 = i__ - 1;
00184 dgemv_("No transpose", n, &i__2, &c_b4, &y[y_offset], ldy, &a[*k
00185 + i__ - 1 + a_dim1], lda, &c_b5, &a[i__ * a_dim1 + 1], &
00186 c__1);
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198 i__2 = i__ - 1;
00199 dcopy_(&i__2, &a[*k + 1 + i__ * a_dim1], &c__1, &t[*nb * t_dim1 +
00200 1], &c__1);
00201 i__2 = i__ - 1;
00202 dtrmv_("Lower", "Transpose", "Unit", &i__2, &a[*k + 1 + a_dim1],
00203 lda, &t[*nb * t_dim1 + 1], &c__1);
00204
00205
00206
00207 i__2 = *n - *k - i__ + 1;
00208 i__3 = i__ - 1;
00209 dgemv_("Transpose", &i__2, &i__3, &c_b5, &a[*k + i__ + a_dim1],
00210 lda, &a[*k + i__ + i__ * a_dim1], &c__1, &c_b5, &t[*nb *
00211 t_dim1 + 1], &c__1);
00212
00213
00214
00215 i__2 = i__ - 1;
00216 dtrmv_("Upper", "Transpose", "Non-unit", &i__2, &t[t_offset], ldt,
00217 &t[*nb * t_dim1 + 1], &c__1);
00218
00219
00220
00221 i__2 = *n - *k - i__ + 1;
00222 i__3 = i__ - 1;
00223 dgemv_("No transpose", &i__2, &i__3, &c_b4, &a[*k + i__ + a_dim1],
00224 lda, &t[*nb * t_dim1 + 1], &c__1, &c_b5, &a[*k + i__ +
00225 i__ * a_dim1], &c__1);
00226
00227
00228
00229 i__2 = i__ - 1;
00230 dtrmv_("Lower", "No transpose", "Unit", &i__2, &a[*k + 1 + a_dim1]
00231 , lda, &t[*nb * t_dim1 + 1], &c__1);
00232 i__2 = i__ - 1;
00233 daxpy_(&i__2, &c_b4, &t[*nb * t_dim1 + 1], &c__1, &a[*k + 1 + i__
00234 * a_dim1], &c__1);
00235
00236 a[*k + i__ - 1 + (i__ - 1) * a_dim1] = ei;
00237 }
00238
00239
00240
00241
00242 i__2 = *n - *k - i__ + 1;
00243
00244 i__3 = *k + i__ + 1;
00245 dlarfg_(&i__2, &a[*k + i__ + i__ * a_dim1], &a[min(i__3, *n)+ i__ *
00246 a_dim1], &c__1, &tau[i__]);
00247 ei = a[*k + i__ + i__ * a_dim1];
00248 a[*k + i__ + i__ * a_dim1] = 1.;
00249
00250
00251
00252 i__2 = *n - *k - i__ + 1;
00253 dgemv_("No transpose", n, &i__2, &c_b5, &a[(i__ + 1) * a_dim1 + 1],
00254 lda, &a[*k + i__ + i__ * a_dim1], &c__1, &c_b38, &y[i__ *
00255 y_dim1 + 1], &c__1);
00256 i__2 = *n - *k - i__ + 1;
00257 i__3 = i__ - 1;
00258 dgemv_("Transpose", &i__2, &i__3, &c_b5, &a[*k + i__ + a_dim1], lda, &
00259 a[*k + i__ + i__ * a_dim1], &c__1, &c_b38, &t[i__ * t_dim1 +
00260 1], &c__1);
00261 i__2 = i__ - 1;
00262 dgemv_("No transpose", n, &i__2, &c_b4, &y[y_offset], ldy, &t[i__ *
00263 t_dim1 + 1], &c__1, &c_b5, &y[i__ * y_dim1 + 1], &c__1);
00264 dscal_(n, &tau[i__], &y[i__ * y_dim1 + 1], &c__1);
00265
00266
00267
00268 i__2 = i__ - 1;
00269 d__1 = -tau[i__];
00270 dscal_(&i__2, &d__1, &t[i__ * t_dim1 + 1], &c__1);
00271 i__2 = i__ - 1;
00272 dtrmv_("Upper", "No transpose", "Non-unit", &i__2, &t[t_offset], ldt,
00273 &t[i__ * t_dim1 + 1], &c__1)
00274 ;
00275 t[i__ + i__ * t_dim1] = tau[i__];
00276
00277
00278 }
00279 a[*k + *nb + *nb * a_dim1] = ei;
00280
00281 return 0;
00282
00283
00284
00285 }