void cosmobl::set_ObjectRegion_SubBoxes (catalogue::Catalogue &data, catalogue::Catalogue &random, const int nx, const int ny, const int nz) { vector<double> Lim; data.MinMax_var(catalogue::Var::_X_, Lim, 0); data.MinMax_var(catalogue::Var::_Y_, Lim, 0); data.MinMax_var(catalogue::Var::_Z_, Lim, 0); double Cell_X = (Lim[1]-Lim[0])/nx; double Cell_Y = (Lim[3]-Lim[2])/ny; double Cell_Z = (Lim[5]-Lim[4])/nz; #pragma omp parallel num_threads(omp_get_max_threads()) { #pragma omp for schedule(static, 2) for (int i=0; i<data.nObjects(); i++) { int i1 = min(int((data.xx(i)-Lim[0])/Cell_X), nx-1); int j1 = min(int((data.yy(i)-Lim[2])/Cell_Y), ny-1); int z1 = min(int((data.zz(i)-Lim[4])/Cell_Z), nz-1); int index = z1+nz*(j1+ny*i1); data.catalogue_object(i)->set_region(index); } #pragma omp for schedule(static, 2) for (int i=0; i<random.nObjects(); i++) { int i1 = min(int((random.xx(i)-Lim[0])/Cell_X), nx-1); int j1 = min(int((random.yy(i)-Lim[2])/Cell_Y), ny-1); int z1 = min(int((random.zz(i)-Lim[4])/Cell_Z), nz-1); int index = z1+nz*(j1+ny*i1); random.catalogue_object(i)->set_region(index); } } }