-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain_pml.cpp
80 lines (71 loc) · 1.68 KB
/
main_pml.cpp
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <cstdio>
#include <cmath>
#ifdef USE_CUDA
#include "cuda/cuda_pml_wave_2d.h"
#else
#include "cpu/cpu_pml_wave_2d.h"
#endif
Number_t gaussian(Number_t x, Number_t y, void * ctx){
Number_t stddev = 0.01;
Number_t mean = 0.2;
Number_t var2 = stddev*stddev*2;
Number_t term = sqrt((x-mean)*(x-mean) + (y-mean)*(y-mean));
// Number_t term = x-mean;
return stddev*exp(-term*term/var2)/sqrt(acos(-1)*var2);
}
void writeToFile(FILE * fp, Number_t * u, int nx, int ny){
for(int i = 0; i < ny; i++){
for(int j =0; j < nx; j++){
fprintf(fp, "%.5f ", u[3*(j + i*nx)]);
}
fprintf(fp, "\n");
}
}
int main(int argc, char** argv){
#ifdef USE_CUDA
Cuda_PML_Wave_2d_t wave;
#else
Cpu_PML_Wave_2d_t wave;
#endif
int nx = 256;
char filename[1024];
int ny = nx;
printf("%.3lf/n", 3*sizeof(Number_t)*(nx)*(nx)/(1024.0*1024.0*1024.0));
int nsteps = 200;
Number_t c = 0.34029;
Number_t * u = NULL;
wave = wave_sim_init(0, 0, 1, 1,
c, 0.6/(nx*c),
nx, ny,
gaussian,
NULL,
// 0.1,
// 0.0
0.1,
100.0
);
for(int step = 0; step < nsteps; step++){
u = wave_sim_get_u(wave);
printf("Frame %d\n", step);
sprintf(filename, "frames/frame%d", step);
FILE *fp = fopen(filename, "w+");
writeToFile(fp, u, nx, ny);
fclose(fp);
wave_sim_step(wave);
}
// u = wave_sim_get_u(wave, 0);
// for(int i = 0; i < ny+2; i++){
// for(int j = 0; j < nx+2; j++){
// printf("%.4f\t\t", u[j + i*(nx+2)]);
// }
// printf("\n");
// }
// wave_sim_step(wave);
// u = wave_sim_get_u(wave, 0);
// for(int i = 0; i < ny+2; i++){
// for(int j = 0; j < nx+2; j++){
// printf("%.3f\t\t", u[j + i*(nx+2)]);
// }
// printf("\n");
// }
}