Doxygen Source Code Documentation
eis_rg.c File Reference
#include "f2c.h"
Go to the source code of this file.
Functions | |
int | rg_ (integer *nm, integer *n, doublereal *a, doublereal *wr, doublereal *wi, integer *matz, doublereal *z__, integer *iv1, doublereal *fv1, integer *ierr) |
Function Documentation
|
Definition at line 8 of file eis_rg.c. References a, balanc_(), balbak_(), elmhes_(), eltran_(), hqr2_(), and hqr_().
00011 { 00012 /* System generated locals */ 00013 integer a_dim1, a_offset, z_dim1, z_offset; 00014 00015 /* Local variables */ 00016 extern /* Subroutine */ int balbak_(integer *, integer *, integer *, 00017 integer *, doublereal *, integer *, doublereal *), balanc_( 00018 integer *, integer *, doublereal *, integer *, integer *, 00019 doublereal *), elmhes_(integer *, integer *, integer *, integer *, 00020 doublereal *, integer *), eltran_(integer *, integer *, integer * 00021 , integer *, doublereal *, integer *, doublereal *); 00022 static integer is1, is2; 00023 extern /* Subroutine */ int hqr_(integer *, integer *, integer *, integer 00024 *, doublereal *, doublereal *, doublereal *, integer *), hqr2_( 00025 integer *, integer *, integer *, integer *, doublereal *, 00026 doublereal *, doublereal *, doublereal *, integer *); 00027 00028 00029 00030 /* THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF */ 00031 /* SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK) */ 00032 /* TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED) */ 00033 /* OF A REAL GENERAL MATRIX. */ 00034 00035 /* ON INPUT */ 00036 00037 /* NM MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL */ 00038 /* ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM */ 00039 /* DIMENSION STATEMENT. */ 00040 00041 /* N IS THE ORDER OF THE MATRIX A. */ 00042 00043 /* A CONTAINS THE REAL GENERAL MATRIX. */ 00044 00045 /* MATZ IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF */ 00046 /* ONLY EIGENVALUES ARE DESIRED. OTHERWISE IT IS SET TO */ 00047 /* ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS. */ 00048 00049 /* ON OUTPUT */ 00050 00051 /* WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS, */ 00052 /* RESPECTIVELY, OF THE EIGENVALUES. COMPLEX CONJUGATE */ 00053 /* PAIRS OF EIGENVALUES APPEAR CONSECUTIVELY WITH THE */ 00054 /* EIGENVALUE HAVING THE POSITIVE IMAGINARY PART FIRST. */ 00055 00056 /* Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE EIGENVECTORS */ 00057 /* IF MATZ IS NOT ZERO. IF THE J-TH EIGENVALUE IS REAL, THE */ 00058 /* J-TH COLUMN OF Z CONTAINS ITS EIGENVECTOR. IF THE J-TH */ 00059 /* EIGENVALUE IS COMPLEX WITH POSITIVE IMAGINARY PART, THE */ 00060 /* J-TH AND (J+1)-TH COLUMNS OF Z CONTAIN THE REAL AND */ 00061 /* IMAGINARY PARTS OF ITS EIGENVECTOR. THE CONJUGATE OF THIS */ 00062 /* VECTOR IS THE EIGENVECTOR FOR THE CONJUGATE EIGENVALUE. */ 00063 00064 /* IERR IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR */ 00065 /* COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR HQR */ 00066 /* AND HQR2. THE NORMAL COMPLETION CODE IS ZERO. */ 00067 00068 /* IV1 AND FV1 ARE TEMPORARY STORAGE ARRAYS. */ 00069 00070 /* QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW, */ 00071 /* MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY 00072 */ 00073 00074 /* THIS VERSION DATED AUGUST 1983. */ 00075 00076 /* ------------------------------------------------------------------ 00077 */ 00078 00079 /* Parameter adjustments */ 00080 --fv1; 00081 --iv1; 00082 z_dim1 = *nm; 00083 z_offset = z_dim1 + 1; 00084 z__ -= z_offset; 00085 --wi; 00086 --wr; 00087 a_dim1 = *nm; 00088 a_offset = a_dim1 + 1; 00089 a -= a_offset; 00090 00091 /* Function Body */ 00092 if (*n <= *nm) { 00093 goto L10; 00094 } 00095 *ierr = *n * 10; 00096 goto L50; 00097 00098 L10: 00099 balanc_(nm, n, &a[a_offset], &is1, &is2, &fv1[1]); 00100 elmhes_(nm, n, &is1, &is2, &a[a_offset], &iv1[1]); 00101 if (*matz != 0) { 00102 goto L20; 00103 } 00104 /* .......... FIND EIGENVALUES ONLY .......... */ 00105 hqr_(nm, n, &is1, &is2, &a[a_offset], &wr[1], &wi[1], ierr); 00106 goto L50; 00107 /* .......... FIND BOTH EIGENVALUES AND EIGENVECTORS .......... */ 00108 L20: 00109 eltran_(nm, n, &is1, &is2, &a[a_offset], &iv1[1], &z__[z_offset]); 00110 hqr2_(nm, n, &is1, &is2, &a[a_offset], &wr[1], &wi[1], &z__[z_offset], 00111 ierr); 00112 if (*ierr != 0) { 00113 goto L50; 00114 } 00115 balbak_(nm, n, &is1, &is2, &fv1[1], n, &z__[z_offset]); 00116 L50: 00117 return 0; 00118 } /* rg_ */ |