rolling friction calculation

Submitted by MRoesle on Sat, 02/04/2012 - 13:28

Hello,
I think there are some problems with the way rolling friction is calculated in pair_gran_hooke_history.cpp .

I set up a simple test case with two identical spheres held in contact with each other via a fix spring/self. When I give them the same initial angular velocity (normal to the axis connecting the sphere centers), there is sliding contact between the spheres. As expected, tangential damping causes the spheres' rotation to slow, but enabling rolling friction causes them to slow down as well. On the other hand, if I start the spheres with equal and opposite angular velocities, so that there is perfect rolling contact between them, rolling friction has no effect. (and neither does tangential damping, which is expected.)

I think the problem lies in using the wr1 .. 3 vector from lines 352-358 of pair_gran_hooke_history.cpp . That vector was defined earlier for finding the relative (sliding) tangential velocity at the contact point of the spheres. For rolling friction, I think you want to start with the difference rather than the sum of omega[i] and omega[j], which should give you a quantity related to the average velocity of the contact point due to rotation of the spheres, rather than the sliding velocity.

Also, I think there's a problem in lines 360-363:

360 // remove normal (torsion) part of torque
361 r_torque_n[0] = r_torque[0] * delx * rinv;
362 r_torque_n[1] = r_torque[1] * dely * rinv;
363 r_torque_n[2] = r_torque[2] * delz * rinv;

r_torque_n is supposed to be the projection of r_torque onto the vector connecting the centers of the two spheres (delta), right? In that case, don't you want to have something like,

double rtorque_dot_delta = r_torque[0]*delx + r_torque[1]*dely + r_torque[2]*delz;
r_torque_n[0] = delx * rtorque_dot_delta * rsqinv;
r_torque_n[1] = dely * rtorque_dot_delta * rsqinv;
r_torque_n[2] = delz * rtorque_dot_delta * rsqinv;

? This might just be a failure of my understanding; I can't figure out what the current lines 361-363 accomplish.

Best regards,
Matt

ckloss's picture

ckloss | Thu, 02/09/2012 - 16:22

Matt,

thank you very much for your comments - I think both of your points (sum instead of difference and the "bug" when removing the normal component) are valid. I will change that in the next release!

Cheers, Christoph