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