00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "f2c.h"
00014 #include "blaswrap.h"
00015
00016 int ztpmv_(char *uplo, char *trans, char *diag, integer *n,
00017 doublecomplex *ap, doublecomplex *x, integer *incx)
00018 {
00019
00020 integer i__1, i__2, i__3, i__4, i__5;
00021 doublecomplex z__1, z__2, z__3;
00022
00023
00024 void d_cnjg(doublecomplex *, doublecomplex *);
00025
00026
00027 integer i__, j, k, kk, ix, jx, kx, info;
00028 doublecomplex temp;
00029 extern logical lsame_(char *, char *);
00030 extern int xerbla_(char *, integer *);
00031 logical noconj, nounit;
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
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140 --x;
00141 --ap;
00142
00143
00144 info = 0;
00145 if (! lsame_(uplo, "U") && ! lsame_(uplo, "L")) {
00146 info = 1;
00147 } else if (! lsame_(trans, "N") && ! lsame_(trans,
00148 "T") && ! lsame_(trans, "C")) {
00149 info = 2;
00150 } else if (! lsame_(diag, "U") && ! lsame_(diag,
00151 "N")) {
00152 info = 3;
00153 } else if (*n < 0) {
00154 info = 4;
00155 } else if (*incx == 0) {
00156 info = 7;
00157 }
00158 if (info != 0) {
00159 xerbla_("ZTPMV ", &info);
00160 return 0;
00161 }
00162
00163
00164
00165 if (*n == 0) {
00166 return 0;
00167 }
00168
00169 noconj = lsame_(trans, "T");
00170 nounit = lsame_(diag, "N");
00171
00172
00173
00174
00175 if (*incx <= 0) {
00176 kx = 1 - (*n - 1) * *incx;
00177 } else if (*incx != 1) {
00178 kx = 1;
00179 }
00180
00181
00182
00183
00184 if (lsame_(trans, "N")) {
00185
00186
00187
00188 if (lsame_(uplo, "U")) {
00189 kk = 1;
00190 if (*incx == 1) {
00191 i__1 = *n;
00192 for (j = 1; j <= i__1; ++j) {
00193 i__2 = j;
00194 if (x[i__2].r != 0. || x[i__2].i != 0.) {
00195 i__2 = j;
00196 temp.r = x[i__2].r, temp.i = x[i__2].i;
00197 k = kk;
00198 i__2 = j - 1;
00199 for (i__ = 1; i__ <= i__2; ++i__) {
00200 i__3 = i__;
00201 i__4 = i__;
00202 i__5 = k;
00203 z__2.r = temp.r * ap[i__5].r - temp.i * ap[i__5]
00204 .i, z__2.i = temp.r * ap[i__5].i + temp.i
00205 * ap[i__5].r;
00206 z__1.r = x[i__4].r + z__2.r, z__1.i = x[i__4].i +
00207 z__2.i;
00208 x[i__3].r = z__1.r, x[i__3].i = z__1.i;
00209 ++k;
00210
00211 }
00212 if (nounit) {
00213 i__2 = j;
00214 i__3 = j;
00215 i__4 = kk + j - 1;
00216 z__1.r = x[i__3].r * ap[i__4].r - x[i__3].i * ap[
00217 i__4].i, z__1.i = x[i__3].r * ap[i__4].i
00218 + x[i__3].i * ap[i__4].r;
00219 x[i__2].r = z__1.r, x[i__2].i = z__1.i;
00220 }
00221 }
00222 kk += j;
00223
00224 }
00225 } else {
00226 jx = kx;
00227 i__1 = *n;
00228 for (j = 1; j <= i__1; ++j) {
00229 i__2 = jx;
00230 if (x[i__2].r != 0. || x[i__2].i != 0.) {
00231 i__2 = jx;
00232 temp.r = x[i__2].r, temp.i = x[i__2].i;
00233 ix = kx;
00234 i__2 = kk + j - 2;
00235 for (k = kk; k <= i__2; ++k) {
00236 i__3 = ix;
00237 i__4 = ix;
00238 i__5 = k;
00239 z__2.r = temp.r * ap[i__5].r - temp.i * ap[i__5]
00240 .i, z__2.i = temp.r * ap[i__5].i + temp.i
00241 * ap[i__5].r;
00242 z__1.r = x[i__4].r + z__2.r, z__1.i = x[i__4].i +
00243 z__2.i;
00244 x[i__3].r = z__1.r, x[i__3].i = z__1.i;
00245 ix += *incx;
00246
00247 }
00248 if (nounit) {
00249 i__2 = jx;
00250 i__3 = jx;
00251 i__4 = kk + j - 1;
00252 z__1.r = x[i__3].r * ap[i__4].r - x[i__3].i * ap[
00253 i__4].i, z__1.i = x[i__3].r * ap[i__4].i
00254 + x[i__3].i * ap[i__4].r;
00255 x[i__2].r = z__1.r, x[i__2].i = z__1.i;
00256 }
00257 }
00258 jx += *incx;
00259 kk += j;
00260
00261 }
00262 }
00263 } else {
00264 kk = *n * (*n + 1) / 2;
00265 if (*incx == 1) {
00266 for (j = *n; j >= 1; --j) {
00267 i__1 = j;
00268 if (x[i__1].r != 0. || x[i__1].i != 0.) {
00269 i__1 = j;
00270 temp.r = x[i__1].r, temp.i = x[i__1].i;
00271 k = kk;
00272 i__1 = j + 1;
00273 for (i__ = *n; i__ >= i__1; --i__) {
00274 i__2 = i__;
00275 i__3 = i__;
00276 i__4 = k;
00277 z__2.r = temp.r * ap[i__4].r - temp.i * ap[i__4]
00278 .i, z__2.i = temp.r * ap[i__4].i + temp.i
00279 * ap[i__4].r;
00280 z__1.r = x[i__3].r + z__2.r, z__1.i = x[i__3].i +
00281 z__2.i;
00282 x[i__2].r = z__1.r, x[i__2].i = z__1.i;
00283 --k;
00284
00285 }
00286 if (nounit) {
00287 i__1 = j;
00288 i__2 = j;
00289 i__3 = kk - *n + j;
00290 z__1.r = x[i__2].r * ap[i__3].r - x[i__2].i * ap[
00291 i__3].i, z__1.i = x[i__2].r * ap[i__3].i
00292 + x[i__2].i * ap[i__3].r;
00293 x[i__1].r = z__1.r, x[i__1].i = z__1.i;
00294 }
00295 }
00296 kk -= *n - j + 1;
00297
00298 }
00299 } else {
00300 kx += (*n - 1) * *incx;
00301 jx = kx;
00302 for (j = *n; j >= 1; --j) {
00303 i__1 = jx;
00304 if (x[i__1].r != 0. || x[i__1].i != 0.) {
00305 i__1 = jx;
00306 temp.r = x[i__1].r, temp.i = x[i__1].i;
00307 ix = kx;
00308 i__1 = kk - (*n - (j + 1));
00309 for (k = kk; k >= i__1; --k) {
00310 i__2 = ix;
00311 i__3 = ix;
00312 i__4 = k;
00313 z__2.r = temp.r * ap[i__4].r - temp.i * ap[i__4]
00314 .i, z__2.i = temp.r * ap[i__4].i + temp.i
00315 * ap[i__4].r;
00316 z__1.r = x[i__3].r + z__2.r, z__1.i = x[i__3].i +
00317 z__2.i;
00318 x[i__2].r = z__1.r, x[i__2].i = z__1.i;
00319 ix -= *incx;
00320
00321 }
00322 if (nounit) {
00323 i__1 = jx;
00324 i__2 = jx;
00325 i__3 = kk - *n + j;
00326 z__1.r = x[i__2].r * ap[i__3].r - x[i__2].i * ap[
00327 i__3].i, z__1.i = x[i__2].r * ap[i__3].i
00328 + x[i__2].i * ap[i__3].r;
00329 x[i__1].r = z__1.r, x[i__1].i = z__1.i;
00330 }
00331 }
00332 jx -= *incx;
00333 kk -= *n - j + 1;
00334
00335 }
00336 }
00337 }
00338 } else {
00339
00340
00341
00342 if (lsame_(uplo, "U")) {
00343 kk = *n * (*n + 1) / 2;
00344 if (*incx == 1) {
00345 for (j = *n; j >= 1; --j) {
00346 i__1 = j;
00347 temp.r = x[i__1].r, temp.i = x[i__1].i;
00348 k = kk - 1;
00349 if (noconj) {
00350 if (nounit) {
00351 i__1 = kk;
00352 z__1.r = temp.r * ap[i__1].r - temp.i * ap[i__1]
00353 .i, z__1.i = temp.r * ap[i__1].i + temp.i
00354 * ap[i__1].r;
00355 temp.r = z__1.r, temp.i = z__1.i;
00356 }
00357 for (i__ = j - 1; i__ >= 1; --i__) {
00358 i__1 = k;
00359 i__2 = i__;
00360 z__2.r = ap[i__1].r * x[i__2].r - ap[i__1].i * x[
00361 i__2].i, z__2.i = ap[i__1].r * x[i__2].i
00362 + ap[i__1].i * x[i__2].r;
00363 z__1.r = temp.r + z__2.r, z__1.i = temp.i +
00364 z__2.i;
00365 temp.r = z__1.r, temp.i = z__1.i;
00366 --k;
00367
00368 }
00369 } else {
00370 if (nounit) {
00371 d_cnjg(&z__2, &ap[kk]);
00372 z__1.r = temp.r * z__2.r - temp.i * z__2.i,
00373 z__1.i = temp.r * z__2.i + temp.i *
00374 z__2.r;
00375 temp.r = z__1.r, temp.i = z__1.i;
00376 }
00377 for (i__ = j - 1; i__ >= 1; --i__) {
00378 d_cnjg(&z__3, &ap[k]);
00379 i__1 = i__;
00380 z__2.r = z__3.r * x[i__1].r - z__3.i * x[i__1].i,
00381 z__2.i = z__3.r * x[i__1].i + z__3.i * x[
00382 i__1].r;
00383 z__1.r = temp.r + z__2.r, z__1.i = temp.i +
00384 z__2.i;
00385 temp.r = z__1.r, temp.i = z__1.i;
00386 --k;
00387
00388 }
00389 }
00390 i__1 = j;
00391 x[i__1].r = temp.r, x[i__1].i = temp.i;
00392 kk -= j;
00393
00394 }
00395 } else {
00396 jx = kx + (*n - 1) * *incx;
00397 for (j = *n; j >= 1; --j) {
00398 i__1 = jx;
00399 temp.r = x[i__1].r, temp.i = x[i__1].i;
00400 ix = jx;
00401 if (noconj) {
00402 if (nounit) {
00403 i__1 = kk;
00404 z__1.r = temp.r * ap[i__1].r - temp.i * ap[i__1]
00405 .i, z__1.i = temp.r * ap[i__1].i + temp.i
00406 * ap[i__1].r;
00407 temp.r = z__1.r, temp.i = z__1.i;
00408 }
00409 i__1 = kk - j + 1;
00410 for (k = kk - 1; k >= i__1; --k) {
00411 ix -= *incx;
00412 i__2 = k;
00413 i__3 = ix;
00414 z__2.r = ap[i__2].r * x[i__3].r - ap[i__2].i * x[
00415 i__3].i, z__2.i = ap[i__2].r * x[i__3].i
00416 + ap[i__2].i * x[i__3].r;
00417 z__1.r = temp.r + z__2.r, z__1.i = temp.i +
00418 z__2.i;
00419 temp.r = z__1.r, temp.i = z__1.i;
00420
00421 }
00422 } else {
00423 if (nounit) {
00424 d_cnjg(&z__2, &ap[kk]);
00425 z__1.r = temp.r * z__2.r - temp.i * z__2.i,
00426 z__1.i = temp.r * z__2.i + temp.i *
00427 z__2.r;
00428 temp.r = z__1.r, temp.i = z__1.i;
00429 }
00430 i__1 = kk - j + 1;
00431 for (k = kk - 1; k >= i__1; --k) {
00432 ix -= *incx;
00433 d_cnjg(&z__3, &ap[k]);
00434 i__2 = ix;
00435 z__2.r = z__3.r * x[i__2].r - z__3.i * x[i__2].i,
00436 z__2.i = z__3.r * x[i__2].i + z__3.i * x[
00437 i__2].r;
00438 z__1.r = temp.r + z__2.r, z__1.i = temp.i +
00439 z__2.i;
00440 temp.r = z__1.r, temp.i = z__1.i;
00441
00442 }
00443 }
00444 i__1 = jx;
00445 x[i__1].r = temp.r, x[i__1].i = temp.i;
00446 jx -= *incx;
00447 kk -= j;
00448
00449 }
00450 }
00451 } else {
00452 kk = 1;
00453 if (*incx == 1) {
00454 i__1 = *n;
00455 for (j = 1; j <= i__1; ++j) {
00456 i__2 = j;
00457 temp.r = x[i__2].r, temp.i = x[i__2].i;
00458 k = kk + 1;
00459 if (noconj) {
00460 if (nounit) {
00461 i__2 = kk;
00462 z__1.r = temp.r * ap[i__2].r - temp.i * ap[i__2]
00463 .i, z__1.i = temp.r * ap[i__2].i + temp.i
00464 * ap[i__2].r;
00465 temp.r = z__1.r, temp.i = z__1.i;
00466 }
00467 i__2 = *n;
00468 for (i__ = j + 1; i__ <= i__2; ++i__) {
00469 i__3 = k;
00470 i__4 = i__;
00471 z__2.r = ap[i__3].r * x[i__4].r - ap[i__3].i * x[
00472 i__4].i, z__2.i = ap[i__3].r * x[i__4].i
00473 + ap[i__3].i * x[i__4].r;
00474 z__1.r = temp.r + z__2.r, z__1.i = temp.i +
00475 z__2.i;
00476 temp.r = z__1.r, temp.i = z__1.i;
00477 ++k;
00478
00479 }
00480 } else {
00481 if (nounit) {
00482 d_cnjg(&z__2, &ap[kk]);
00483 z__1.r = temp.r * z__2.r - temp.i * z__2.i,
00484 z__1.i = temp.r * z__2.i + temp.i *
00485 z__2.r;
00486 temp.r = z__1.r, temp.i = z__1.i;
00487 }
00488 i__2 = *n;
00489 for (i__ = j + 1; i__ <= i__2; ++i__) {
00490 d_cnjg(&z__3, &ap[k]);
00491 i__3 = i__;
00492 z__2.r = z__3.r * x[i__3].r - z__3.i * x[i__3].i,
00493 z__2.i = z__3.r * x[i__3].i + z__3.i * x[
00494 i__3].r;
00495 z__1.r = temp.r + z__2.r, z__1.i = temp.i +
00496 z__2.i;
00497 temp.r = z__1.r, temp.i = z__1.i;
00498 ++k;
00499
00500 }
00501 }
00502 i__2 = j;
00503 x[i__2].r = temp.r, x[i__2].i = temp.i;
00504 kk += *n - j + 1;
00505
00506 }
00507 } else {
00508 jx = kx;
00509 i__1 = *n;
00510 for (j = 1; j <= i__1; ++j) {
00511 i__2 = jx;
00512 temp.r = x[i__2].r, temp.i = x[i__2].i;
00513 ix = jx;
00514 if (noconj) {
00515 if (nounit) {
00516 i__2 = kk;
00517 z__1.r = temp.r * ap[i__2].r - temp.i * ap[i__2]
00518 .i, z__1.i = temp.r * ap[i__2].i + temp.i
00519 * ap[i__2].r;
00520 temp.r = z__1.r, temp.i = z__1.i;
00521 }
00522 i__2 = kk + *n - j;
00523 for (k = kk + 1; k <= i__2; ++k) {
00524 ix += *incx;
00525 i__3 = k;
00526 i__4 = ix;
00527 z__2.r = ap[i__3].r * x[i__4].r - ap[i__3].i * x[
00528 i__4].i, z__2.i = ap[i__3].r * x[i__4].i
00529 + ap[i__3].i * x[i__4].r;
00530 z__1.r = temp.r + z__2.r, z__1.i = temp.i +
00531 z__2.i;
00532 temp.r = z__1.r, temp.i = z__1.i;
00533
00534 }
00535 } else {
00536 if (nounit) {
00537 d_cnjg(&z__2, &ap[kk]);
00538 z__1.r = temp.r * z__2.r - temp.i * z__2.i,
00539 z__1.i = temp.r * z__2.i + temp.i *
00540 z__2.r;
00541 temp.r = z__1.r, temp.i = z__1.i;
00542 }
00543 i__2 = kk + *n - j;
00544 for (k = kk + 1; k <= i__2; ++k) {
00545 ix += *incx;
00546 d_cnjg(&z__3, &ap[k]);
00547 i__3 = ix;
00548 z__2.r = z__3.r * x[i__3].r - z__3.i * x[i__3].i,
00549 z__2.i = z__3.r * x[i__3].i + z__3.i * x[
00550 i__3].r;
00551 z__1.r = temp.r + z__2.r, z__1.i = temp.i +
00552 z__2.i;
00553 temp.r = z__1.r, temp.i = z__1.i;
00554
00555 }
00556 }
00557 i__2 = jx;
00558 x[i__2].r = temp.r, x[i__2].i = temp.i;
00559 jx += *incx;
00560 kk += *n - j + 1;
00561
00562 }
00563 }
00564 }
00565 }
00566
00567 return 0;
00568
00569
00570
00571 }