Doxygen Source Code Documentation
eis_bakvec.c File Reference
#include "f2c.h"Go to the source code of this file.
Functions | |
| int | bakvec_ (integer *nm, integer *n, doublereal *t, doublereal *e, integer *m, doublereal *z__, integer *ierr) |
Function Documentation
|
||||||||||||||||||||||||||||||||
|
Definition at line 8 of file eis_bakvec.c.
00010 {
00011 /* System generated locals */
00012 integer t_dim1, t_offset, z_dim1, z_offset, i__1, i__2;
00013
00014 /* Local variables */
00015 static integer i__, j;
00016
00017
00018
00019 /* THIS SUBROUTINE FORMS THE EIGENVECTORS OF A NONSYMMETRIC */
00020 /* TRIDIAGONAL MATRIX BY BACK TRANSFORMING THOSE OF THE */
00021 /* CORRESPONDING SYMMETRIC MATRIX DETERMINED BY FIGI. */
00022
00023 /* ON INPUT */
00024
00025 /* NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL */
00026 /* ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM */
00027 /* DIMENSION STATEMENT. */
00028
00029 /* N IS THE ORDER OF THE MATRIX. */
00030
00031 /* T CONTAINS THE NONSYMMETRIC MATRIX. ITS SUBDIAGONAL IS */
00032 /* STORED IN THE LAST N-1 POSITIONS OF THE FIRST COLUMN, */
00033 /* ITS DIAGONAL IN THE N POSITIONS OF THE SECOND COLUMN, */
00034 /* AND ITS SUPERDIAGONAL IN THE FIRST N-1 POSITIONS OF */
00035 /* THE THIRD COLUMN. T(1,1) AND T(N,3) ARE ARBITRARY. */
00036
00037 /* E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE SYMMETRIC */
00038 /* MATRIX IN ITS LAST N-1 POSITIONS. E(1) IS ARBITRARY. */
00039
00040 /* M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED. */
00041
00042 /* Z CONTAINS THE EIGENVECTORS TO BE BACK TRANSFORMED */
00043 /* IN ITS FIRST M COLUMNS. */
00044
00045 /* ON OUTPUT */
00046
00047 /* T IS UNALTERED. */
00048
00049 /* E IS DESTROYED. */
00050
00051 /* Z CONTAINS THE TRANSFORMED EIGENVECTORS */
00052 /* IN ITS FIRST M COLUMNS. */
00053
00054 /* IERR IS SET TO */
00055 /* ZERO FOR NORMAL RETURN, */
00056 /* 2*N+I IF E(I) IS ZERO WITH T(I,1) OR T(I-1,3) NON-ZERO.
00057 */
00058 /* IN THIS CASE, THE SYMMETRIC MATRIX IS NOT SIMILAR
00059 */
00060 /* TO THE ORIGINAL MATRIX, AND THE EIGENVECTORS */
00061 /* CANNOT BE FOUND BY THIS PROGRAM. */
00062
00063 /* QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW, */
00064 /* MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
00065 */
00066
00067 /* THIS VERSION DATED AUGUST 1983. */
00068
00069 /* ------------------------------------------------------------------
00070 */
00071
00072 /* Parameter adjustments */
00073 t_dim1 = *nm;
00074 t_offset = t_dim1 + 1;
00075 t -= t_offset;
00076 --e;
00077 z_dim1 = *nm;
00078 z_offset = z_dim1 + 1;
00079 z__ -= z_offset;
00080
00081 /* Function Body */
00082 *ierr = 0;
00083 if (*m == 0) {
00084 goto L1001;
00085 }
00086 e[1] = 1.;
00087 if (*n == 1) {
00088 goto L1001;
00089 }
00090
00091 i__1 = *n;
00092 for (i__ = 2; i__ <= i__1; ++i__) {
00093 if (e[i__] != 0.) {
00094 goto L80;
00095 }
00096 if (t[i__ + t_dim1] != 0. || t[i__ - 1 + t_dim1 * 3] != 0.) {
00097 goto L1000;
00098 }
00099 e[i__] = 1.;
00100 goto L100;
00101 L80:
00102 e[i__] = e[i__ - 1] * e[i__] / t[i__ - 1 + t_dim1 * 3];
00103 L100:
00104 ;
00105 }
00106
00107 i__1 = *m;
00108 for (j = 1; j <= i__1; ++j) {
00109
00110 i__2 = *n;
00111 for (i__ = 2; i__ <= i__2; ++i__) {
00112 z__[i__ + j * z_dim1] *= e[i__];
00113 /* L120: */
00114 }
00115 }
00116
00117 goto L1001;
00118 /* .......... SET ERROR -- EIGENVECTORS CANNOT BE */
00119 /* FOUND BY THIS PROGRAM .......... */
00120 L1000:
00121 *ierr = (*n << 1) + i__;
00122 L1001:
00123 return 0;
00124 } /* bakvec_ */
|