Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

eis_ch.c File Reference

#include "f2c.h"

Go to the source code of this file.


Functions

int ch_ (integer *nm, integer *n, doublereal *ar, doublereal *ai, doublereal *w, integer *matz, doublereal *zr, doublereal *zi, doublereal *fv1, doublereal *fv2, doublereal *fm1, integer *ierr)

Function Documentation

int ch_ integer   nm,
integer   n,
doublereal   ar,
doublereal   ai,
doublereal   w,
integer   matz,
doublereal   zr,
doublereal   zi,
doublereal   fv1,
doublereal   fv2,
doublereal   fm1,
integer   ierr
 

Definition at line 8 of file eis_ch.c.

References htribk_(), htridi_(), tql2_(), and tqlrat_().

00011 {
00012     /* System generated locals */
00013     integer ar_dim1, ar_offset, ai_dim1, ai_offset, zr_dim1, zr_offset, 
00014             zi_dim1, zi_offset, i__1, i__2;
00015 
00016     /* Local variables */
00017     static integer i__, j;
00018     extern /* Subroutine */ int htridi_(integer *, integer *, doublereal *, 
00019             doublereal *, doublereal *, doublereal *, doublereal *, 
00020             doublereal *), htribk_(integer *, integer *, doublereal *, 
00021             doublereal *, doublereal *, integer *, doublereal *, doublereal *)
00022             , tqlrat_(integer *, doublereal *, doublereal *, integer *), 
00023             tql2_(integer *, integer *, doublereal *, doublereal *, 
00024             doublereal *, integer *);
00025 
00026 
00027 
00028 /*     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF */
00029 /*     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK) */
00030 /*     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED) */
00031 /*     OF A COMPLEX HERMITIAN MATRIX. */
00032 
00033 /*     ON INPUT */
00034 
00035 /*        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL */
00036 /*        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM */
00037 /*        DIMENSION STATEMENT. */
00038 
00039 /*        N  IS THE ORDER OF THE MATRIX  A=(AR,AI). */
00040 
00041 /*        AR  AND  AI  CONTAIN THE REAL AND IMAGINARY PARTS, */
00042 /*        RESPECTIVELY, OF THE COMPLEX HERMITIAN MATRIX. */
00043 
00044 /*        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF */
00045 /*        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO */
00046 /*        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS. */
00047 
00048 /*     ON OUTPUT */
00049 
00050 /*        W  CONTAINS THE EIGENVALUES IN ASCENDING ORDER. */
00051 
00052 /*        ZR  AND  ZI  CONTAIN THE REAL AND IMAGINARY PARTS, */
00053 /*        RESPECTIVELY, OF THE EIGENVECTORS IF MATZ IS NOT ZERO. */
00054 
00055 /*        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR */
00056 /*           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR TQLRAT */
00057 /*           AND TQL2.  THE NORMAL COMPLETION CODE IS ZERO. */
00058 
00059 /*        FV1, FV2, AND  FM1  ARE TEMPORARY STORAGE ARRAYS. */
00060 
00061 /*     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW, */
00062 /*     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY 
00063 */
00064 
00065 /*     THIS VERSION DATED AUGUST 1983. */
00066 
00067 /*     ------------------------------------------------------------------ 
00068 */
00069 
00070     /* Parameter adjustments */
00071     fm1 -= 3;
00072     --fv2;
00073     --fv1;
00074     zi_dim1 = *nm;
00075     zi_offset = zi_dim1 + 1;
00076     zi -= zi_offset;
00077     zr_dim1 = *nm;
00078     zr_offset = zr_dim1 + 1;
00079     zr -= zr_offset;
00080     --w;
00081     ai_dim1 = *nm;
00082     ai_offset = ai_dim1 + 1;
00083     ai -= ai_offset;
00084     ar_dim1 = *nm;
00085     ar_offset = ar_dim1 + 1;
00086     ar -= ar_offset;
00087 
00088     /* Function Body */
00089     if (*n <= *nm) {
00090         goto L10;
00091     }
00092     *ierr = *n * 10;
00093     goto L50;
00094 
00095 L10:
00096     htridi_(nm, n, &ar[ar_offset], &ai[ai_offset], &w[1], &fv1[1], &fv2[1], &
00097             fm1[3]);
00098     if (*matz != 0) {
00099         goto L20;
00100     }
00101 /*     .......... FIND EIGENVALUES ONLY .......... */
00102     tqlrat_(n, &w[1], &fv2[1], ierr);
00103     goto L50;
00104 /*     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS .......... */
00105 L20:
00106     i__1 = *n;
00107     for (i__ = 1; i__ <= i__1; ++i__) {
00108 
00109         i__2 = *n;
00110         for (j = 1; j <= i__2; ++j) {
00111             zr[j + i__ * zr_dim1] = 0.;
00112 /* L30: */
00113         }
00114 
00115         zr[i__ + i__ * zr_dim1] = 1.;
00116 /* L40: */
00117     }
00118 
00119     tql2_(nm, n, &w[1], &fv1[1], &zr[zr_offset], ierr);
00120     if (*ierr != 0) {
00121         goto L50;
00122     }
00123     htribk_(nm, n, &ar[ar_offset], &ai[ai_offset], &fm1[3], n, &zr[zr_offset],
00124              &zi[zi_offset]);
00125 L50:
00126     return 0;
00127 } /* ch_ */
 

Powered by Plone

This site conforms to the following standards: