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