30 static inline int cellIntersectNode(
double x,
double y,
double z,
double h,
struct bht_node *node)
32 double xmin,xmax,ymin,ymax,zmin,zmax;
46 else if(x>xmax) cx=xmax;
50 else if(y>ymax) cy=ymax;
54 else if(z>zmax) cz=zmax;
57 dist = sqrt((x-cx)*(x-cx)+(y-cy)*(y-cy)+(z-cz)*(z-cz));
68 static inline int cellInsideNode(
int c,
struct bht_node *node)
70 double xmin,xmax,ymin,ymax,zmin,zmax;
96 static inline float sph_kernel(
double r)
101 if(r<0.0)
return 0.0;
104 if(
sdim==2) c=40/(7*M_PI*
h2);
105 if(
sdim==3) c=8/(M_PI*
h3);
106 if(u<0.0)
stopRun(666,NULL,__FILE__,__LINE__);
108 if(u>=0.0 && u<=0.5)
return c*(1-6*u*u+6*u*u*u);
109 if(u>0.5 && u<=1.0)
return c*(2*(1-u)*(1-u)*(1-u));
110 if(u>1.0)
return 0.0;
122 static inline int sph_kernel_gradient(
int p1,
int p2,
double grad[3],
int mode,
double r)
126 double x1,x2,y1,y2,z1,z2;
149 if(
sdim==2) c=(40*8)/(7*M_PI*
h3);
150 if(
sdim==3) c=48/(M_PI*
h4);
152 if(u<0.0)
stopRun(666,NULL,__FILE__,__LINE__);
154 if(u>=0.0 && u<=0.5) w=-2.0*u+3.0*u*u;
155 if(u>0.5 && u<=1.0) w=-(1.0-u)*(1.0-u);
158 grad[0]=w*c*(x2-x1)/r;
159 grad[1]=w*c*(y2-y1)/r;
160 if(
sdim==3) grad[2]=w*c*(z2-z1)/r;
161 if(
sdim==2) grad[2]=0.0;
struct partData * recvData
void stopRun(int ierr, char *name, char *file, int line)