1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| /* It's order-4, 3D 15 point stencil, to match up with Matteo Frigo's
* hand-optimized wave equation
*/
float c0 = coef[0], c1 = coef[1], c2 = coef[2], c3 = coef[3], c4 = coef[4];
float div = c0 * pa(t, i, j, k) +
c1 * ((pa(t, i, j, k+1) + pa(t, i, j, k-1))
+ (pa(t, i, j+1, k) + pa(t, i, j-1, k))
+ (pa(t, i+1, j, k) + pa(t, i-1, j, k)))
+ c2 * ((pa(t, i, j, k+2) + pa(t, i, j, k-2))
+ (pa(t, i, j+2, k) + pa(t, i, j-2, k))
+ (pa(t, i+2, j, k) + pa(t, i-2, j, k)))
+ c3 * ((pa(t, i, j, k+3) + pa(t, i, j, k-3))
+ (pa(t, i, j+3, k) + pa(t, i, j-3, k))
+ (pa(t, i+3, j, k) + pa(t, i-3, j, k)))
+ c4 * ((pa(t, i, j, k+4) + pa(t, i, j, k-4))
+ (pa(t, i, j+4, k) + pa(t, i, j-4, k))
+ (pa(t, i+4, j, k) + pa(t, i-4, j, k)));
pa(t+1, i, j, k) = 2 * pa(t, i, j, k) - pa(t+1, i, j, k) + vsq[i * Nxy + j * Nx + k] * div;
|