diff options
Diffstat (limited to 'test-chill/test-cases/examples/chill/swim.c')
-rw-r--r-- | test-chill/test-cases/examples/chill/swim.c | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/test-chill/test-cases/examples/chill/swim.c b/test-chill/test-cases/examples/chill/swim.c new file mode 100644 index 0000000..a21ef24 --- /dev/null +++ b/test-chill/test-cases/examples/chill/swim.c @@ -0,0 +1,159 @@ +#define M 100 +#define N 100 +#define N3 10 + +int main() { + + int DX; + int DY; + int FSDX; + int FSDY; + int TDT; + int TDTS8; + int TDTSDX; + int TDTSDY; + int t, i, j; + double CU[M + 1][N + 1]; + double CV[M + 1][N + 1]; + double Z[M + 1][N + 1]; + double H[M + 1][N + 1]; + double P[M + 1][N + 1]; + double U[M + 1][N + 1]; + double V[M + 1][N + 1]; + double UNEW[M + 1][N + 1]; + double UOLD[M + 1][N + 1]; + double PNEW[M + 1][N + 1]; + double POLD[M + 1][N + 1]; + double VNEW[M + 1][N + 1]; + double VOLD[M + 1][N + 1]; + double ALPHA; + + for (t = 0; t < N3; t++) { + + FSDX = 4 / DX; + FSDY = 4 / DY; + + for (i = 0; i < M; i++) { + for (j = 0; j < N; j++) { + CU[i + 1][j] = (double) 0.5 * (P[i + 1][j] + P[i][j]) + * U[i + 1][j]; + CV[i][j + 1] = (double) 0.5 * (P[i][j + 1] + P[i][j]) + * V[i][j + 1]; + Z[i + 1][j + 1] = + (FSDX * (V[i + 1][j + 1] - V[i][j + 1]) + - FSDY * (U[i + 1][j + 1] - U[i + 1][j])) + / (P[i][j] + P[i + 1][j] + P[i + 1][j + 1] + + P[i][j + 1]); + H[i][j] = P[i][j] + + (double) 0.25 + * (U[i + 1][j] * U[i + 1][j] + U[i][j] * U[i][j] + + V[i][j + 1] * V[i][j + 1] + + V[i][j] * V[i][j]); + } + } + + for (j = 0; j < N; j++) { + // CU[0][j] = CU[M+1][j]; + CU[0][j] = CU[M][j]; + CV[M][j + 1] = CV[0][j + 1]; + Z[0][j + 1] = Z[M][j + 1]; + H[M][j] = H[0][j]; + } + + for (i = 0; i < M; i++) { + CU[i + 1][N] = CU[i + 1][0]; + CV[i][0] = CV[i][N]; + Z[i + 1][0] = Z[i + 1][N]; + H[i][N] = H[i][0]; + } + + CU[0][N] = CU[M][0]; + CV[M][0] = CV[0][N]; + Z[0][0] = Z[M][N]; + H[M][N] = H[0][0]; + + TDTS8 = TDT / 8; + TDTSDX = TDT / DX; + TDTSDY = TDT / DY; + + for (i = 0; i < M; i++) { + for (j = 0; j < N; j++) { + UNEW[i + 1][j] = UOLD[i + 1][j] + + TDTS8 * (Z[i + 1][j + 1] + Z[i + 1][j]) + * (CV[i + 1][j + 1] + CV[i][j + 1] + CV[i][j] + + CV[i + 1][j]) + - TDTSDX * (H[i + 1][j] - H[i][j]); + VNEW[i][j + 1] = VOLD[i][j + 1] + - TDTS8 * (Z[i + 1][j + 1] + Z[i][j + 1]) + * (CU[i + 1][j + 1] + CU[i][j + 1] + CU[i][j] + + CU[i + 1][j]) + - TDTSDY * (H[i][j + 1] - H[i][j]); + PNEW[i][j] = POLD[i][j] - TDTSDX * (CU[i + 1][j] - CU[i][j]) + - TDTSDY * (CV[i][j + 1] - CV[i][j]); + } + } + for (j = 0; j < N; j++) { + UNEW[0][j] = UNEW[M][j]; + VNEW[M][j + 1] = VNEW[0][j + 1]; + PNEW[M][j] = PNEW[0][j]; + } + + for (i = 0; i < M; i++) { + UNEW[i + 1][N] = UNEW[i + 1][0]; + VNEW[i][0] = VNEW[i][N]; + PNEW[i][N] = PNEW[i][0]; + } + + UNEW[0][N] = UNEW[M][0]; + VNEW[M][0] = VNEW[0][N]; + PNEW[M][N] = PNEW[0][0]; + // time = time + DT; + + for (i = 0; i < M; i++) { + for (j = 0; j < N; j++) { + UOLD[i][j] = U[i][j] + + ALPHA + * (UNEW[i][j] - (double) 2 * U[i][j] + + UOLD[i][j]); + VOLD[i][j] = V[i][j] + + ALPHA + * (VNEW[i][j] - (double) 2 * V[i][j] + + VOLD[i][j]); + POLD[i][j] = P[i][j] + + ALPHA + * (PNEW[i][j] - (double) 2 * P[i][j] + + POLD[i][j]); + U[i][j] = UNEW[i][j]; + V[i][j] = VNEW[i][j]; + P[i][j] = PNEW[i][j]; + } + } + + for (j = 0; j < N; j++) { + UOLD[M][j] = UOLD[0][j]; + VOLD[M][j] = VOLD[0][j]; + POLD[M][j] = POLD[0][j]; + U[M][j] = U[0][j]; + V[M][j] = V[0][j]; + P[M][j] = P[0][j]; + } + + for (i = 0; i < M; i++) { + UOLD[i][N] = UOLD[i][0]; + VOLD[i][N] = VOLD[i][0]; + POLD[i][N] = POLD[i][0]; + U[i][N] = U[i][0]; + V[i][N] = V[i][0]; + P[i][N] = P[i][0]; + } + + UOLD[M][N] = UOLD[0][0]; + VOLD[M][N] = VOLD[0][0]; + POLD[M][N] = POLD[0][0]; + U[M][N] = U[0][0]; + V[M][N] = V[0][0]; + P[M][N] = P[0][0]; + + } + return 0; +} |