00001 
00002 
00003 
00004 
00005 
00006 #include "f2c.h"
00007 
00008  int rsm_(integer *nm, integer *n, doublereal *a, doublereal *
00009         w, integer *m, doublereal *z__, doublereal *fwork, integer *iwork, 
00010         integer *ierr)
00011 {
00012     
00013     integer a_dim1, a_offset, z_dim1, z_offset;
00014 
00015     
00016     extern  int tred1_(integer *, integer *, doublereal *, 
00017             doublereal *, doublereal *, doublereal *);
00018     static integer k1, k2, k3, k4, k5, k6, k7, k8;
00019     extern  int trbak1_(integer *, integer *, doublereal *, 
00020             doublereal *, integer *, doublereal *), tqlrat_(integer *, 
00021             doublereal *, doublereal *, integer *), imtqlv_(integer *, 
00022             doublereal *, doublereal *, doublereal *, doublereal *, integer *,
00023              integer *, doublereal *), tinvit_(integer *, integer *, 
00024             doublereal *, doublereal *, doublereal *, integer *, doublereal *,
00025              integer *, doublereal *, integer *, doublereal *, doublereal *, 
00026             doublereal *, doublereal *, doublereal *);
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060 
00061 
00062 
00063 
00064 
00065 
00066 
00067 
00068 
00069 
00070 
00071 
00072 
00073 
00074     
00075     --iwork;
00076     --w;
00077     a_dim1 = *nm;
00078     a_offset = a_dim1 + 1;
00079     a -= a_offset;
00080     z_dim1 = *nm;
00081     z_offset = z_dim1 + 1;
00082     z__ -= z_offset;
00083     --fwork;
00084 
00085     
00086     *ierr = *n * 10;
00087     if (*n > *nm || *m > *nm) {
00088         goto L50;
00089     }
00090     k1 = 1;
00091     k2 = k1 + *n;
00092     k3 = k2 + *n;
00093     k4 = k3 + *n;
00094     k5 = k4 + *n;
00095     k6 = k5 + *n;
00096     k7 = k6 + *n;
00097     k8 = k7 + *n;
00098     if (*m > 0) {
00099         goto L10;
00100     }
00101 
00102     tred1_(nm, n, &a[a_offset], &w[1], &fwork[k1], &fwork[k2]);
00103     tqlrat_(n, &w[1], &fwork[k2], ierr);
00104     goto L50;
00105 
00106 L10:
00107     tred1_(nm, n, &a[a_offset], &fwork[k1], &fwork[k2], &fwork[k3]);
00108     imtqlv_(n, &fwork[k1], &fwork[k2], &fwork[k3], &w[1], &iwork[1], ierr, &
00109             fwork[k4]);
00110     tinvit_(nm, n, &fwork[k1], &fwork[k2], &fwork[k3], m, &w[1], &iwork[1], &
00111             z__[z_offset], ierr, &fwork[k4], &fwork[k5], &fwork[k6], &fwork[
00112             k7], &fwork[k8]);
00113     trbak1_(nm, n, &a[a_offset], &fwork[k2], m, &z__[z_offset]);
00114 L50:
00115     return 0;
00116 } 
00117