Doxygen Source Code Documentation
eis_cg.c File Reference
#include "f2c.h"
Go to the source code of this file.
Functions | |
int | cg_ (integer *nm, integer *n, doublereal *ar, doublereal *ai, doublereal *wr, doublereal *wi, integer *matz, doublereal *zr, doublereal *zi, doublereal *fv1, doublereal *fv2, doublereal *fv3, integer *ierr) |
Function Documentation
|
Definition at line 8 of file eis_cg.c. References cbabk2_(), cbal_(), comqr2_(), comqr_(), and corth_().
00012 { 00013 /* System generated locals */ 00014 integer ar_dim1, ar_offset, ai_dim1, ai_offset, zr_dim1, zr_offset, 00015 zi_dim1, zi_offset; 00016 00017 /* Local variables */ 00018 extern /* Subroutine */ int cbal_(integer *, integer *, doublereal *, 00019 doublereal *, integer *, integer *, doublereal *), corth_(integer 00020 *, integer *, integer *, integer *, doublereal *, doublereal *, 00021 doublereal *, doublereal *), comqr_(integer *, integer *, integer 00022 *, integer *, doublereal *, doublereal *, doublereal *, 00023 doublereal *, integer *), cbabk2_(integer *, integer *, integer *, 00024 integer *, doublereal *, integer *, doublereal *, doublereal *), 00025 comqr2_(integer *, integer *, integer *, integer *, doublereal *, 00026 doublereal *, doublereal *, doublereal *, doublereal *, 00027 doublereal *, doublereal *, doublereal *, integer *); 00028 static integer is1, is2; 00029 00030 00031 00032 /* THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF */ 00033 /* SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK) */ 00034 /* TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED) */ 00035 /* OF A COMPLEX GENERAL MATRIX. */ 00036 00037 /* ON INPUT */ 00038 00039 /* NM MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL */ 00040 /* ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM */ 00041 /* DIMENSION STATEMENT. */ 00042 00043 /* N IS THE ORDER OF THE MATRIX A=(AR,AI). */ 00044 00045 /* AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS, */ 00046 /* RESPECTIVELY, OF THE COMPLEX GENERAL MATRIX. */ 00047 00048 /* MATZ IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF */ 00049 /* ONLY EIGENVALUES ARE DESIRED. OTHERWISE IT IS SET TO */ 00050 /* ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS. */ 00051 00052 /* ON OUTPUT */ 00053 00054 /* WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS, */ 00055 /* RESPECTIVELY, OF THE EIGENVALUES. */ 00056 00057 /* ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS, */ 00058 /* RESPECTIVELY, OF THE EIGENVECTORS IF MATZ IS NOT ZERO. */ 00059 00060 /* IERR IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR */ 00061 /* COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR COMQR */ 00062 /* AND COMQR2. THE NORMAL COMPLETION CODE IS ZERO. */ 00063 00064 /* FV1, FV2, AND FV3 ARE TEMPORARY STORAGE ARRAYS. */ 00065 00066 /* QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW, */ 00067 /* MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY 00068 */ 00069 00070 /* THIS VERSION DATED AUGUST 1983. */ 00071 00072 /* ------------------------------------------------------------------ 00073 */ 00074 00075 /* Parameter adjustments */ 00076 --fv3; 00077 --fv2; 00078 --fv1; 00079 zi_dim1 = *nm; 00080 zi_offset = zi_dim1 + 1; 00081 zi -= zi_offset; 00082 zr_dim1 = *nm; 00083 zr_offset = zr_dim1 + 1; 00084 zr -= zr_offset; 00085 --wi; 00086 --wr; 00087 ai_dim1 = *nm; 00088 ai_offset = ai_dim1 + 1; 00089 ai -= ai_offset; 00090 ar_dim1 = *nm; 00091 ar_offset = ar_dim1 + 1; 00092 ar -= ar_offset; 00093 00094 /* Function Body */ 00095 if (*n <= *nm) { 00096 goto L10; 00097 } 00098 *ierr = *n * 10; 00099 goto L50; 00100 00101 L10: 00102 cbal_(nm, n, &ar[ar_offset], &ai[ai_offset], &is1, &is2, &fv1[1]); 00103 corth_(nm, n, &is1, &is2, &ar[ar_offset], &ai[ai_offset], &fv2[1], &fv3[1] 00104 ); 00105 if (*matz != 0) { 00106 goto L20; 00107 } 00108 /* .......... FIND EIGENVALUES ONLY .......... */ 00109 comqr_(nm, n, &is1, &is2, &ar[ar_offset], &ai[ai_offset], &wr[1], &wi[1], 00110 ierr); 00111 goto L50; 00112 /* .......... FIND BOTH EIGENVALUES AND EIGENVECTORS .......... */ 00113 L20: 00114 comqr2_(nm, n, &is1, &is2, &fv2[1], &fv3[1], &ar[ar_offset], &ai[ 00115 ai_offset], &wr[1], &wi[1], &zr[zr_offset], &zi[zi_offset], ierr); 00116 if (*ierr != 0) { 00117 goto L50; 00118 } 00119 cbabk2_(nm, n, &is1, &is2, &fv1[1], n, &zr[zr_offset], &zi[zi_offset]); 00120 L50: 00121 return 0; 00122 } /* cg_ */ |