diff --git a/cpp/particles/p2p/p2p_ghost_collisions.hpp b/cpp/particles/p2p/p2p_ghost_collisions.hpp index fab3f34be0bd866ac268db8e3981627eb2107805..12e499e7c9df6ea51a73e2c41e831bffbea7b50a 100644 --- a/cpp/particles/p2p/p2p_ghost_collisions.hpp +++ b/cpp/particles/p2p/p2p_ghost_collisions.hpp @@ -218,7 +218,7 @@ public: real_number /*rhs_part2*/[], const real_number dist_pow2, const real_number /*cutoff*/, - const real_number xseparation, + const real_number xseparation, /* This separation is x1-x2 */ const real_number yseparation, const real_number zseparation){ switch(this->current_particle_shape) @@ -245,13 +245,13 @@ public: /* p and q are the orientation vectors of the first and second particles. */ /* pq, xp, xq are scalar products of these vectors with x, relative position */ - pq = pos_part1[3] * pos_part2[3] + pos_part1[4] * pos_part2[4] + pos_part1[5] * pos_part2[5]; - xp = x * pos_part1[3] + y * pos_part1[4] + z * pos_part1[5]; - xq = x * pos_part2[3] + y * pos_part2[4] + z * pos_part2[5]; + pq = pos_part1[IDXC_X+3] * pos_part2[IDXC_X+3] + pos_part1[IDXC_Y+3] * pos_part2[IDXC_Y+3] + pos_part1[IDXC_Z+3] * pos_part2[IDXC_Z+3]; + xp = x * pos_part1[IDXC_X+3] + y * pos_part1[IDXC_Y+3] + z * pos_part1[IDXC_Z+3]; + xq = x * pos_part2[IDXC_X+3] + y * pos_part2[IDXC_Y+3] + z * pos_part2[IDXC_Z+3]; /* t and s parametrize the two rods. Find min distance: */ assert(this->cylinder_length > 0); - t = 2.0/(this->cylinder_length*(pq*pq-1.0))*(-xp+pq*xq); - s = 2.0/(this->cylinder_length*(pq*pq-1.0))*(-pq*xp+xq); + t = 2.0/(this->cylinder_length*(pq*pq-1.0))*(xp-pq*xq); + s = 2.0/(this->cylinder_length*(pq*pq-1.0))*(pq*xp-xq); /* Test if -1<s<1 and -1<t<1 */ if( abs(t)<=1.0 and abs(s)<=1.0 ) { @@ -266,7 +266,7 @@ public: min_distance = this->cylinder_length; /* t fixed at 1, find min along s */ t = 1.0; - s = t*pq-2.0/this->cylinder_length*xq; + s = t*pq+2.0/this->cylinder_length*xq; if( abs(s)>1.0 ) { s = s / abs(s) ;} x_dist = this->cylinder_length*0.5*t*pos_part1[IDXC_X+3]-this->cylinder_length*0.5*s*pos_part2[IDXC_X+3]+x; y_dist = this->cylinder_length*0.5*t*pos_part1[IDXC_Y+3]-this->cylinder_length*0.5*s*pos_part2[IDXC_Y+3]+y; @@ -274,7 +274,7 @@ public: min_distance = fmin( sqrt(x_dist*x_dist+y_dist*y_dist+z_dist*z_dist), min_distance ); /* t fixed at -1, find min along s */ t = -1.0; - s = t*pq-2.0/this->cylinder_length*xq; + s = t*pq+2.0/this->cylinder_length*xq; if( abs(s)>1.0 ) { s = s / abs(s) ;} x_dist = this->cylinder_length*0.5*t*pos_part1[IDXC_X+3]-this->cylinder_length*0.5*s*pos_part2[IDXC_X+3]+x; y_dist = this->cylinder_length*0.5*t*pos_part1[IDXC_Y+3]-this->cylinder_length*0.5*s*pos_part2[IDXC_Y+3]+y; @@ -282,7 +282,7 @@ public: min_distance = fmin( sqrt(x_dist*x_dist+y_dist*y_dist+z_dist*z_dist), min_distance ); /* s fixed at 1, find min along t */ s = 1.0; - t = s*pq+2.0/this->cylinder_length*xp; + t = s*pq-2.0/this->cylinder_length*xp; if( abs(t)>1.0 ) { t = t / abs(t) ;} x_dist = this->cylinder_length*0.5*t*pos_part1[IDXC_X+3]-this->cylinder_length*0.5*s*pos_part2[IDXC_X+3]+x; y_dist = this->cylinder_length*0.5*t*pos_part1[IDXC_Y+3]-this->cylinder_length*0.5*s*pos_part2[IDXC_Y+3]+y; @@ -290,7 +290,7 @@ public: min_distance = fmin( sqrt(x_dist*x_dist+y_dist*y_dist+z_dist*z_dist), min_distance ); /* s fixed at -1, find min along t */ s = -1.0; - t = s*pq+2.0/this->cylinder_length*xp; + t = s*pq-2.0/this->cylinder_length*xp; if( abs(t)>1.0 ) { t = t / abs(t) ;} x_dist = this->cylinder_length*0.5*t*pos_part1[IDXC_X+3]-this->cylinder_length*0.5*s*pos_part2[IDXC_X+3]+x; y_dist = this->cylinder_length*0.5*t*pos_part1[IDXC_Y+3]-this->cylinder_length*0.5*s*pos_part2[IDXC_Y+3]+y;