blob: 87fd1743c4a3cb647c7d34a5b217feee9b49913a [file] [log] [blame]
 #define POSVEL_T float #define ID_T int void cm_int(ID_T count, const POSVEL_T* __restrict xx, const POSVEL_T* __restrict yy, const POSVEL_T* __restrict zz, const POSVEL_T* __restrict mass, POSVEL_T* __restrict xmin, POSVEL_T* __restrict xmax, POSVEL_T* __restrict xc) { // xmin/xmax are currently set to the whole bounding box, but this is too conservative, so we'll // set them based on the actual particle content. double x = 0, y = 0, z = 0, m = 0; POSVEL_T w,x1,x2,y1,y2,z1,z2; x1 = xx[0]; x2 = xx[0]; y1 = yy[0]; y2 = yy[0]; z1 = zz[0]; z2 = zz[0]; for (int i = 0; i < count; ++i) { if ( x1 > xx[i] ) x1 = xx[i]; /* x1 = min( xx[] ) */ if ( x2 < xx[i] ) x2 = xx[i]; /* x2 = max( xx[] ) */ if ( y1 > yy[i] ) y1 = yy[i]; /* y1 = min( yy[] ) */ if ( y2 < yy[i] ) y2 = yy[i]; /* y2 = max( yy[] ) */ if ( z1 > zz[i] ) z1 = zz[i]; /* z1 = min( zz[] ) */ if ( z2 < zz[i] ) z2 = zz[i]; /* z2 = max( zz[] ) */ w = mass[i]; x = x + w * xx[i]; y = y + w * yy[i]; z = z + w * zz[i]; m = m + w; } xc[0] = (POSVEL_T) (x/m); xc[1] = (POSVEL_T) (y/m); xc[2] = (POSVEL_T) (z/m); xmin[0] = x1; xmax[0] = x2; xmin[1] = y1; xmax[1] = y2; xmin[2] = z1; xmax[2] = z2; }