Avoid moding mesh using force fields

Submitted by antoniosereno on Wed, 10/16/2019 - 11:24

Hello everyone!
I'm trying to simulate a ball mill and I'm using at the moment a very simple geometry to obtain acceptable computation times since I'm learning now LIGGGHTS. While looking at the documentation page, I read about the possibility to assign variables instead of exact values to both the magnitude and the direction of hte gravity vector and I was thus wondering if there's a way to avoid heavy computation by using this trick instead of moving he mesh.

As a first attempt, I first inserted the particle into my geometry using a classical gravity vector, using:

fix grav all 9.81 vector 0.0 0.0 -1.0

until all the particle settled; after that, this gravity was unfixed and substituted with the following lines:

variable ang_vel equal 8.5 #it was originally the angular velocity of the geometry
variable actualstep equal step
variable theta equal ${ang_vel}*(step-${actualstep})*${tstep} #direction of the gravity vector

#please ignore the step-actualstep, it was just written to adjust the timestep since the simulation was divided in 2 parts using a restart;

variable gx equal -sin(v_theta)
variable gz equal -cos(v_theta)

fix gravi all gravity 9.81 vector v_gx 0.0 v_gz

Obviusly, what I obtained was completely different from the real simulation in which the mill is rotating: the particles "slide" following the internal surface of the geometry and they never fall down.

I thought that what I've tried is conceptually incorrect since from a physical point of view, the force that keeps the particles attached to the surface is the centrifugal force, the gravity force instead, makes them fall down. I think I'm able to do it using a centrifugal force field, but still, there would be no realistic relative movement between periferical particles and mesh and thus the model would be incorrect

Any idea about where I could find more information about this topic?
Thank you in advance for your support

mschramm | Wed, 10/16/2019 - 18:09

Hello
I don't think you will see any type of speed up but fix addforce should do what you want as this will add a force per atom.
You would need to compute a vector from the center of the mesh to the atom, calculate the magnitude of the centrifugal force decompose it into the x,y, and z directions...
once you have centrifugalForce_x, centrifugalForce_y, and centrifugalForce_z, you would use the fix as
fix cheatingTheSystem all addforce v_centrifugalForce_x v_centrifugalForce_y v_centrifugalForce_z
But this would not cause any torques on your particles... the only torque that would be generated would be from particle to particle collisions.... You could get around this by creating a new fix.... f
ix addtorque...
but at this point.... you might as well have the geometry in there rotating....

Also, you would have to find a way to constrain the particles some other way. You would need to apply a inversely proportional force to the normal that goes to infinity as your particle's position goes to the radius of the mill...

antoniosereno | Thu, 10/17/2019 - 09:03

thank you for your answer!
I've thought about using an addforce command but there should be 2 main issues:
1) if I have more particle template, that command will impose the same force on every particle but centrifugal force is proportional to mass; (I solved this using a gravity force to represent it)
2) Centrifugal force also depends on distance from the center of the mill; is there any way to use the result of a compute (displace/atom style would fit this task) to assign to each atom a different force?

Thank you !

mschramm | Fri, 10/18/2019 - 00:19

You can access position in the input file using x, y, and z, velocity via vx, vy, and vz, and forces via fx, fy, and fz, and atom mass via mass

then you can apply a force to atoms via

variable FX atom -vx
variable FY atom (1.0-vy)/mass
variable FZ atom (1.0-z)*9.81
fix kick all addforce v_Fx v_FY v_FZ

antoniosereno | Fri, 10/18/2019 - 09:14

thank you!! that's gonna help; I'll work on it!