Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "f2c.h"
00014 #include "blaswrap.h"
00015
00016 int stpttf_(char *transr, char *uplo, integer *n, real *ap,
00017 real *arf, integer *info)
00018 {
00019
00020 integer i__1, i__2, i__3;
00021
00022
00023 integer i__, j, k, n1, n2, ij, jp, js, nt, lda, ijp;
00024 logical normaltransr;
00025 extern logical lsame_(char *, char *);
00026 logical lower;
00027 extern int xerbla_(char *, integer *);
00028 logical nisodd;
00029
00030
00031
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
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 *info = 0;
00180 normaltransr = lsame_(transr, "N");
00181 lower = lsame_(uplo, "L");
00182 if (! normaltransr && ! lsame_(transr, "T")) {
00183 *info = -1;
00184 } else if (! lower && ! lsame_(uplo, "U")) {
00185 *info = -2;
00186 } else if (*n < 0) {
00187 *info = -3;
00188 }
00189 if (*info != 0) {
00190 i__1 = -(*info);
00191 xerbla_("STPTTF", &i__1);
00192 return 0;
00193 }
00194
00195
00196
00197 if (*n == 0) {
00198 return 0;
00199 }
00200
00201 if (*n == 1) {
00202 if (normaltransr) {
00203 arf[0] = ap[0];
00204 } else {
00205 arf[0] = ap[0];
00206 }
00207 return 0;
00208 }
00209
00210
00211
00212 nt = *n * (*n + 1) / 2;
00213
00214
00215
00216 if (lower) {
00217 n2 = *n / 2;
00218 n1 = *n - n2;
00219 } else {
00220 n1 = *n / 2;
00221 n2 = *n - n1;
00222 }
00223
00224
00225
00226
00227
00228
00229
00230 if (*n % 2 == 0) {
00231 k = *n / 2;
00232 nisodd = FALSE_;
00233 lda = *n + 1;
00234 } else {
00235 nisodd = TRUE_;
00236 lda = *n;
00237 }
00238
00239
00240
00241 if (! normaltransr) {
00242 lda = (*n + 1) / 2;
00243 }
00244
00245
00246
00247 if (nisodd) {
00248
00249
00250
00251 if (normaltransr) {
00252
00253
00254
00255 if (lower) {
00256
00257
00258
00259 ijp = 0;
00260 jp = 0;
00261 i__1 = n2;
00262 for (j = 0; j <= i__1; ++j) {
00263 i__2 = *n - 1;
00264 for (i__ = j; i__ <= i__2; ++i__) {
00265 ij = i__ + jp;
00266 arf[ij] = ap[ijp];
00267 ++ijp;
00268 }
00269 jp += lda;
00270 }
00271 i__1 = n2 - 1;
00272 for (i__ = 0; i__ <= i__1; ++i__) {
00273 i__2 = n2;
00274 for (j = i__ + 1; j <= i__2; ++j) {
00275 ij = i__ + j * lda;
00276 arf[ij] = ap[ijp];
00277 ++ijp;
00278 }
00279 }
00280
00281 } else {
00282
00283
00284
00285 ijp = 0;
00286 i__1 = n1 - 1;
00287 for (j = 0; j <= i__1; ++j) {
00288 ij = n2 + j;
00289 i__2 = j;
00290 for (i__ = 0; i__ <= i__2; ++i__) {
00291 arf[ij] = ap[ijp];
00292 ++ijp;
00293 ij += lda;
00294 }
00295 }
00296 js = 0;
00297 i__1 = *n - 1;
00298 for (j = n1; j <= i__1; ++j) {
00299 ij = js;
00300 i__2 = js + j;
00301 for (ij = js; ij <= i__2; ++ij) {
00302 arf[ij] = ap[ijp];
00303 ++ijp;
00304 }
00305 js += lda;
00306 }
00307
00308 }
00309
00310 } else {
00311
00312
00313
00314 if (lower) {
00315
00316
00317
00318 ijp = 0;
00319 i__1 = n2;
00320 for (i__ = 0; i__ <= i__1; ++i__) {
00321 i__2 = *n * lda - 1;
00322 i__3 = lda;
00323 for (ij = i__ * (lda + 1); i__3 < 0 ? ij >= i__2 : ij <=
00324 i__2; ij += i__3) {
00325 arf[ij] = ap[ijp];
00326 ++ijp;
00327 }
00328 }
00329 js = 1;
00330 i__1 = n2 - 1;
00331 for (j = 0; j <= i__1; ++j) {
00332 i__3 = js + n2 - j - 1;
00333 for (ij = js; ij <= i__3; ++ij) {
00334 arf[ij] = ap[ijp];
00335 ++ijp;
00336 }
00337 js = js + lda + 1;
00338 }
00339
00340 } else {
00341
00342
00343
00344 ijp = 0;
00345 js = n2 * lda;
00346 i__1 = n1 - 1;
00347 for (j = 0; j <= i__1; ++j) {
00348 i__3 = js + j;
00349 for (ij = js; ij <= i__3; ++ij) {
00350 arf[ij] = ap[ijp];
00351 ++ijp;
00352 }
00353 js += lda;
00354 }
00355 i__1 = n1;
00356 for (i__ = 0; i__ <= i__1; ++i__) {
00357 i__3 = i__ + (n1 + i__) * lda;
00358 i__2 = lda;
00359 for (ij = i__; i__2 < 0 ? ij >= i__3 : ij <= i__3; ij +=
00360 i__2) {
00361 arf[ij] = ap[ijp];
00362 ++ijp;
00363 }
00364 }
00365
00366 }
00367
00368 }
00369
00370 } else {
00371
00372
00373
00374 if (normaltransr) {
00375
00376
00377
00378 if (lower) {
00379
00380
00381
00382 ijp = 0;
00383 jp = 0;
00384 i__1 = k - 1;
00385 for (j = 0; j <= i__1; ++j) {
00386 i__2 = *n - 1;
00387 for (i__ = j; i__ <= i__2; ++i__) {
00388 ij = i__ + 1 + jp;
00389 arf[ij] = ap[ijp];
00390 ++ijp;
00391 }
00392 jp += lda;
00393 }
00394 i__1 = k - 1;
00395 for (i__ = 0; i__ <= i__1; ++i__) {
00396 i__2 = k - 1;
00397 for (j = i__; j <= i__2; ++j) {
00398 ij = i__ + j * lda;
00399 arf[ij] = ap[ijp];
00400 ++ijp;
00401 }
00402 }
00403
00404 } else {
00405
00406
00407
00408 ijp = 0;
00409 i__1 = k - 1;
00410 for (j = 0; j <= i__1; ++j) {
00411 ij = k + 1 + j;
00412 i__2 = j;
00413 for (i__ = 0; i__ <= i__2; ++i__) {
00414 arf[ij] = ap[ijp];
00415 ++ijp;
00416 ij += lda;
00417 }
00418 }
00419 js = 0;
00420 i__1 = *n - 1;
00421 for (j = k; j <= i__1; ++j) {
00422 ij = js;
00423 i__2 = js + j;
00424 for (ij = js; ij <= i__2; ++ij) {
00425 arf[ij] = ap[ijp];
00426 ++ijp;
00427 }
00428 js += lda;
00429 }
00430
00431 }
00432
00433 } else {
00434
00435
00436
00437 if (lower) {
00438
00439
00440
00441 ijp = 0;
00442 i__1 = k - 1;
00443 for (i__ = 0; i__ <= i__1; ++i__) {
00444 i__2 = (*n + 1) * lda - 1;
00445 i__3 = lda;
00446 for (ij = i__ + (i__ + 1) * lda; i__3 < 0 ? ij >= i__2 :
00447 ij <= i__2; ij += i__3) {
00448 arf[ij] = ap[ijp];
00449 ++ijp;
00450 }
00451 }
00452 js = 0;
00453 i__1 = k - 1;
00454 for (j = 0; j <= i__1; ++j) {
00455 i__3 = js + k - j - 1;
00456 for (ij = js; ij <= i__3; ++ij) {
00457 arf[ij] = ap[ijp];
00458 ++ijp;
00459 }
00460 js = js + lda + 1;
00461 }
00462
00463 } else {
00464
00465
00466
00467 ijp = 0;
00468 js = (k + 1) * lda;
00469 i__1 = k - 1;
00470 for (j = 0; j <= i__1; ++j) {
00471 i__3 = js + j;
00472 for (ij = js; ij <= i__3; ++ij) {
00473 arf[ij] = ap[ijp];
00474 ++ijp;
00475 }
00476 js += lda;
00477 }
00478 i__1 = k - 1;
00479 for (i__ = 0; i__ <= i__1; ++i__) {
00480 i__3 = i__ + (k + i__) * lda;
00481 i__2 = lda;
00482 for (ij = i__; i__2 < 0 ? ij >= i__3 : ij <= i__3; ij +=
00483 i__2) {
00484 arf[ij] = ap[ijp];
00485 ++ijp;
00486 }
00487 }
00488
00489 }
00490
00491 }
00492
00493 }
00494
00495 return 0;
00496
00497
00498
00499 }