PIPS
stencil.c
Go to the documentation of this file.
1 #include "stdio.h"
2 
3 typedef float t_real;
4 
5 // real, dimension(n1,n2,n3) :: u, v
6 // real, dimension(-L:L) :: c
7 
8 // parameter(L=4, n1=100, n2=100, n3=100)
9 
10 void stencil8 (int L, int n1, int n2, int n3, t_real u[n1][n2][n3], t_real v[n1][n2][n3], t_real c[2L+1],
11  int is1, int ie1, int is2, int ie2,
12  int is3, int ie3) {
13  // Stencil length : 2*L
14 
15  int i1,i2,i3;
16  t_real c_4,c_3,c_1, c_2, c0, c1, c2,c3,c4;
17 
18  c_4 = c[L-4]; c_3 = c[L-3]; c_2 = c[L-2]; c_1 = c[L-1];
19  c0 = c[L];
20  c4 = c[L+4]; c3 = c[L+3]; c2 = c[L+2]; c1 = c[L+1];
21 
22  //do i1=is1+L,ie1-L
23  for (i1=is1+L; i1<ie1-L ; i1++) {
24  //do i2=is2+L,ie2-L
25  for (i2=is2+L; i2<ie2-L ; i2++) {
26  // do i3=is3+L,ie3-L
27  for (i3=is3+L; i3<ie3-L ; i3++) {
28  u[i1][i2][i3]=
29  c_4 * (v[i1-4][i2][i3] + v[i1][i2-4][i3] + v[i1][i2][i3-4])
30  + c_3 * (v[i1-3][i2][i3] + v[i1][i2-3][i3] + v[i1][i2][i3-3])
31  + c_2 * (v[i1-2][i2][i3] + v[i1][i2-2][i3] + v[i1][i2][i3-2])
32  + c_1 * (v[i1-1][i2][i3] + v[i1][i2-1][i3] + v[i1][i2][i3-1])
33  + c0 * v[i1][ i2][i3] * 3.f
34  + c1 * (v[i1+1][i2][i3] + v[i1][i2+1][i3] + v[i1][i2][i3+1])
35  + c2 * (v[i1+2][i2][i3] + v[i1][i2+2][i3] + v[i1][i2][i3+2])
36  + c3 * (v[i1+3][i2][i3] + v[i1][i2+3][i3] + v[i1][i2][i3+3])
37  + c4 * (v[i1+4][i2][i3] + v[i1][i2+4][i3] + v[i1][i2][i3+4]);
38  }
39  }
40  }
41 }
42 
43 // initialize the array, with the give value
44 void init ( int n1, int n2, int n3,t_real u[n1][n2][n3], t_real val) {
45  int i = 0, j = 0, k = 0;
46  for (i=0; i<n1 ; i++) {
47  for (j=0; j<n2 ; j++) {
48  for (k=0; k<n3 ; k++) {
49  u[i][j][k] = val;
50  }
51  }
52  }
53  return;
54 }
55 
56 // sum all the elements of the array
57 t_real sum ( int n1, int n2, int n3,t_real u[n1][n2][n3]) {
58  t_real result = 0;
59  int i = 0, j = 0, k = 0;
60  for (i=0; i<n1 ; i++) {
61  for (j=0; j<n2 ; j++) {
62  for (k=0; k<n3 ; k++) {
63  result += u[i][j][k];
64  }
65  }
66  }
67  return result;
68 }
69 
70 int main (int argc, char * argv[]) {
71 
72  int is1,ie1,is2,ie2,is3,ie3,i;
73  int L = 4;
74  int n1 = 100;
75  int n2 = 100;
76  int n3 = 100;
77  if(argc >100000) n1=n2=n3=L=78;
78  {
79  t_real v[n1][n2][n3];
80  t_real u[n1][n2][n3];
81  t_real c[2*L+1];
82  is1=0;ie1=n1;
83  is2=0;ie2=n2;
84  is3=0;ie3=n3;
85 
86  for (i=0; i<2*L+1; i++) {
87  c[i] = 3.0f;
88  }
89 
90  // Simple case
91  init (n1,n2,n3,u , 1.0f);
92  init (n1,n2,n3,v , 1.0f);
93  stencil8(L,n1,n2,n3,u,v,c,is1,ie1,is2,ie2,is3,ie3);
94 
95  printf ("the sum is : %f\n", sum (n1,n2,n3,u));
96  } return 0;
97 }
static int is2(Pproblem XX, Pproblem VV, struct rproblem *RR)
=======================================================================
Definition: isolve.c:2158
int printf()
int main(int argc, char *argv[])
Definition: stencil.c:70
t_real sum(int n1, int n2, int n3, t_real u[n1][n2][n3])
Definition: stencil.c:57
void stencil8(int L, int n1, int n2, int n3, t_real u[n1][n2][n3], t_real v[n1][n2][n3], t_real c[2L+1], int is1, int ie1, int is2, int ie2, int is3, int ie3)
Definition: stencil.c:10
void init(int n1, int n2, int n3, t_real u[n1][n2][n3], t_real val)
Definition: stencil.c:44
float t_real
Definition: stencil.c:3
Definition: pip__tab.h:30