Doxygen Source Code Documentation
eis_rebakb.c File Reference
#include "f2c.h"
Go to the source code of this file.
Functions | |
int | rebakb_ (integer *nm, integer *n, doublereal *b, doublereal *dl, integer *m, doublereal *z__) |
Function Documentation
|
Definition at line 8 of file eis_rebakb.c. References i1. Referenced by rsgba_().
00010 { 00011 /* System generated locals */ 00012 integer b_dim1, b_offset, z_dim1, z_offset, i__1, i__2, i__3; 00013 00014 /* Local variables */ 00015 static integer i__, j, k; 00016 static doublereal x; 00017 static integer i1, ii; 00018 00019 00020 00021 /* THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE REBAKB, */ 00022 /* NUM. MATH. 11, 99-110(1968) BY MARTIN AND WILKINSON. */ 00023 /* HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 303-314(1971). */ 00024 00025 /* THIS SUBROUTINE FORMS THE EIGENVECTORS OF A GENERALIZED */ 00026 /* SYMMETRIC EIGENSYSTEM BY BACK TRANSFORMING THOSE OF THE */ 00027 /* DERIVED SYMMETRIC MATRIX DETERMINED BY REDUC2. */ 00028 00029 /* ON INPUT */ 00030 00031 /* NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL */ 00032 /* ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM */ 00033 /* DIMENSION STATEMENT. */ 00034 00035 /* N IS THE ORDER OF THE MATRIX SYSTEM. */ 00036 00037 /* B CONTAINS INFORMATION ABOUT THE SIMILARITY TRANSFORMATION */ 00038 /* (CHOLESKY DECOMPOSITION) USED IN THE REDUCTION BY REDUC2 */ 00039 /* IN ITS STRICT LOWER TRIANGLE. */ 00040 00041 /* DL CONTAINS FURTHER INFORMATION ABOUT THE TRANSFORMATION. */ 00042 00043 /* M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED. */ 00044 00045 /* Z CONTAINS THE EIGENVECTORS TO BE BACK TRANSFORMED */ 00046 /* IN ITS FIRST M COLUMNS. */ 00047 00048 /* ON OUTPUT */ 00049 00050 /* Z CONTAINS THE TRANSFORMED EIGENVECTORS */ 00051 /* IN ITS FIRST M COLUMNS. */ 00052 00053 /* QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW, */ 00054 /* MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY 00055 */ 00056 00057 /* THIS VERSION DATED AUGUST 1983. */ 00058 00059 /* ------------------------------------------------------------------ 00060 */ 00061 00062 /* Parameter adjustments */ 00063 --dl; 00064 b_dim1 = *nm; 00065 b_offset = b_dim1 + 1; 00066 b -= b_offset; 00067 z_dim1 = *nm; 00068 z_offset = z_dim1 + 1; 00069 z__ -= z_offset; 00070 00071 /* Function Body */ 00072 if (*m == 0) { 00073 goto L200; 00074 } 00075 00076 i__1 = *m; 00077 for (j = 1; j <= i__1; ++j) { 00078 /* .......... FOR I=N STEP -1 UNTIL 1 DO -- .......... */ 00079 i__2 = *n; 00080 for (ii = 1; ii <= i__2; ++ii) { 00081 i1 = *n - ii; 00082 i__ = i1 + 1; 00083 x = dl[i__] * z__[i__ + j * z_dim1]; 00084 if (i__ == 1) { 00085 goto L80; 00086 } 00087 00088 i__3 = i1; 00089 for (k = 1; k <= i__3; ++k) { 00090 /* L60: */ 00091 x += b[i__ + k * b_dim1] * z__[k + j * z_dim1]; 00092 } 00093 00094 L80: 00095 z__[i__ + j * z_dim1] = x; 00096 /* L100: */ 00097 } 00098 } 00099 00100 L200: 00101 return 0; 00102 } /* rebakb_ */ |