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