1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include <iostream>
#include <cstdlib>
#define XYZ(x, y, z, N) ((x) + (y) * (N) + (z) * (N) * (N))
void compute(float* P, float* Q, int N);
int main(int argc, char** argv)
{
const int N = 100;
const int iter = 100;
float* P = new float[N*N*N];
float* Q = new float[N*N*N];
for(int i = 0; i < N*N*N; ++i)
{
P[i] = 1500;
Q[i] = 1500;
}
for(int i = 0; i < iter; ++i)
{
compute(P, Q, N);
compute(Q, P, N);
}
std::cout << P[XYZ(N/2, N/2, N/2, N)] << std::endl;
delete[] P;
delete[] Q;
return EXIT_SUCCESS;
}
void compute(float* P, float* Q, int N)
{
for(int k = 4; k < N-4; ++k)
{
for(int j = 4; j < N-4; ++j)
{
for(int i = 4; i < N-4; ++i)
{
Q[XYZ(i, j, k, N)] = P[XYZ(i, j, k, N)]
+ (P[XYZ(i+1, j, k, N)] - P[XYZ(i-1, j, k, N)])
+ (P[XYZ(i+2, j, k, N)] - P[XYZ(i-2, j, k, N)])
+ (P[XYZ(i+3, j, k, N)] - P[XYZ(i-3, j, k, N)])
+ (P[XYZ(i+4, j, k, N)] - P[XYZ(i-4, j, k, N)])
+ (P[XYZ(i, j+1, k, N)] - P[XYZ(i, j-1, k, N)])
+ (P[XYZ(i, j+2, k, N)] - P[XYZ(i, j-2, k, N)])
+ (P[XYZ(i, j+3, k, N)] - P[XYZ(i, j-3, k, N)])
+ (P[XYZ(i, j+4, k, N)] - P[XYZ(i, j-4, k, N)])
+ (P[XYZ(i, j, k+1, N)] - P[XYZ(i, j, k-1, N)])
+ (P[XYZ(i, j, k+2, N)] - P[XYZ(i, j, k-2, N)])
+ (P[XYZ(i, j, k+3, N)] - P[XYZ(i, j, k-3, N)])
+ (P[XYZ(i, j, k+4, N)] - P[XYZ(i, j, k-4, N)]);
}
}
}
} |
Partager