29 uint i_block, uint j_block, uint j_cell,
35 for (uint
k=0;
k<
WID* (blocks_per_dim + 2); ++
k){
43 const Real intersection_min_base =
59 for (
unsigned int k_block = 0; k_block<blocks_per_dim;k_block++){
60 for (uint k_cell=0; k_cell<
WID; ++k_cell){
78 Vec v_l =
v_min + (k_block *
WID + k_cell) *
dv;
96 const Vec v_int_norm_l = (v_int_l - v_l)/
dv;
98 const Vec v_int_norm_r = (v_int_r - v_l)/
dv;
101 const Vec v_int_norm_l = (v_int_l - v_l)/
dv;
103 const Vec v_int_norm_r = (v_int_r - v_l)/
dv;
107#ifdef ACC_SEMILAG_PLM
108 Vec target_density_l =
109 v_int_norm_l * a[0] +
110 v_int_norm_l * v_int_norm_l * a[1];
111 Vec target_density_r =
112 v_int_norm_r * a[0] +
113 v_int_norm_r * v_int_norm_r * a[1];
115#ifdef ACC_SEMILAG_PPM
116 Vec target_density_l =
117 v_int_norm_l * a[0] +
118 v_int_norm_l * v_int_norm_l * a[1] +
119 v_int_norm_l * v_int_norm_l * v_int_norm_l * a[2];
120 Vec target_density_r =
121 v_int_norm_r * a[0] +
122 v_int_norm_r * v_int_norm_r * a[1] +
123 v_int_norm_r * v_int_norm_r * v_int_norm_r * a[2];
125#ifdef ACC_SEMILAG_PQM
126 Vec target_density_l =
127 v_int_norm_l * a[0] +
128 v_int_norm_l * v_int_norm_l * a[1] +
129 v_int_norm_l * v_int_norm_l * v_int_norm_l * a[2] +
130 v_int_norm_l * v_int_norm_l * v_int_norm_l * v_int_norm_l * a[3] +
131 v_int_norm_l * v_int_norm_l * v_int_norm_l * v_int_norm_l * v_int_norm_l * a[4];
133 Vec target_density_r =
134 v_int_norm_r * a[0] +
135 v_int_norm_r * v_int_norm_r * a[1] +
136 v_int_norm_r * v_int_norm_r * v_int_norm_r * a[2] +
137 v_int_norm_r * v_int_norm_r * v_int_norm_r * v_int_norm_r * a[3] +
138 v_int_norm_r * v_int_norm_r * v_int_norm_r * v_int_norm_r * v_int_norm_r * a[4];
144 const Vec target_density = target_density_r - target_density_l;
147 for(uint elem = 0; elem < 4;elem ++ ){
148 int k_in_target = gk[elem];
149 if (k_in_target >=0 &&
150 k_in_target < blocks_per_dim *
WID) {
151 const Real new_density = target[k_in_target +
WID][elem] + target_density[elem];
152 target[k_in_target +
WID].insert(elem, new_density);
162 for (
unsigned int k_block = 0; k_block<blocks_per_dim;k_block++){
163 for (uint
k=0;
k<
WID; ++
k){
164 values[k_block *
WID +
k +
WID] = target[k_block *
WID +
k +
WID];
165 target[k_block *
WID +
k +
WID] = 0.0;
171 uint i_block, uint j_block, uint j_cell,
174 sprintf(name,
"reconstructions_%05d.dat",step);
175 FILE* fp=fopen(name,
"w");
183 const Real intersection_min_base =
189 const Vec intersection_min(intersection_min_base + 0 *
intersection_di,
197 const int subcells = 50;
199 for (
unsigned int k_block = 0; k_block<blocks_per_dim;k_block++){
200 for (uint k_cell=0; k_cell<
WID; ++k_cell){
201#ifdef ACC_SEMILAG_PLM
205#ifdef ACC_SEMILAG_PPM
209#ifdef ACC_SEMILAG_PQM
214 Vec v_l =
v_min + (k_block *
WID + k_cell) *
dv;
215 for (uint k_subcell=0; k_subcell< subcells; ++k_subcell){
216 Vec v_norm = (
Real)(k_subcell + 0.5)/subcells;
217 Vec v = v_l + v_norm *
dv;
219#ifdef ACC_SEMILAG_PLM
224#ifdef ACC_SEMILAG_PPM
227 2.0 * v_norm * a[1] +
228 3.0 * v_norm * v_norm * a[2];
230#ifdef ACC_SEMILAG_PQM
233 2.0 * v_norm * a[1] +
234 3.0 * v_norm * v_norm * a[2] +
235 4.0 * v_norm * v_norm * v_norm * a[3] +
236 5.0 * v_norm * v_norm * v_norm * v_norm * a[4];
238 fprintf(fp,
"%20.12g %20.12g %20.12g\n", v[0], values[k_block *
WID + k_cell +
WID][0], target[0]);
253 const int dv = 20000;
255 const int blocks_per_dim = 100;
256 const int i_block = 0;
257 const int j_block = 0;
258 const int j_cell = 0;
261 Vec values[(blocks_per_dim+2)*
WID];
271 const int iterations = 1000;
274 for (uint
k=0;
k<
WID* (blocks_per_dim + 2); ++
k){
290 for(
int i=0;
i < blocks_per_dim *
WID;
i++){
299 i_block, j_block, j_cell,
304 for(
int step = 0; step <= iterations; step++){
306 i_block, j_block, j_cell,
310 i_block, j_block, j_cell,
314 printf(
"\nTime per iteration: %12.15g\n", ((
double)(clock() - t)/CLOCKS_PER_SEC)/iterations);
void propagate(Vec values[], uint blocks_per_dim, Real v_min, Real dv, uint i_block, uint j_block, uint j_cell, Real intersection, Real intersection_di, Real intersection_dj, Real intersection_dk)
void print_reconstruction(int step, Vec values[], uint blocks_per_dim, Real v_min, Real dv, uint i_block, uint j_block, uint j_cell, Real intersection, Real intersection_di, Real intersection_dj, Real intersection_dk)