46 real* z1z2z3,
int* flag) {
53 real xmin = x1x2x3[0], xmax = x1x2x3[0];
54 real ymin = y1y2y3[0], ymax = y1y2y3[0];
55 real zmin = z1z2z3[0], zmax = z1z2z3[0];
56 for(
int i = 0; i < nelements; i++) {
57 for(
int j = 0; j < 3; j++) {
58 data->
wall_tris[i*9 + j*3 + 0] = x1x2x3[3*i+j];
59 data->
wall_tris[i*9 + j*3 + 1] = y1y2y3[3*i+j];
60 data->
wall_tris[i*9 + j*3 + 2] = z1z2z3[3*i+j];
63 xmin = fmin( xmin, x1x2x3[3*i+j] );
64 xmax = fmax( xmax, x1x2x3[3*i+j] );
65 ymin = fmin( ymin, y1y2y3[3*i+j] );
66 ymax = fmax( ymax, y1y2y3[3*i+j] );
67 zmin = fmin( zmin, z1z2z3[3*i+j] );
68 zmax = fmax( zmax, z1z2z3[3*i+j] );
74 data->
xmin = xmin - 0.1;
75 data->
xmax = xmax + 0.1;
76 data->
ymin = ymin - 0.1;
77 data->
ymax = ymax + 0.1;
78 data->
zmin = zmin - 0.1;
79 data->
zmax = zmax + 0.1;
84 for(
int i = 0; i < data->
depth - 1; i++) {
98 "Number of wall elements %d\n"
99 "Spanning xmin = %2.3f m, xmax = %2.3f m\n"
100 " ymin = %2.3f m, ymax = %2.3f m\n"
101 " zmin = %2.3f m, zmax = %2.3f m\n",
106 data->
flag = (
int*)malloc(nelements *
sizeof(
int));
107 memcpy(data->
flag, flag, data->
n *
sizeof(
int));
324 real rpz1[3], rpz2[3];
336 int ix1 = (int) floor((q1[0] - wdata->
xmin)
338 int iy1 = (int) floor((q1[1] - wdata->
ymin)
340 int iz1 = (int) floor((q1[2] - wdata->
zmin)
343 int ix2 = (int) floor((q2[0] - wdata->
xmin)
345 int iy2 = (int) floor((q2[1] - wdata->
ymin)
347 int iz2 = (int) floor((q2[2] - wdata->
zmin)
351 real smallest_w = 1.1;
353 for(
int i = 0; i <= abs(ix2-ix1); i++) {
354 for(
int j = 0; j <= abs(iy2-iy1); j++) {
355 for(
int k = 0; k <= abs(iz2-iz1); k++) {
356 int ix = ix1 + i*((int) copysign(1, ix2-ix1));
357 int iy = iy1 + j*((int) copysign(1, iy2-iy1));
358 int iz = iz1 + k*((int) copysign(1, iz2-iz1));
360 if(ix >= 0 && ix < wdata->ngrid && iy >= 0 && iy < wdata->ngrid
361 && iz >= 0 && iz < wdata->ngrid) {
364 + iy*wdata->
ngrid + iz];
366 for(
int l = 0; l < wdata->
tree_array[ilist]; l++) {
373 if(w >= 0 && w < smallest_w) {
382 *w_coll = smallest_w;
450 if(bb1[0] <= t1[0] && t1[0] <= bb2[0]
451 && bb1[1] <= t1[1] && t1[1] <= bb2[1]
452 && bb1[2] <= t1[2] && t1[2] <= bb2[2])
454 if(bb1[0] < t2[0] && t2[0] <= bb2[0]
455 && bb1[1] <= t2[1] && t2[1] <= bb2[1]
456 && bb1[2] <= t2[2] && t2[2] <= bb2[2])
458 if(bb1[0] <= t3[0] && t3[0] <= bb2[0]
459 && bb1[1] <= t3[1] && t3[1] <= bb2[1]
460 && bb1[2] <= t3[2] && t3[2] <= bb2[2])
464 real c000[3]; c000[0] = bb1[0]; c000[1] = bb1[1]; c000[2] = bb1[2];
465 real c100[3]; c100[0] = bb2[0]; c100[1] = bb1[1]; c100[2] = bb1[2];
466 real c010[3]; c010[0] = bb1[0]; c010[1] = bb2[1]; c010[2] = bb1[2];
467 real c110[3]; c110[0] = bb2[0]; c110[1] = bb2[1]; c110[2] = bb1[2];
468 real c001[3]; c001[0] = bb1[0]; c001[1] = bb1[1]; c001[2] = bb2[2];
469 real c101[3]; c101[0] = bb2[0]; c101[1] = bb1[1]; c101[2] = bb2[2];
470 real c011[3]; c011[0] = bb1[0]; c011[1] = bb2[1]; c011[2] = bb2[2];
471 real c111[3]; c111[0] = bb2[0]; c111[1] = bb2[1]; c111[2] = bb2[2];