24 uint blocks_per_dim_x, uint blocks_per_dim_y, uint blocks_per_dim_z,
27 #pragma omp parallel for
28 for (uint
k=0;
k< (blocks_per_dim_z+2) * blocks_per_dim_x * blocks_per_dim_z *
WID3; ++
k){
32 #pragma omp parallel for collapse(2)
33 for(
int i = 0;
i < blocks_per_dim_x *
WID;
i++){
34 for(
int j = 0;
j < blocks_per_dim_y *
WID;
j++){
35 for (uint
k = 0;
k < blocks_per_dim_z *
WID;
k++){
36 const int i_block =
i /
WID;
37 const int i_cell =
i %
WID;
38 const int j_block =
j /
WID;
39 const int j_cell =
j %
WID;
42 Real a[RECONSTRUCTION_ORDER + 1];
45 a[0] = values[
k +
WID] - d_cv * 0.5;
50 cerr <<
"PPM not done yet"<<endl;
72 const int target_gk_l = (int)((v_l - intersection_min)/
intersection_dk);
73 const int target_gk_r = (int)((v_r - intersection_min)/
intersection_dk);
75 for(
int gk = target_gk_l; gk <= target_gk_r; gk++){
81 const Real v_int_norm_l = (v_int_l - v_l)/
dv;
83 const Real v_int_norm_r = (v_int_r - v_l)/
dv;
87 Real target_density_l =
89 v_int_norm_l * v_int_norm_l * a[1];
90 Real target_density_r =
92 v_int_norm_r * v_int_norm_r * a[1];
95 Real target_density_l =
97 v_int_norm_l * v_int_norm_l * a[1] +
98 v_int_norm_l * v_int_norm_l * v_int_norm_l * a[2];
99 Real target_density_r =
100 v_int_norm_r * a[0] +
101 v_int_norm_r * v_int_norm_r * a[1] +
102 v_int_norm_r * v_int_norm_r * v_int_norm_r * a[2];
105 if ( gk >= 0 && gk <= blocks_per_dim_z *
WID )
108 values_out[
colindex(
i,
j) + gk +
WID] += target_density_r - target_density_l;
118 const int dv = 20000;
120 const int blocks_per_dim_x = 10;
121 const int blocks_per_dim_y = 10;
122 const int blocks_per_dim_z = 50;
125 Real *values_a =
new Real[(blocks_per_dim_z+2) * blocks_per_dim_x * blocks_per_dim_z *
WID3];
126 Real *values_b =
new Real[(blocks_per_dim_z+2) * blocks_per_dim_x * blocks_per_dim_z *
WID3];
134 const int iterations=1000;
137 for (uint
k=0;
k< (blocks_per_dim_z+2) * blocks_per_dim_x * blocks_per_dim_z *
WID3; ++
k){
142 for(
int i=0;
i < blocks_per_dim_x *
WID;
i++){
143 for(
int j=0;
j < blocks_per_dim_y *
WID;
j++){
144 for(
int k=0;
k < blocks_per_dim_z *
WID;
k++){
146 if (v >
v_min + 0.8 * (blocks_per_dim_z *
WID *
dv) &&
147 v <
v_min + 0.9 * (blocks_per_dim_z *
WID *
dv))
154 for(
int step = 0; step < iterations; step+=2){
158 blocks_per_dim_x, blocks_per_dim_y, blocks_per_dim_z,
162 blocks_per_dim_x, blocks_per_dim_y, blocks_per_dim_z,
void propagate(const Real *const values_in, Real *values_out, uint blocks_per_dim_x, uint blocks_per_dim_y, uint blocks_per_dim_z, Real v_min, Real dv, Real intersection, Real intersection_di, Real intersection_dj, Real intersection_dk)