00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "f2c.h"
00014 #include "blaswrap.h"
00015
00016 int zhpr_(char *uplo, integer *n, doublereal *alpha,
00017 doublecomplex *x, integer *incx, doublecomplex *ap)
00018 {
00019
00020 integer i__1, i__2, i__3, i__4, i__5;
00021 doublereal d__1;
00022 doublecomplex z__1, z__2;
00023
00024
00025 void d_cnjg(doublecomplex *, doublecomplex *);
00026
00027
00028 integer i__, j, k, kk, ix, jx, kx, info;
00029 doublecomplex temp;
00030 extern logical lsame_(char *, char *);
00031 extern int xerbla_(char *, integer *);
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
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 --ap;
00129 --x;
00130
00131
00132 info = 0;
00133 if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
00134 info = 1;
00135 } else if (*n < 0) {
00136 info = 2;
00137 } else if (*incx == 0) {
00138 info = 5;
00139 }
00140 if (info != 0) {
00141 xerbla_("ZHPR ", &info);
00142 return 0;
00143 }
00144
00145
00146
00147 if (*n == 0 || *alpha == 0.) {
00148 return 0;
00149 }
00150
00151
00152
00153 if (*incx <= 0) {
00154 kx = 1 - (*n - 1) * *incx;
00155 } else if (*incx != 1) {
00156 kx = 1;
00157 }
00158
00159
00160
00161
00162 kk = 1;
00163 if (lsame_(uplo, "U")) {
00164
00165
00166
00167 if (*incx == 1) {
00168 i__1 = *n;
00169 for (j = 1; j <= i__1; ++j) {
00170 i__2 = j;
00171 if (x[i__2].r != 0. || x[i__2].i != 0.) {
00172 d_cnjg(&z__2, &x[j]);
00173 z__1.r = *alpha * z__2.r, z__1.i = *alpha * z__2.i;
00174 temp.r = z__1.r, temp.i = z__1.i;
00175 k = kk;
00176 i__2 = j - 1;
00177 for (i__ = 1; i__ <= i__2; ++i__) {
00178 i__3 = k;
00179 i__4 = k;
00180 i__5 = i__;
00181 z__2.r = x[i__5].r * temp.r - x[i__5].i * temp.i,
00182 z__2.i = x[i__5].r * temp.i + x[i__5].i *
00183 temp.r;
00184 z__1.r = ap[i__4].r + z__2.r, z__1.i = ap[i__4].i +
00185 z__2.i;
00186 ap[i__3].r = z__1.r, ap[i__3].i = z__1.i;
00187 ++k;
00188
00189 }
00190 i__2 = kk + j - 1;
00191 i__3 = kk + j - 1;
00192 i__4 = j;
00193 z__1.r = x[i__4].r * temp.r - x[i__4].i * temp.i, z__1.i =
00194 x[i__4].r * temp.i + x[i__4].i * temp.r;
00195 d__1 = ap[i__3].r + z__1.r;
00196 ap[i__2].r = d__1, ap[i__2].i = 0.;
00197 } else {
00198 i__2 = kk + j - 1;
00199 i__3 = kk + j - 1;
00200 d__1 = ap[i__3].r;
00201 ap[i__2].r = d__1, ap[i__2].i = 0.;
00202 }
00203 kk += j;
00204
00205 }
00206 } else {
00207 jx = kx;
00208 i__1 = *n;
00209 for (j = 1; j <= i__1; ++j) {
00210 i__2 = jx;
00211 if (x[i__2].r != 0. || x[i__2].i != 0.) {
00212 d_cnjg(&z__2, &x[jx]);
00213 z__1.r = *alpha * z__2.r, z__1.i = *alpha * z__2.i;
00214 temp.r = z__1.r, temp.i = z__1.i;
00215 ix = kx;
00216 i__2 = kk + j - 2;
00217 for (k = kk; k <= i__2; ++k) {
00218 i__3 = k;
00219 i__4 = k;
00220 i__5 = ix;
00221 z__2.r = x[i__5].r * temp.r - x[i__5].i * temp.i,
00222 z__2.i = x[i__5].r * temp.i + x[i__5].i *
00223 temp.r;
00224 z__1.r = ap[i__4].r + z__2.r, z__1.i = ap[i__4].i +
00225 z__2.i;
00226 ap[i__3].r = z__1.r, ap[i__3].i = z__1.i;
00227 ix += *incx;
00228
00229 }
00230 i__2 = kk + j - 1;
00231 i__3 = kk + j - 1;
00232 i__4 = jx;
00233 z__1.r = x[i__4].r * temp.r - x[i__4].i * temp.i, z__1.i =
00234 x[i__4].r * temp.i + x[i__4].i * temp.r;
00235 d__1 = ap[i__3].r + z__1.r;
00236 ap[i__2].r = d__1, ap[i__2].i = 0.;
00237 } else {
00238 i__2 = kk + j - 1;
00239 i__3 = kk + j - 1;
00240 d__1 = ap[i__3].r;
00241 ap[i__2].r = d__1, ap[i__2].i = 0.;
00242 }
00243 jx += *incx;
00244 kk += j;
00245
00246 }
00247 }
00248 } else {
00249
00250
00251
00252 if (*incx == 1) {
00253 i__1 = *n;
00254 for (j = 1; j <= i__1; ++j) {
00255 i__2 = j;
00256 if (x[i__2].r != 0. || x[i__2].i != 0.) {
00257 d_cnjg(&z__2, &x[j]);
00258 z__1.r = *alpha * z__2.r, z__1.i = *alpha * z__2.i;
00259 temp.r = z__1.r, temp.i = z__1.i;
00260 i__2 = kk;
00261 i__3 = kk;
00262 i__4 = j;
00263 z__1.r = temp.r * x[i__4].r - temp.i * x[i__4].i, z__1.i =
00264 temp.r * x[i__4].i + temp.i * x[i__4].r;
00265 d__1 = ap[i__3].r + z__1.r;
00266 ap[i__2].r = d__1, ap[i__2].i = 0.;
00267 k = kk + 1;
00268 i__2 = *n;
00269 for (i__ = j + 1; i__ <= i__2; ++i__) {
00270 i__3 = k;
00271 i__4 = k;
00272 i__5 = i__;
00273 z__2.r = x[i__5].r * temp.r - x[i__5].i * temp.i,
00274 z__2.i = x[i__5].r * temp.i + x[i__5].i *
00275 temp.r;
00276 z__1.r = ap[i__4].r + z__2.r, z__1.i = ap[i__4].i +
00277 z__2.i;
00278 ap[i__3].r = z__1.r, ap[i__3].i = z__1.i;
00279 ++k;
00280
00281 }
00282 } else {
00283 i__2 = kk;
00284 i__3 = kk;
00285 d__1 = ap[i__3].r;
00286 ap[i__2].r = d__1, ap[i__2].i = 0.;
00287 }
00288 kk = kk + *n - j + 1;
00289
00290 }
00291 } else {
00292 jx = kx;
00293 i__1 = *n;
00294 for (j = 1; j <= i__1; ++j) {
00295 i__2 = jx;
00296 if (x[i__2].r != 0. || x[i__2].i != 0.) {
00297 d_cnjg(&z__2, &x[jx]);
00298 z__1.r = *alpha * z__2.r, z__1.i = *alpha * z__2.i;
00299 temp.r = z__1.r, temp.i = z__1.i;
00300 i__2 = kk;
00301 i__3 = kk;
00302 i__4 = jx;
00303 z__1.r = temp.r * x[i__4].r - temp.i * x[i__4].i, z__1.i =
00304 temp.r * x[i__4].i + temp.i * x[i__4].r;
00305 d__1 = ap[i__3].r + z__1.r;
00306 ap[i__2].r = d__1, ap[i__2].i = 0.;
00307 ix = jx;
00308 i__2 = kk + *n - j;
00309 for (k = kk + 1; k <= i__2; ++k) {
00310 ix += *incx;
00311 i__3 = k;
00312 i__4 = k;
00313 i__5 = ix;
00314 z__2.r = x[i__5].r * temp.r - x[i__5].i * temp.i,
00315 z__2.i = x[i__5].r * temp.i + x[i__5].i *
00316 temp.r;
00317 z__1.r = ap[i__4].r + z__2.r, z__1.i = ap[i__4].i +
00318 z__2.i;
00319 ap[i__3].r = z__1.r, ap[i__3].i = z__1.i;
00320
00321 }
00322 } else {
00323 i__2 = kk;
00324 i__3 = kk;
00325 d__1 = ap[i__3].r;
00326 ap[i__2].r = d__1, ap[i__2].i = 0.;
00327 }
00328 jx += *incx;
00329 kk = kk + *n - j + 1;
00330
00331 }
00332 }
00333 }
00334
00335 return 0;
00336
00337
00338
00339 }