home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
misc
/
volume21
/
cloops
/
part02
/
kernel.c
< prev
Wrap
C/C++ Source or Header
|
1991-07-25
|
12KB
|
498 lines
/*
* This file is part of the Livermore Loops transliteration into C.
* Copyright (C) 1991 by Martin Fouts
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 1, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "types.h"
#include "externs.h"
#define isign(i,j) ((j < 0) ? -i : i)
#define mod2n(i,j) (i % j) + (j / 2) - isign((j/2),i)
#define amax1(a,b) ((a < b) ? b : a)
#define amin1(a,b) ((a > b) ? b : a)
#define TEST(x) if ((DoTest & (1<<(x-1))) == (1<<(x-1)))
extern long int DoTest;
Void test();
double sqrt();
double exp();
Void kernel()
{
Int i, l, k, il, ipntp, ipnt, lw, j, nl1, nl2, kx, ky, ip, i1, j1;
Int i2, j2, nr, nz;
Int ii, lb, j4, ink;
Int kn, jn, kb5i;
Float xtemp;
test((Int)0);
TEST(1) {
for (l = 0; l < lp; l++)
for (k = 0; k < n; k++)
x[k]= q + y[k]*(r*z[k+10] + t*z[k+11]);
}
test((Int)1);
TEST(2) {
for (l = 0; l < lp; l++) {
il= n;
ipntp= 0;
l_222: ipnt= ipntp;
ipntp= ipntp+il;
il= il/2;
i= ipntp;
for (k = ipnt+1; k < ipntp; k += 2) {
i= i+1;
x[i]= x[k] - v[k]*x[k-1] - v[k+1]*x[k+1];
}
if( il>1) goto l_222;
}
}
test((Int)2);
TEST(3) {
for (l = 0; l < lp; l++) {
q = 0.0;
for (k = 0; k < n; k++) {
q += z[k]*x[k];
}
}
}
test((Int)3);
TEST(4) {
m= (1001-7)/2;
for (l = 0; l < lp; l++) {
for (k = 6; k < 1001; k += m) {
lw= k-6;
for (j = 4; j < n; j += 5) {
x[k-1]= x[k-1] - x[lw]*y[j];
lw= lw+1;
}
x[k-1]= y[4]*x[k-1];
}
}
}
test((Int)4);
TEST(5) {
for (l = 0; l < lp; l++)
for (i = 1; i < n; i++)
x[i]= z[i]*(y[i] - x[i-1]);
}
test((Int)5);
TEST(6) {
for (l = 0; l < lp; l++)
for (i = 1; i < n; i++)
for (k = 0; k < i; k++)
w[i] += b[i][k] * w[i-k-1];
}
test((Int)6);
TEST(7) {
for (l = 0; l < lp; l++)
for (k = 0; k < n; k++)
x[k]= u[k ] + r*( z[k ] + r*y[k ]) +
t*( u[k+3] + r*( u[k+2] + r*u[k+1]) +
t*( u[k+6] + r*( u[k+5] + r*u[k+4])));
}
test((Int)7);
TEST(8) {
for (l = 0; l < lp; l++) {
nl1 = 0;
nl2 = 1;
for (kx = 1; kx < 3; kx++) {
for (ky = 1; ky < n; ky++) {
du1[ky]= u1[kx][ky+1][nl1] - u1[kx][ky-1][nl1];
du2[ky]= u2[kx][ky+1][nl1] - u2[kx][ky-1][nl1];
du3[ky]= u3[kx][ky+1][nl1] - u3[kx][ky-1][nl1];
u1[kx][ky][nl2]= u1[kx][ky][nl1]+a11*du1[ky]+a12*du2[ky]+a13*du3[ky]+
sig*(u1[kx+1][ky][nl1]-2.*u1[kx][ky][nl1]+u1[kx-1][ky][nl1]);
u2[kx][ky][nl2]= u2[kx][ky][nl1]+a21*du1[ky]+a22*du2[ky]+a23*du3[ky]+
sig*(u2[kx+1][ky][nl1]-2.*u2[kx][ky][nl1]+u2[kx-1][ky][nl1]);
u3[kx][ky][nl2]= u3[kx][ky][nl1]+a31*du1[ky]+a32*du2[ky]+a33*du3[ky]+
sig*(u3[kx+1][ky][nl1]-2.*u3[kx][ky][nl1]+u3[kx-1][ky][nl1]);
}
}
}
}
test((Int)8);
TEST(9) {
for (l = 0; l < lp; l++)
for (i = 0; i < n; i++)
px[ 0][i]= dm28*px[12][i] + dm27*px[11][i] + dm26*px[10][i] +
dm25*px[9][i] + dm24*px[8][i] + dm23*px[7][i] +
dm22*px[6][i] + c0*(px[4][i] + px[5][i])+ px[ 2][i];
}
test((Int)9);
TEST(10) {
for (l = 0; l < lp; l++) {
for (i = 0; i < n; i++) {
ar = cx[4][i];
br = ar - px[4][i];
px[4][i] = ar;
cr = br - px[5][i];
px[5][i] = br;
ar = cr - px[6][i];
px[6][i] = cr;
br = ar - px[7][i];
px[7][i] = ar;
cr = br - px[8][i];
px[8][i] = br;
ar = cr - px[9][i];
px[9][i]= cr;
br = ar - px[10][i];
px[10][i]= ar;
cr = br - px[11][i];
px[11][i]= br;
px[13][i]= cr - px[12][i];
px[12][i]= cr;
}
}
}
test((Int)10);
TEST(11) {
for (l = 0; l < lp; l++) {
x[0]= y[0];
for (k = 1; k < n; k++) {
x[k]= x[k-1] + y[k];
}
}
}
test((Int)11);
TEST(12) {
for (l = 0; l < lp; l++) {
for (k = 0; k < n; k++) {
x[k]= y[k+1] - y[k];
}
}
}
test((Int)12);
TEST(13) {
for (l = 0; l < lp; l++) {
for (ip = 0; ip < n; ip++) {
i1= p[0][ip];
j1= p[1][ip];
i1= mod2n(i1,64);
j1= mod2n(j1,64);
p[2][ip]= p[2][ip] + b[i1][j1];
p[3][ip]= p[3][ip] + c[i1][j1];
p[0][ip]= p[0][ip] + p[2][ip];
p[1][ip]= p[1][ip] + p[3][ip];
i2= p[0][ip];
j2= p[1][ip];
i2= mod2n(i2,64) - 1;
j2= mod2n(j2,64) - 1;
p[0][ip]= p[0][ip] + y[i2+32];
p[1][ip]= p[1][ip] + z[j2+32];
i2= i2 + e[i2+32];
j2= j2 + f[j2+32];
h[i2][j2]= h[i2][j2] + 1.0;
}
}
}
test((Int)13);
TEST(14) {
for (l = 0; l < lp; l++) {
for (k = 0; k < n; k++) {
ix[k]= (Int) grd[k];
xi[k]= (Float) ix[k];
ex1[k]= ex [ ix[k]-1 ];
dex1[k]= dex [ ix[k]-1 ];
}
for (k = 0; k < n; k++) {
vx[k]= vx[k] + ex1[k] + (xx[k] - xi[k])*dex1[k];
xx[k]= xx[k] + vx[k] + flx;
ir[k]= xx[k];
rx[k]= xx[k] - ir[k];
ir[k]= mod2n( ir[k],512) + 1;
xx[k]= rx[k] + ir[k];
}
for (k = 0; k < n; k++) {
rh[ir[k]-1]= rh[ir[k]-1] + 1.0 - rx[k];
rh[ir[k]]= rh[ir[k]] + rx[k];
}
}
}
test((Int)14);
TEST(15) {
for (l = 0; l < lp; l++) {
nr= 7;
nz= n;
ar= 0.053;
br= 0.073;
for (j = 1; j < nr; j++) {
for (k = 1; k < nz; k++) {
if (j >= (nr-1)) {
vy[k][j] = 0.0;
continue;
}
if (vh[k][j+1] > vh[k][j]) {
t = ar;
} else {
t = br;
}
if (vf[k][j] < vf[k-1][j]) {
r= amax1(vh[k-1][j], vh[k-1][j+1]);
s= vf[k-1][j];
} else {
r= amax1( vh[k][j], vh[k][j+1]);
s= vf[k][j];
}
vy[k][j]= sqrt((double) (vg[k][j]*vg[k][j] +r*r))*t/s;
if (k >= (nz-1)) {
vs[k][j] = 0.;
continue;
}
if (vf[k][j] < vf[k][j-1]) {
r= amax1( vg[k][j-1], vg[k+1][j-1]);
s= vf[k][j-1];
t= br;
} else {
r= amax1( vg[k][j], vg[k+1][j]);
s= vf[k][j];
t= ar;
}
vs[k][j]= sqrt((double) (vh[k][j]*vh[k][j] +r*r))*t/s;
}
}
}
}
test((Int)15);
TEST(16) {
ii= n/3;
lb= ii+ii;
k2= 0;
k3= 0;
for (l = 0; l < lp; l++) {
m= 0;
i1= m;
l_410:
j2= ((n+n)*m) + 1;
for (k = 0; k < n; k++) {
k2= k2+1;
j4= j2+k+k+1;
j5= zone[j4];
if (j5-n+1 < 0) goto l_420;
if (j5-n+1 == 0) goto l_475;
goto l_450;
l_415:
if (j5-n+ii+1 < 0) goto l_430;
if (j5-n+ii+1 == 0) goto l_425;
goto l_425;
l_420:
if (j5-n+lb+1 < 0) goto l_435;
if (j5-n+lb+1 == 0) goto l_415;
goto l_415;
l_425:
if (plan[j5] - r < 0) goto l_445;
if (plan[j5] - r == 0) goto l_480;
goto l_440;
l_430:
if (plan[j5] - s < 0) goto l_445;
if (plan[j5] - s == 0) goto l_480;
goto l_440;
l_435:
if (plan[j5] - t < 0) goto l_445;
if (plan[j5] - t == 0) goto l_480;
goto l_440;
l_440:
if (zone[j4-1]+1 < 0) goto l_455;
if (zone[j4-1]+1 == 0) goto l_485;
goto l_470;
l_445:
if (zone[j4-1]+1 < 0) goto l_470;
if (zone[j4-1]+1 == 0) goto l_485;
goto l_455;
l_450:
k3= k3+1;
xtemp = d[j5] - (d[j5-1]*((t-d[j5-2])*(t-d[j5-2])
+(s-d[j5-3])*(s-d[j5-3])
+(r-d[j5-4])*(r-d[j5-4])));
if (xtemp < 0) goto l_445;
if (xtemp == 0) goto l_480;
goto l_440;
l_455:
m= m+1;
if (m < zone[0]) goto l_465;
if (m == zone[0]) goto l_465;
goto l_460;
l_460:
m= 0;
l_465:
if (i1 - m < 0) goto l_410;
if (i1 - m == 0) goto l_480;
goto l_410;
l_470: ;
}
l_475:
l_480:
l_485: ;
}
}
test((Int)16);
TEST(17) {
for (l = 0; l < lp; l++) {
i= n-1;
j= 0;
ink= -1;
scale= 5./3.;
xnm= 1./3.;
e6= 1.03/3.07;
goto l_61;
l_60:
e6= xnm*vsp[i]+vstp[i];
vxne[i]= e6;
xnm= e6;
ve3[i]= e6;
i= i+ink;
if (i == j) goto l_62;
l_61:
e3= xnm*vlr[i] +vlin[i];
xnei= vxne[i];
vxnd[i]= e6;
xnc= scale*e3;
if ( xnm >xnc) goto l_60;
if ( xnei>xnc) goto l_60;
ve3[i]= e3;
e6= e3+e3-xnm;
vxne[i]= e3+e3-xnei;
xnm= e6;
i= i+ink;
if ( i != j) goto l_61;
l_62:
;
}
}
test((Int)17);
TEST(18) {
for (l = 0; l < lp; l++) {
t= 0.0037;
s= 0.0041;
kn= 6;
jn= n;
for (k = 1; k < kn; k++) {
for (j = 1; j < jn; j++) {
za[j][k]= (zp[j-1][k+1]+zq[j-1][k+1]-zp[j-1][k]-zq[j-1][k])
*(zr[j][k]+zr[j-1][k])/(zm[j-1][k]+zm[j-1][k+1]);
zb[j][k]= (zp[j-1][k]+zq[j-1][k]-zp[j][k]-zq[j][k])
*(zr[j][k]+zr[j][k-1])/(zm[j][k]+zm[j-1][k]);
}
}
for (k = 1; k < kn; k++) {
for (j = 1; j < jn; j++) {
#ifdef CRAY2
temp1 = za[j][k] *(zz[j][k]-zz[j+1][k]);
temp2 = -za[j-1][k] *(zz[j][k]-zz[j-1][k]);
temp3 = -zb[j][k] *(zz[j][k]-zz[j][k-1]);
temp4 = zb[j][k+1] *(zz[j][k]-zz[j][k+1]);
zu[j][k] += s*(temp1+temp2+temp3+temp4);
temp1 =za[j][k]*(zr[j][k]-zr[j+1][k]);
temp2 = -za[j-1][k] *(zr[j][k]-zr[j-1][k]);
temp3 = -zb[j][k] *(zr[j][k]-zr[j][k-1]);
temp4 = zb[j][k+1] *(zr[j][k]-zr[j][k+1]);
zv[j][k] += s*(temp1+temp2+temp3+temp4);
#else
zu[j][k]= zu[j][k]+s*(za[j][k]*(zz[j][k]-zz[j+1][k])
-za[j-1][k] *(zz[j][k]-zz[j-1][k])
-zb[j][k] *(zz[j][k]-zz[j][k-1])
+zb[j][k+1] *(zz[j][k]-zz[j][k+1]));
zv[j][k]= zv[j][k]+s*(za[j][k]*(zr[j][k]-zr[j+1][k])
-za[j-1][k] *(zr[j][k]-zr[j-1][k])
-zb[j][k] *(zr[j][k]-zr[j][k-1])
+zb[j][k+1] *(zr[j][k]-zr[j][k+1]));
#endif
}
}
for (k = 1; k < kn; k++) {
for (j = 1; j < jn; j++) {
zr[j][k]= zr[j][k]+t*zu[j][k];
zz[j][k]= zz[j][k]+t*zv[j][k];
}
}
}
}
test((Int)18);
TEST(19) {
kb5i= 0;
for (l = 0; l < lp; l++) {
for (k = 0; k < n; k++) {
b5[k+kb5i]= sa[k] +stb5*sb[k];
stb5= b5[k+kb5i] -stb5;
}
for (i = 0; i < n; i++) {
k= n-i+1;
b5[k+kb5i]= sa[k] +stb5*sb[k];
stb5= b5[k+kb5i] -stb5;
}
}
}
test((Int)19);
TEST(20) {
for (l = 0; l < lp; l++) {
for (k = 0; k < n; k++) {
di= y[k]-g[k]/( xx[k]+dk);
dn= 0.2;
if ( di != 0.0) dn= amax1( 0.1,amin1( z[k]/di, 0.2));
x[k]= ((w[k]+v[k]*dn)* xx[k]+u[k])/(vx[k]+v[k]*dn);
xx[k+1]= (x[k]- xx[k])*dn+ xx[k];
}
}
}
test((Int)20);
TEST(21) {
for (l = 0; l < lp; l++)
for (i = 0; i < n; i++)
for (k = 0; k < n; k++)
for (j = 0; j < n; j++)
px[i][j]= px[i][j] +vy[i][k] * cx[k][j];
}
test((Int)21);
TEST(22) {
expmax= 20.0;
u[n-1]= 0.99*expmax*v[n-1];
for (l = 0; l < lp; l++) {
for (k = 0; k < n; k++) {
y[k]= u[k]/v[k];
w[k]= x[k]/( exp((double) y[k]) -1.0);
}
}
}
test((Int)22);
TEST(23) {
for (l = 0; l < lp; l++) {
for (j = 1; j < 6; j++) {
for (k = 1; k < n; k++) {
qa= za[k][j+1]*zr[k][j] +za[k][j-1]*zb[k][j] +
za[k+1][j]*zu[k][j] +za[k-1][j]*zv[k][j] +zz[k][j];
za[k][j]= za[k][j] +.175*(qa -za[k][j]);
}
}
}
}
test((Int)23);
TEST(24) {
x[ n/2]= -1.0e+10;
for (l = 0; l < lp; l++) {
m= 1;
for (k = 1; k < n; k++) {
if ( x[k] < x[m]) m= k;
}
}
}
test((Int)24);
return;
}