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_cortb.c File Reference

#include "f2c.h"

Go to the source code of this file.


Functions

int cortb_ (integer *nm, integer *low, integer *igh, doublereal *ar, doublereal *ai, doublereal *ortr, doublereal *orti, integer *m, doublereal *zr, doublereal *zi)

Function Documentation

int cortb_ integer   nm,
integer   low,
integer   igh,
doublereal   ar,
doublereal   ai,
doublereal   ortr,
doublereal   orti,
integer   m,
doublereal   zr,
doublereal   zi
 

Definition at line 8 of file eis_cortb.c.

References mp.

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, i__3;
00015 
00016     /* Local variables */
00017     static doublereal h__;
00018     static integer i__, j, la;
00019     static doublereal gi, gr;
00020     static integer mm, mp, kp1, mp1;
00021 
00022 
00023 
00024 /*     THIS SUBROUTINE IS A TRANSLATION OF A COMPLEX ANALOGUE OF */
00025 /*     THE ALGOL PROCEDURE ORTBAK, NUM. MATH. 12, 349-368(1968) */
00026 /*     BY MARTIN AND WILKINSON. */
00027 /*     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971). */
00028 
00029 /*     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A COMPLEX GENERAL */
00030 /*     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING */
00031 /*     UPPER HESSENBERG MATRIX DETERMINED BY  CORTH. */
00032 
00033 /*     ON INPUT */
00034 
00035 /*        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL */
00036 /*          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM */
00037 /*          DIMENSION STATEMENT. */
00038 
00039 /*        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING */
00040 /*          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED, */
00041 /*          SET LOW=1 AND IGH EQUAL TO THE ORDER OF THE MATRIX. */
00042 
00043 /*        AR AND AI CONTAIN INFORMATION ABOUT THE UNITARY */
00044 /*          TRANSFORMATIONS USED IN THE REDUCTION BY  CORTH */
00045 /*          IN THEIR STRICT LOWER TRIANGLES. */
00046 
00047 /*        ORTR AND ORTI CONTAIN FURTHER INFORMATION ABOUT THE */
00048 /*          TRANSFORMATIONS USED IN THE REDUCTION BY  CORTH. */
00049 /*          ONLY ELEMENTS LOW THROUGH IGH ARE USED. */
00050 
00051 /*        M IS THE NUMBER OF COLUMNS OF ZR AND ZI TO BE BACK TRANSFORMED. 
00052 */
00053 
00054 /*        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS, */
00055 /*          RESPECTIVELY, OF THE EIGENVECTORS TO BE */
00056 /*          BACK TRANSFORMED IN THEIR FIRST M COLUMNS. */
00057 
00058 /*     ON OUTPUT */
00059 
00060 /*        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS, */
00061 /*          RESPECTIVELY, OF THE TRANSFORMED EIGENVECTORS */
00062 /*          IN THEIR FIRST M COLUMNS. */
00063 
00064 /*        ORTR AND ORTI HAVE BEEN ALTERED. */
00065 
00066 /*     NOTE THAT CORTB PRESERVES VECTOR EUCLIDEAN NORMS. */
00067 
00068 /*     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW, */
00069 /*     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY 
00070 */
00071 
00072 /*     THIS VERSION DATED AUGUST 1983. */
00073 
00074 /*     ------------------------------------------------------------------ 
00075 */
00076 
00077     /* Parameter adjustments */
00078     --orti;
00079     --ortr;
00080     ai_dim1 = *nm;
00081     ai_offset = ai_dim1 + 1;
00082     ai -= ai_offset;
00083     ar_dim1 = *nm;
00084     ar_offset = ar_dim1 + 1;
00085     ar -= ar_offset;
00086     zi_dim1 = *nm;
00087     zi_offset = zi_dim1 + 1;
00088     zi -= zi_offset;
00089     zr_dim1 = *nm;
00090     zr_offset = zr_dim1 + 1;
00091     zr -= zr_offset;
00092 
00093     /* Function Body */
00094     if (*m == 0) {
00095         goto L200;
00096     }
00097     la = *igh - 1;
00098     kp1 = *low + 1;
00099     if (la < kp1) {
00100         goto L200;
00101     }
00102 /*     .......... FOR MP=IGH-1 STEP -1 UNTIL LOW+1 DO -- .......... */
00103     i__1 = la;
00104     for (mm = kp1; mm <= i__1; ++mm) {
00105         mp = *low + *igh - mm;
00106         if (ar[mp + (mp - 1) * ar_dim1] == 0. && ai[mp + (mp - 1) * ai_dim1] 
00107                 == 0.) {
00108             goto L140;
00109         }
00110 /*     .......... H BELOW IS NEGATIVE OF H FORMED IN CORTH .......... 
00111 */
00112         h__ = ar[mp + (mp - 1) * ar_dim1] * ortr[mp] + ai[mp + (mp - 1) * 
00113                 ai_dim1] * orti[mp];
00114         mp1 = mp + 1;
00115 
00116         i__2 = *igh;
00117         for (i__ = mp1; i__ <= i__2; ++i__) {
00118             ortr[i__] = ar[i__ + (mp - 1) * ar_dim1];
00119             orti[i__] = ai[i__ + (mp - 1) * ai_dim1];
00120 /* L100: */
00121         }
00122 
00123         i__2 = *m;
00124         for (j = 1; j <= i__2; ++j) {
00125             gr = 0.;
00126             gi = 0.;
00127 
00128             i__3 = *igh;
00129             for (i__ = mp; i__ <= i__3; ++i__) {
00130                 gr = gr + ortr[i__] * zr[i__ + j * zr_dim1] + orti[i__] * zi[
00131                         i__ + j * zi_dim1];
00132                 gi = gi + ortr[i__] * zi[i__ + j * zi_dim1] - orti[i__] * zr[
00133                         i__ + j * zr_dim1];
00134 /* L110: */
00135             }
00136 
00137             gr /= h__;
00138             gi /= h__;
00139 
00140             i__3 = *igh;
00141             for (i__ = mp; i__ <= i__3; ++i__) {
00142                 zr[i__ + j * zr_dim1] = zr[i__ + j * zr_dim1] + gr * ortr[i__]
00143                          - gi * orti[i__];
00144                 zi[i__ + j * zi_dim1] = zi[i__ + j * zi_dim1] + gr * orti[i__]
00145                          + gi * ortr[i__];
00146 /* L120: */
00147             }
00148 
00149 /* L130: */
00150         }
00151 
00152 L140:
00153         ;
00154     }
00155 
00156 L200:
00157     return 0;
00158 } /* cortb_ */
 

Powered by Plone

This site conforms to the following standards: