00001
00002
00003
00004 static int c__1 = 1;
00005
00006 int dmmul1(double *a, int *na, double *b, int *nb, double *c__,
00007 int *nc, int *l, int *m, int *n)
00008 {
00009
00010 int i__1, i__2;
00011
00012
00013 double ddot();
00014 static int i__, j, ib, ic;
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 --c__;
00038 --b;
00039 --a;
00040
00041
00042 ib = 1;
00043 ic = 0;
00044 i__1 = *n;
00045 for (j = 1; j <= i__1; ++j) {
00046 i__2 = *l;
00047 for (i__ = 1; i__ <= i__2; ++i__) {
00048
00049 c__[ic + i__] += ddot(m, &a[i__], na, &b[ib], &c__1);
00050 }
00051 ic += *nc;
00052 ib += *nb;
00053
00054 }
00055 return 0;
00056 }
00057
00058 double ddot(int *n, double *dx, int *incx, double *dy, int *incy)
00059 {
00060
00061 int i__1;
00062 double ret_val;
00063
00064
00065 static int i__, m;
00066 static double dtemp;
00067 static int ix, iy, mp1;
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077 --dy;
00078 --dx;
00079
00080
00081 ret_val = 0.;
00082 dtemp = 0.;
00083 if (*n <= 0) {
00084 return ret_val;
00085 }
00086 if (*incx == 1 && *incy == 1) {
00087 goto L20;
00088 }
00089
00090
00091
00092
00093 ix = 1;
00094 iy = 1;
00095 if (*incx < 0) {
00096 ix = (-(*n) + 1) * *incx + 1;
00097 }
00098 if (*incy < 0) {
00099 iy = (-(*n) + 1) * *incy + 1;
00100 }
00101 i__1 = *n;
00102 for (i__ = 1; i__ <= i__1; ++i__) {
00103 dtemp += dx[ix] * dy[iy];
00104 ix += *incx;
00105 iy += *incy;
00106
00107 }
00108 ret_val = dtemp;
00109 return ret_val;
00110
00111
00112
00113
00114
00115
00116 L20:
00117 m = *n % 5;
00118 if (m == 0) {
00119 goto L40;
00120 }
00121 i__1 = m;
00122 for (i__ = 1; i__ <= i__1; ++i__) {
00123 dtemp += dx[i__] * dy[i__];
00124
00125 }
00126 if (*n < 5) {
00127 goto L60;
00128 }
00129 L40:
00130 mp1 = m + 1;
00131 i__1 = *n;
00132 for (i__ = mp1; i__ <= i__1; i__ += 5) {
00133 dtemp = dtemp + dx[i__] * dy[i__] + dx[i__ + 1] * dy[i__ + 1] + dx[
00134 i__ + 2] * dy[i__ + 2] + dx[i__ + 3] * dy[i__ + 3] + dx[i__ +
00135 4] * dy[i__ + 4];
00136
00137 }
00138 L60:
00139 ret_val = dtemp;
00140 return ret_val;
00141 }
00142