Doxygen Source Code Documentation
eis_rsp.c File Reference
#include "f2c.h"Go to the source code of this file.
Functions | |
| int | rsp_ (integer *nm, integer *n, integer *nv, doublereal *a, doublereal *w, integer *matz, doublereal *z__, doublereal *fv1, doublereal *fv2, integer *ierr) |
Function Documentation
|
||||||||||||||||||||||||||||||||||||||||||||
|
Definition at line 8 of file eis_rsp.c. References a, tql2_(), tqlrat_(), trbak3_(), and tred3_().
00011 {
00012 /* System generated locals */
00013 integer z_dim1, z_offset, i__1, i__2;
00014
00015 /* Local variables */
00016 extern /* Subroutine */ int tred3_(integer *, integer *, doublereal *,
00017 doublereal *, doublereal *, doublereal *);
00018 static integer i__, j;
00019 extern /* Subroutine */ int trbak3_(integer *, integer *, integer *,
00020 doublereal *, integer *, doublereal *), tqlrat_(integer *,
00021 doublereal *, doublereal *, integer *), tql2_(integer *, integer *
00022 , doublereal *, doublereal *, doublereal *, integer *);
00023
00024
00025
00026 /* THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF */
00027 /* SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK) */
00028 /* TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED) */
00029 /* OF A REAL SYMMETRIC PACKED MATRIX. */
00030
00031 /* ON INPUT */
00032
00033 /* NM MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL */
00034 /* ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM */
00035 /* DIMENSION STATEMENT. */
00036
00037 /* N IS THE ORDER OF THE MATRIX A. */
00038
00039 /* NV IS AN INTEGER VARIABLE SET EQUAL TO THE */
00040 /* DIMENSION OF THE ARRAY A AS SPECIFIED FOR */
00041 /* A IN THE CALLING PROGRAM. NV MUST NOT BE */
00042 /* LESS THAN N*(N+1)/2. */
00043
00044 /* A CONTAINS THE LOWER TRIANGLE OF THE REAL SYMMETRIC */
00045 /* PACKED MATRIX STORED ROW-WISE. */
00046
00047 /* MATZ IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF */
00048 /* ONLY EIGENVALUES ARE DESIRED. OTHERWISE IT IS SET TO */
00049 /* ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS. */
00050
00051 /* ON OUTPUT */
00052
00053 /* W CONTAINS THE EIGENVALUES IN ASCENDING ORDER. */
00054
00055 /* Z CONTAINS THE EIGENVECTORS IF MATZ IS NOT ZERO. */
00056
00057 /* IERR IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR */
00058 /* COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR TQLRAT */
00059 /* AND TQL2. THE NORMAL COMPLETION CODE IS ZERO. */
00060
00061 /* FV1 AND FV2 ARE TEMPORARY STORAGE ARRAYS. */
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 --fv2;
00074 --fv1;
00075 z_dim1 = *nm;
00076 z_offset = z_dim1 + 1;
00077 z__ -= z_offset;
00078 --w;
00079 --a;
00080
00081 /* Function Body */
00082 if (*n <= *nm) {
00083 goto L5;
00084 }
00085 *ierr = *n * 10;
00086 goto L50;
00087 L5:
00088 if (*nv >= *n * (*n + 1) / 2) {
00089 goto L10;
00090 }
00091 *ierr = *n * 20;
00092 goto L50;
00093
00094 L10:
00095 tred3_(n, nv, &a[1], &w[1], &fv1[1], &fv2[1]);
00096 if (*matz != 0) {
00097 goto L20;
00098 }
00099 /* .......... FIND EIGENVALUES ONLY .......... */
00100 tqlrat_(n, &w[1], &fv2[1], ierr);
00101 goto L50;
00102 /* .......... FIND BOTH EIGENVALUES AND EIGENVECTORS .......... */
00103 L20:
00104 i__1 = *n;
00105 for (i__ = 1; i__ <= i__1; ++i__) {
00106
00107 i__2 = *n;
00108 for (j = 1; j <= i__2; ++j) {
00109 z__[j + i__ * z_dim1] = 0.;
00110 /* L30: */
00111 }
00112
00113 z__[i__ + i__ * z_dim1] = 1.;
00114 /* L40: */
00115 }
00116
00117 tql2_(nm, n, &w[1], &fv1[1], &z__[z_offset], ierr);
00118 if (*ierr != 0) {
00119 goto L50;
00120 }
00121 trbak3_(nm, n, nv, &a[1], n, &z__[z_offset]);
00122 L50:
00123 return 0;
00124 } /* rsp_ */
|