struct reb_aabb reb_communication_boundingbox_for_proc(struct reb_simulation* const r, int proc_id){ int root_n_per_node = r->root_n/r->mpi_num; int root_start = proc_id*root_n_per_node; int root_stop = (proc_id+1)*root_n_per_node; struct reb_aabb boundingbox = communication_boundingbox_for_root(r, root_start); for (int i=root_start+1;i<root_stop;i++){ struct reb_aabb boundingbox2 = communication_boundingbox_for_root(r,i); if (boundingbox.xmin > boundingbox2.xmin) boundingbox.xmin = boundingbox2.xmin; if (boundingbox.ymin > boundingbox2.ymin) boundingbox.ymin = boundingbox2.ymin; if (boundingbox.zmin > boundingbox2.zmin) boundingbox.zmin = boundingbox2.zmin; if (boundingbox.xmax < boundingbox2.xmax) boundingbox.xmax = boundingbox2.xmax; if (boundingbox.ymax < boundingbox2.ymax) boundingbox.ymax = boundingbox2.ymax; if (boundingbox.zmax < boundingbox2.zmax) boundingbox.zmax = boundingbox2.zmax; } return boundingbox; }
struct aabb communication_boundingbox_for_proc(int proc_id){ int root_n_per_node = root_n/mpi_num; int root_start = proc_id*root_n_per_node; int root_stop = (proc_id+1)*root_n_per_node; struct aabb boundingbox = communication_boundingbox_for_root(root_start); for (int i=root_start+1;i<root_stop;i++){ struct aabb boundingbox2 = communication_boundingbox_for_root(i); if (boundingbox.xmin > boundingbox2.xmin) boundingbox.xmin = boundingbox2.xmin; if (boundingbox.ymin > boundingbox2.ymin) boundingbox.ymin = boundingbox2.ymin; if (boundingbox.zmin > boundingbox2.zmin) boundingbox.zmin = boundingbox2.zmin; if (boundingbox.xmax < boundingbox2.xmax) boundingbox.xmax = boundingbox2.xmax; if (boundingbox.ymax < boundingbox2.ymax) boundingbox.ymax = boundingbox2.ymax; if (boundingbox.zmax < boundingbox2.zmax) boundingbox.zmax = boundingbox2.zmax; } return boundingbox; }