22 int r0,
int z0,
int r1,
int z1);
24 int ntheta,
int r0,
int z0,
int r1,
int z1,
27 int pr,
int pz,
int ntheta,
29 int *extend_r,
int *extend_z);
31 int ntheta,
int r0,
int z0,
int r1,
int z1,
42 int copy,
int interpol,
int coarsen,
int s_buff,
int t_buff)
44 int r0, z0, r1, z1, level_diff;
45 int br0, bz0, br1, bz1;
51 ",\n\t s_buff = %d, t_buff = %d)\n",
56 &r0, &z0, &r1, &z1, &level_diff);
59 debug (3,
" -> no overlap\n");
63 if (level_diff == 0 && copy) {
64 map_same (mappers, source, target, ntheta, r0, z0, r1, z1);
65 }
else if (level_diff < 0 && interpol) {
73 for (m = mappers; *m; m++) {
76 max_shift =
MYMAX(abs((*m)->shift_r) << (-level_diff - 1),
77 abs((*m)->shift_z) << (-level_diff - 1));
79 debug (3,
"max_shift = %d, shift_r = %d, shift_z = %d\n",
80 max_shift, (*m)->shift_r, (*m)->shift_z);
84 MYMAX (t_buff, max_shift),
85 &br0, &bz0, &br1, &bz1, &level_diff,
86 (*m)->shift_r, (*m)->shift_z);
87 if (br0 < r0) r0 = br0;
88 if (bz0 < z0) z0 = bz0;
89 if (br1 > r1) r1 = br1;
90 if (bz1 > z1) z1 = bz1;
92 map_interpol (mappers, source, target, ntheta, r0, z0, r1, z1,
94 }
else if (level_diff > 0 && coarsen) {
95 map_coarsen (mappers, source, target, ntheta, r0, z0, r1, z1, level_diff);
106 int copy,
int interpol,
int coarsen,
int s_buff,
int t_buff)
110 debug (3,
"map_grid_r (...)\n");
112 map_grid (mappers, source, target, ntheta, copy, interpol, coarsen,
116 map_grid_r (mappers, child, target, ntheta, copy, interpol, coarsen,
127 int copy,
int interpol,
int coarsen,
int s_buff,
int t_buff)
131 debug (3,
"map_trees_r (...)\n");
134 map_trees_r (mappers, source, child, ntheta, copy, interpol, coarsen,
138 map_grid_r (mappers, source, target, ntheta, copy, interpol, coarsen,
149 int r0,
int z0,
int r1,
int z1)
156 ",\n\t r0 = %d, z0 = %d, r1 = %d, z1 = %d)\n",
160 for (ir = r0; ir < r1; ir++) {
161 for (iz = z0; iz < z1; iz++) {
162 for (m = mappers; *m; m++) {
163 (*m)->copy (*m, source, target, ir, iz, ntheta);
167 debug (3,
" < map_same (...)\n");
174 #define MAX_MAPPERS 32
179 int r0,
int z0,
int r1,
int z1,
int level_diff)
182 int i, extend_r, extend_z;
188 ",\n\t r0 = %d, z0 = %d, r1 = %d, z1 = %d, level_diff = %d)\n",
190 r0, z0, r1, z1, level_diff);
192 for (m = mappers, i = 0; *m; m++, i++)
194 (*m)->interpol_method);
199 r0 =
MYMAX (r0 >> level_diff, source->r0 - 1);
208 r1 =
MYMIN (((r1 - 1) >> level_diff) + 1, source->r1 + 1);
209 z0 =
MYMAX (z0 >> level_diff, source->z0 - 1);
210 z1 =
MYMIN (((z1 - 1) >> level_diff) + 1, source->z1 + 1);
213 debug (4,
"r0 = %d, z0 = %d, r1 = %d, z1 = %d\n",
218 for (pr = r0, extend_r =
TRUE; pr < r1; pr++) {
221 for (pz = z0, extend_z =
TRUE; pz < z1; pz++) {
222 debug (6,
"pr = %d, pz = %d, extend_r = %d, extend_z = %d\n",
223 pr, pz, extend_r, extend_z);
224 extend_r_in = extend_r;
227 interpols, &extend_r_in, &extend_z);
229 extend_r = extend_r_in;
232 for (m = mappers, i= 0; *m; m++, i++)
235 debug (3,
"< map_interpol (...)\n");
252 int pr,
int pz,
int ntheta,
253 interpol_t **interpols,
int *extend_r,
int *extend_z)
257 int rmin, rmax, zmin, zmax;
262 level_diff = target->level - source->level;
268 for (m = mappers, i = 0; *m; m++, i++) {
269 int fine_shift_r, fine_shift_z;
271 inside = (*m)->interpol_set (*m, source, interpols[i], pr, pz, ntheta);
273 if (!inside)
continue;
275 fine_shift_r = (*m)->shift_r << (level_diff - 1);
276 fine_shift_z = (*m)->shift_z << (level_diff - 1);
278 debug (6,
"shift_r = %d, shift_z = %d\n", (*m)->shift_r, (*m)->shift_z);
280 rmin = (pr << level_diff) + fine_shift_r;
283 if (*extend_r && (*m)->shift_z != 0) {
288 zmin = (pz << level_diff) + fine_shift_z;
289 if (*extend_z && (*m)->shift_r != 0) {
296 rmin =
MYMAX (target->r0 - 2, rmin);
297 rmax =
MYMIN (target->r1 + 2, ((pr + 1) << level_diff) + fine_shift_r);
298 zmin =
MYMAX (target->z0 - 2, zmin);
299 zmax =
MYMIN (target->z1 + 2, ((pz + 1) << level_diff) + fine_shift_z);
302 debug(6,
"\trmin = %d, rmax = %d, zmin = %d, zmax = %d\n",
303 rmin, rmax, zmin, zmax);
305 for (ir = rmin; ir < rmax; ir++) {
306 for (iz = zmin; iz < zmax; iz++) {
307 (*m)->interpol (*m, source, target, interpols[i],
317 int r0,
int z0,
int r1,
int z1,
int level_diff)
320 int rmin, rmax, zmin, zmax;
325 ",\n\t r0 = %d, z0 = %d, r1 = %d, z1 = %d, level_diff = %d)\n",
327 r0, z0, r1, z1, level_diff);
329 rmin =
MYMAX (r0 >> level_diff, target->r0 - 2);
332 rmax =
MYMIN (((r1 - 1) >> level_diff) + 1, target->r1 + 2);
333 zmin =
MYMAX (z0 >> level_diff, target->z0 - 2);
334 zmax =
MYMIN (((z1 - 1) >> level_diff) + 1, target->z1 + 2);
336 for (iz = zmin; iz < zmax; iz++) {
337 for (ir = rmin; ir < rmax; ir++) {
338 for (m = mappers, i = 0; *m; m++, i++) {
339 (*m)->coarsen (*m, source, target, ir, iz, ntheta);
343 debug (3,
"< map_coarsen (...)\n");