Doxygen Source Code Documentation
eis_invit.c File Reference
#include "f2c.h"Go to the source code of this file.
Functions | |
| int | invit_ (integer *nm, integer *n, doublereal *a, doublereal *wr, doublereal *wi, logical *select, integer *mm, integer *m, doublereal *z__, integer *ierr, doublereal *rm1, doublereal *rv1, doublereal *rv2) |
Function Documentation
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 8 of file eis_invit.c. References a, abs, cdiv_(), epslon_(), l, mp, n1, and pythag_().
00012 {
00013 /* System generated locals */
00014 integer a_dim1, a_offset, z_dim1, z_offset, rm1_dim1, rm1_offset, i__1,
00015 i__2, i__3;
00016 doublereal d__1, d__2;
00017
00018 /* Builtin functions */
00019 double sqrt(doublereal);
00020
00021 /* Local variables */
00022 extern /* Subroutine */ int cdiv_(doublereal *, doublereal *, doublereal *
00023 , doublereal *, doublereal *, doublereal *);
00024 static doublereal norm;
00025 static integer i__, j, k, l, s;
00026 static doublereal t, w, x, y;
00027 static integer n1;
00028 static doublereal normv;
00029 static integer ii;
00030 static doublereal ilambd;
00031 static integer ip, mp, ns, uk;
00032 static doublereal rlambd;
00033 extern doublereal pythag_(doublereal *, doublereal *), epslon_(doublereal
00034 *);
00035 static integer km1, ip1;
00036 static doublereal growto, ukroot;
00037 static integer its;
00038 static doublereal eps3;
00039
00040
00041
00042 /* THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE INVIT */
00043 /* BY PETERS AND WILKINSON. */
00044 /* HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 418-439(1971). */
00045
00046 /* THIS SUBROUTINE FINDS THOSE EIGENVECTORS OF A REAL UPPER */
00047 /* HESSENBERG MATRIX CORRESPONDING TO SPECIFIED EIGENVALUES, */
00048 /* USING INVERSE ITERATION. */
00049
00050 /* ON INPUT */
00051
00052 /* NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL */
00053 /* ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM */
00054 /* DIMENSION STATEMENT. */
00055
00056 /* N IS THE ORDER OF THE MATRIX. */
00057
00058 /* A CONTAINS THE HESSENBERG MATRIX. */
00059
00060 /* WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS, RESPECTIVELY, */
00061 /* OF THE EIGENVALUES OF THE MATRIX. THE EIGENVALUES MUST BE */
00062 /* STORED IN A MANNER IDENTICAL TO THAT OF SUBROUTINE HQR, */
00063 /* WHICH RECOGNIZES POSSIBLE SPLITTING OF THE MATRIX. */
00064
00065 /* SELECT SPECIFIES THE EIGENVECTORS TO BE FOUND. THE */
00066 /* EIGENVECTOR CORRESPONDING TO THE J-TH EIGENVALUE IS */
00067 /* SPECIFIED BY SETTING SELECT(J) TO .TRUE.. */
00068
00069 /* MM SHOULD BE SET TO AN UPPER BOUND FOR THE NUMBER OF */
00070 /* COLUMNS REQUIRED TO STORE THE EIGENVECTORS TO BE FOUND. */
00071 /* NOTE THAT TWO COLUMNS ARE REQUIRED TO STORE THE */
00072 /* EIGENVECTOR CORRESPONDING TO A COMPLEX EIGENVALUE. */
00073
00074 /* ON OUTPUT */
00075
00076 /* A AND WI ARE UNALTERED. */
00077
00078 /* WR MAY HAVE BEEN ALTERED SINCE CLOSE EIGENVALUES ARE PERTURBED
00079 */
00080 /* SLIGHTLY IN SEARCHING FOR INDEPENDENT EIGENVECTORS. */
00081
00082 /* SELECT MAY HAVE BEEN ALTERED. IF THE ELEMENTS CORRESPONDING */
00083 /* TO A PAIR OF CONJUGATE COMPLEX EIGENVALUES WERE EACH */
00084 /* INITIALLY SET TO .TRUE., THE PROGRAM RESETS THE SECOND OF */
00085 /* THE TWO ELEMENTS TO .FALSE.. */
00086
00087 /* M IS THE NUMBER OF COLUMNS ACTUALLY USED TO STORE */
00088 /* THE EIGENVECTORS. */
00089
00090 /* Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE EIGENVECTORS. */
00091 /* IF THE NEXT SELECTED EIGENVALUE IS REAL, THE NEXT COLUMN */
00092 /* OF Z CONTAINS ITS EIGENVECTOR. IF THE EIGENVALUE IS */
00093 /* COMPLEX, THE NEXT TWO COLUMNS OF Z CONTAIN THE REAL AND */
00094 /* IMAGINARY PARTS OF ITS EIGENVECTOR. THE EIGENVECTORS ARE */
00095 /* NORMALIZED SO THAT THE COMPONENT OF LARGEST MAGNITUDE IS 1. */
00096 /* ANY VECTOR WHICH FAILS THE ACCEPTANCE TEST IS SET TO ZERO. */
00097
00098 /* IERR IS SET TO */
00099 /* ZERO FOR NORMAL RETURN, */
00100 /* -(2*N+1) IF MORE THAN MM COLUMNS OF Z ARE NECESSARY */
00101 /* TO STORE THE EIGENVECTORS CORRESPONDING TO */
00102 /* THE SPECIFIED EIGENVALUES. */
00103 /* -K IF THE ITERATION CORRESPONDING TO THE K-TH */
00104 /* VALUE FAILS, */
00105 /* -(N+K) IF BOTH ERROR SITUATIONS OCCUR. */
00106
00107 /* RM1, RV1, AND RV2 ARE TEMPORARY STORAGE ARRAYS. NOTE THAT RM1
00108 */
00109 /* IS SQUARE OF DIMENSION N BY N AND, AUGMENTED BY TWO COLUMNS */
00110 /* OF Z, IS THE TRANSPOSE OF THE CORRESPONDING ALGOL B ARRAY. */
00111
00112 /* THE ALGOL PROCEDURE GUESSVEC APPEARS IN INVIT IN LINE. */
00113
00114 /* CALLS CDIV FOR COMPLEX DIVISION. */
00115 /* CALLS PYTHAG FOR DSQRT(A*A + B*B) . */
00116
00117 /* QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW, */
00118 /* MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
00119 */
00120
00121 /* THIS VERSION DATED AUGUST 1983. */
00122
00123 /* ------------------------------------------------------------------
00124 */
00125
00126 /* Parameter adjustments */
00127 --rv2;
00128 --rv1;
00129 rm1_dim1 = *n;
00130 rm1_offset = rm1_dim1 + 1;
00131 rm1 -= rm1_offset;
00132 --select;
00133 --wi;
00134 --wr;
00135 a_dim1 = *nm;
00136 a_offset = a_dim1 + 1;
00137 a -= a_offset;
00138 z_dim1 = *nm;
00139 z_offset = z_dim1 + 1;
00140 z__ -= z_offset;
00141
00142 /* Function Body */
00143 *ierr = 0;
00144 uk = 0;
00145 s = 1;
00146 /* .......... IP = 0, REAL EIGENVALUE */
00147 /* 1, FIRST OF CONJUGATE COMPLEX PAIR */
00148 /* -1, SECOND OF CONJUGATE COMPLEX PAIR .......... */
00149 ip = 0;
00150 n1 = *n - 1;
00151
00152 i__1 = *n;
00153 for (k = 1; k <= i__1; ++k) {
00154 if (wi[k] == 0. || ip < 0) {
00155 goto L100;
00156 }
00157 ip = 1;
00158 if (select[k] && select[k + 1]) {
00159 select[k + 1] = FALSE_;
00160 }
00161 L100:
00162 if (! select[k]) {
00163 goto L960;
00164 }
00165 if (wi[k] != 0.) {
00166 ++s;
00167 }
00168 if (s > *mm) {
00169 goto L1000;
00170 }
00171 if (uk >= k) {
00172 goto L200;
00173 }
00174 /* .......... CHECK FOR POSSIBLE SPLITTING .......... */
00175 i__2 = *n;
00176 for (uk = k; uk <= i__2; ++uk) {
00177 if (uk == *n) {
00178 goto L140;
00179 }
00180 if (a[uk + 1 + uk * a_dim1] == 0.) {
00181 goto L140;
00182 }
00183 /* L120: */
00184 }
00185 /* .......... COMPUTE INFINITY NORM OF LEADING UK BY UK */
00186 /* (HESSENBERG) MATRIX .......... */
00187 L140:
00188 norm = 0.;
00189 mp = 1;
00190
00191 i__2 = uk;
00192 for (i__ = 1; i__ <= i__2; ++i__) {
00193 x = 0.;
00194
00195 i__3 = uk;
00196 for (j = mp; j <= i__3; ++j) {
00197 /* L160: */
00198 x += (d__1 = a[i__ + j * a_dim1], abs(d__1));
00199 }
00200
00201 if (x > norm) {
00202 norm = x;
00203 }
00204 mp = i__;
00205 /* L180: */
00206 }
00207 /* .......... EPS3 REPLACES ZERO PIVOT IN DECOMPOSITION */
00208 /* AND CLOSE ROOTS ARE MODIFIED BY EPS3 .......... */
00209 if (norm == 0.) {
00210 norm = 1.;
00211 }
00212 eps3 = epslon_(&norm);
00213 /* .......... GROWTO IS THE CRITERION FOR THE GROWTH .......... */
00214 ukroot = (doublereal) uk;
00215 ukroot = sqrt(ukroot);
00216 growto = .1 / ukroot;
00217 L200:
00218 rlambd = wr[k];
00219 ilambd = wi[k];
00220 if (k == 1) {
00221 goto L280;
00222 }
00223 km1 = k - 1;
00224 goto L240;
00225 /* .......... PERTURB EIGENVALUE IF IT IS CLOSE */
00226 /* TO ANY PREVIOUS EIGENVALUE .......... */
00227 L220:
00228 rlambd += eps3;
00229 /* .......... FOR I=K-1 STEP -1 UNTIL 1 DO -- .......... */
00230 L240:
00231 i__2 = km1;
00232 for (ii = 1; ii <= i__2; ++ii) {
00233 i__ = k - ii;
00234 if (select[i__] && (d__1 = wr[i__] - rlambd, abs(d__1)) < eps3 &&
00235 (d__2 = wi[i__] - ilambd, abs(d__2)) < eps3) {
00236 goto L220;
00237 }
00238 /* L260: */
00239 }
00240
00241 wr[k] = rlambd;
00242 /* .......... PERTURB CONJUGATE EIGENVALUE TO MATCH .......... */
00243 ip1 = k + ip;
00244 wr[ip1] = rlambd;
00245 /* .......... FORM UPPER HESSENBERG A-RLAMBD*I (TRANSPOSED) */
00246 /* AND INITIAL REAL VECTOR .......... */
00247 L280:
00248 mp = 1;
00249
00250 i__2 = uk;
00251 for (i__ = 1; i__ <= i__2; ++i__) {
00252
00253 i__3 = uk;
00254 for (j = mp; j <= i__3; ++j) {
00255 /* L300: */
00256 rm1[j + i__ * rm1_dim1] = a[i__ + j * a_dim1];
00257 }
00258
00259 rm1[i__ + i__ * rm1_dim1] -= rlambd;
00260 mp = i__;
00261 rv1[i__] = eps3;
00262 /* L320: */
00263 }
00264
00265 its = 0;
00266 if (ilambd != 0.) {
00267 goto L520;
00268 }
00269 /* .......... REAL EIGENVALUE. */
00270 /* TRIANGULAR DECOMPOSITION WITH INTERCHANGES, */
00271 /* REPLACING ZERO PIVOTS BY EPS3 .......... */
00272 if (uk == 1) {
00273 goto L420;
00274 }
00275
00276 i__2 = uk;
00277 for (i__ = 2; i__ <= i__2; ++i__) {
00278 mp = i__ - 1;
00279 if ((d__1 = rm1[mp + i__ * rm1_dim1], abs(d__1)) <= (d__2 = rm1[
00280 mp + mp * rm1_dim1], abs(d__2))) {
00281 goto L360;
00282 }
00283
00284 i__3 = uk;
00285 for (j = mp; j <= i__3; ++j) {
00286 y = rm1[j + i__ * rm1_dim1];
00287 rm1[j + i__ * rm1_dim1] = rm1[j + mp * rm1_dim1];
00288 rm1[j + mp * rm1_dim1] = y;
00289 /* L340: */
00290 }
00291
00292 L360:
00293 if (rm1[mp + mp * rm1_dim1] == 0.) {
00294 rm1[mp + mp * rm1_dim1] = eps3;
00295 }
00296 x = rm1[mp + i__ * rm1_dim1] / rm1[mp + mp * rm1_dim1];
00297 if (x == 0.) {
00298 goto L400;
00299 }
00300
00301 i__3 = uk;
00302 for (j = i__; j <= i__3; ++j) {
00303 /* L380: */
00304 rm1[j + i__ * rm1_dim1] -= x * rm1[j + mp * rm1_dim1];
00305 }
00306
00307 L400:
00308 ;
00309 }
00310
00311 L420:
00312 if (rm1[uk + uk * rm1_dim1] == 0.) {
00313 rm1[uk + uk * rm1_dim1] = eps3;
00314 }
00315 /* .......... BACK SUBSTITUTION FOR REAL VECTOR */
00316 /* FOR I=UK STEP -1 UNTIL 1 DO -- .......... */
00317 L440:
00318 i__2 = uk;
00319 for (ii = 1; ii <= i__2; ++ii) {
00320 i__ = uk + 1 - ii;
00321 y = rv1[i__];
00322 if (i__ == uk) {
00323 goto L480;
00324 }
00325 ip1 = i__ + 1;
00326
00327 i__3 = uk;
00328 for (j = ip1; j <= i__3; ++j) {
00329 /* L460: */
00330 y -= rm1[j + i__ * rm1_dim1] * rv1[j];
00331 }
00332
00333 L480:
00334 rv1[i__] = y / rm1[i__ + i__ * rm1_dim1];
00335 /* L500: */
00336 }
00337
00338 goto L740;
00339 /* .......... COMPLEX EIGENVALUE. */
00340 /* TRIANGULAR DECOMPOSITION WITH INTERCHANGES, */
00341 /* REPLACING ZERO PIVOTS BY EPS3. STORE IMAGINARY */
00342 /* PARTS IN UPPER TRIANGLE STARTING AT (1,3) ..........
00343 */
00344 L520:
00345 ns = *n - s;
00346 z__[(s - 1) * z_dim1 + 1] = -ilambd;
00347 z__[s * z_dim1 + 1] = 0.;
00348 if (*n == 2) {
00349 goto L550;
00350 }
00351 rm1[rm1_dim1 * 3 + 1] = -ilambd;
00352 z__[(s - 1) * z_dim1 + 1] = 0.;
00353 if (*n == 3) {
00354 goto L550;
00355 }
00356
00357 i__2 = *n;
00358 for (i__ = 4; i__ <= i__2; ++i__) {
00359 /* L540: */
00360 rm1[i__ * rm1_dim1 + 1] = 0.;
00361 }
00362
00363 L550:
00364 i__2 = uk;
00365 for (i__ = 2; i__ <= i__2; ++i__) {
00366 mp = i__ - 1;
00367 w = rm1[mp + i__ * rm1_dim1];
00368 if (i__ < *n) {
00369 t = rm1[mp + (i__ + 1) * rm1_dim1];
00370 }
00371 if (i__ == *n) {
00372 t = z__[mp + (s - 1) * z_dim1];
00373 }
00374 x = rm1[mp + mp * rm1_dim1] * rm1[mp + mp * rm1_dim1] + t * t;
00375 if (w * w <= x) {
00376 goto L580;
00377 }
00378 x = rm1[mp + mp * rm1_dim1] / w;
00379 y = t / w;
00380 rm1[mp + mp * rm1_dim1] = w;
00381 if (i__ < *n) {
00382 rm1[mp + (i__ + 1) * rm1_dim1] = 0.;
00383 }
00384 if (i__ == *n) {
00385 z__[mp + (s - 1) * z_dim1] = 0.;
00386 }
00387
00388 i__3 = uk;
00389 for (j = i__; j <= i__3; ++j) {
00390 w = rm1[j + i__ * rm1_dim1];
00391 rm1[j + i__ * rm1_dim1] = rm1[j + mp * rm1_dim1] - x * w;
00392 rm1[j + mp * rm1_dim1] = w;
00393 if (j < n1) {
00394 goto L555;
00395 }
00396 l = j - ns;
00397 z__[i__ + l * z_dim1] = z__[mp + l * z_dim1] - y * w;
00398 z__[mp + l * z_dim1] = 0.;
00399 goto L560;
00400 L555:
00401 rm1[i__ + (j + 2) * rm1_dim1] = rm1[mp + (j + 2) * rm1_dim1]
00402 - y * w;
00403 rm1[mp + (j + 2) * rm1_dim1] = 0.;
00404 L560:
00405 ;
00406 }
00407
00408 rm1[i__ + i__ * rm1_dim1] -= y * ilambd;
00409 if (i__ < n1) {
00410 goto L570;
00411 }
00412 l = i__ - ns;
00413 z__[mp + l * z_dim1] = -ilambd;
00414 z__[i__ + l * z_dim1] += x * ilambd;
00415 goto L640;
00416 L570:
00417 rm1[mp + (i__ + 2) * rm1_dim1] = -ilambd;
00418 rm1[i__ + (i__ + 2) * rm1_dim1] += x * ilambd;
00419 goto L640;
00420 L580:
00421 if (x != 0.) {
00422 goto L600;
00423 }
00424 rm1[mp + mp * rm1_dim1] = eps3;
00425 if (i__ < *n) {
00426 rm1[mp + (i__ + 1) * rm1_dim1] = 0.;
00427 }
00428 if (i__ == *n) {
00429 z__[mp + (s - 1) * z_dim1] = 0.;
00430 }
00431 t = 0.;
00432 x = eps3 * eps3;
00433 L600:
00434 w /= x;
00435 x = rm1[mp + mp * rm1_dim1] * w;
00436 y = -t * w;
00437
00438 i__3 = uk;
00439 for (j = i__; j <= i__3; ++j) {
00440 if (j < n1) {
00441 goto L610;
00442 }
00443 l = j - ns;
00444 t = z__[mp + l * z_dim1];
00445 z__[i__ + l * z_dim1] = -x * t - y * rm1[j + mp * rm1_dim1];
00446 goto L615;
00447 L610:
00448 t = rm1[mp + (j + 2) * rm1_dim1];
00449 rm1[i__ + (j + 2) * rm1_dim1] = -x * t - y * rm1[j + mp *
00450 rm1_dim1];
00451 L615:
00452 rm1[j + i__ * rm1_dim1] = rm1[j + i__ * rm1_dim1] - x * rm1[j
00453 + mp * rm1_dim1] + y * t;
00454 /* L620: */
00455 }
00456
00457 if (i__ < n1) {
00458 goto L630;
00459 }
00460 l = i__ - ns;
00461 z__[i__ + l * z_dim1] -= ilambd;
00462 goto L640;
00463 L630:
00464 rm1[i__ + (i__ + 2) * rm1_dim1] -= ilambd;
00465 L640:
00466 ;
00467 }
00468
00469 if (uk < n1) {
00470 goto L650;
00471 }
00472 l = uk - ns;
00473 t = z__[uk + l * z_dim1];
00474 goto L655;
00475 L650:
00476 t = rm1[uk + (uk + 2) * rm1_dim1];
00477 L655:
00478 if (rm1[uk + uk * rm1_dim1] == 0. && t == 0.) {
00479 rm1[uk + uk * rm1_dim1] = eps3;
00480 }
00481 /* .......... BACK SUBSTITUTION FOR COMPLEX VECTOR */
00482 /* FOR I=UK STEP -1 UNTIL 1 DO -- .......... */
00483 L660:
00484 i__2 = uk;
00485 for (ii = 1; ii <= i__2; ++ii) {
00486 i__ = uk + 1 - ii;
00487 x = rv1[i__];
00488 y = 0.;
00489 if (i__ == uk) {
00490 goto L700;
00491 }
00492 ip1 = i__ + 1;
00493
00494 i__3 = uk;
00495 for (j = ip1; j <= i__3; ++j) {
00496 if (j < n1) {
00497 goto L670;
00498 }
00499 l = j - ns;
00500 t = z__[i__ + l * z_dim1];
00501 goto L675;
00502 L670:
00503 t = rm1[i__ + (j + 2) * rm1_dim1];
00504 L675:
00505 x = x - rm1[j + i__ * rm1_dim1] * rv1[j] + t * rv2[j];
00506 y = y - rm1[j + i__ * rm1_dim1] * rv2[j] - t * rv1[j];
00507 /* L680: */
00508 }
00509
00510 L700:
00511 if (i__ < n1) {
00512 goto L710;
00513 }
00514 l = i__ - ns;
00515 t = z__[i__ + l * z_dim1];
00516 goto L715;
00517 L710:
00518 t = rm1[i__ + (i__ + 2) * rm1_dim1];
00519 L715:
00520 cdiv_(&x, &y, &rm1[i__ + i__ * rm1_dim1], &t, &rv1[i__], &rv2[i__]
00521 );
00522 /* L720: */
00523 }
00524 /* .......... ACCEPTANCE TEST FOR REAL OR COMPLEX */
00525 /* EIGENVECTOR AND NORMALIZATION .......... */
00526 L740:
00527 ++its;
00528 norm = 0.;
00529 normv = 0.;
00530
00531 i__2 = uk;
00532 for (i__ = 1; i__ <= i__2; ++i__) {
00533 if (ilambd == 0.) {
00534 x = (d__1 = rv1[i__], abs(d__1));
00535 }
00536 if (ilambd != 0.) {
00537 x = pythag_(&rv1[i__], &rv2[i__]);
00538 }
00539 if (normv >= x) {
00540 goto L760;
00541 }
00542 normv = x;
00543 j = i__;
00544 L760:
00545 norm += x;
00546 /* L780: */
00547 }
00548
00549 if (norm < growto) {
00550 goto L840;
00551 }
00552 /* .......... ACCEPT VECTOR .......... */
00553 x = rv1[j];
00554 if (ilambd == 0.) {
00555 x = 1. / x;
00556 }
00557 if (ilambd != 0.) {
00558 y = rv2[j];
00559 }
00560
00561 i__2 = uk;
00562 for (i__ = 1; i__ <= i__2; ++i__) {
00563 if (ilambd != 0.) {
00564 goto L800;
00565 }
00566 z__[i__ + s * z_dim1] = rv1[i__] * x;
00567 goto L820;
00568 L800:
00569 cdiv_(&rv1[i__], &rv2[i__], &x, &y, &z__[i__ + (s - 1) * z_dim1],
00570 &z__[i__ + s * z_dim1]);
00571 L820:
00572 ;
00573 }
00574
00575 if (uk == *n) {
00576 goto L940;
00577 }
00578 j = uk + 1;
00579 goto L900;
00580 /* .......... IN-LINE PROCEDURE FOR CHOOSING */
00581 /* A NEW STARTING VECTOR .......... */
00582 L840:
00583 if (its >= uk) {
00584 goto L880;
00585 }
00586 x = ukroot;
00587 y = eps3 / (x + 1.);
00588 rv1[1] = eps3;
00589
00590 i__2 = uk;
00591 for (i__ = 2; i__ <= i__2; ++i__) {
00592 /* L860: */
00593 rv1[i__] = y;
00594 }
00595
00596 j = uk - its + 1;
00597 rv1[j] -= eps3 * x;
00598 if (ilambd == 0.) {
00599 goto L440;
00600 }
00601 goto L660;
00602 /* .......... SET ERROR -- UNACCEPTED EIGENVECTOR .......... */
00603 L880:
00604 j = 1;
00605 *ierr = -k;
00606 /* .......... SET REMAINING VECTOR COMPONENTS TO ZERO ..........
00607 */
00608 L900:
00609 i__2 = *n;
00610 for (i__ = j; i__ <= i__2; ++i__) {
00611 z__[i__ + s * z_dim1] = 0.;
00612 if (ilambd != 0.) {
00613 z__[i__ + (s - 1) * z_dim1] = 0.;
00614 }
00615 /* L920: */
00616 }
00617
00618 L940:
00619 ++s;
00620 L960:
00621 if (ip == -1) {
00622 ip = 0;
00623 }
00624 if (ip == 1) {
00625 ip = -1;
00626 }
00627 /* L980: */
00628 }
00629
00630 goto L1001;
00631 /* .......... SET ERROR -- UNDERESTIMATE OF EIGENVECTOR */
00632 /* SPACE REQUIRED .......... */
00633 L1000:
00634 if (*ierr != 0) {
00635 *ierr -= *n;
00636 }
00637 if (*ierr == 0) {
00638 *ierr = -((*n << 1) + 1);
00639 }
00640 L1001:
00641 *m = s - 1 - abs(ip);
00642 return 0;
00643 } /* invit_ */
|