gravity

Asked by Robert Sarracino

Each time step I would like to assign a different acceleration (call it a different 'gravity'). and a different damping constant, to each particle depending on its position. This acceleration is similar to gravity in that it would be added to whatever acceleration arises from interaction with neighboring particles. However, its value would be different for each particle. How do I do that?

I've begun by setting up a runnable in which I've added the loop

for pp in particleList:
   centre = pp.getPosn()
   radius = pp.getRadius()
   {calculation of acceleration}
   {calculation of damping constant}

What command do I use to assign the acceleration and the damping constant to the particle?

Question information

Language:
English Edit question
Status:
Solved
For:
ESyS-Particle Edit question
Assignee:
No assignee Edit question
Solved by:
Dion Weatherley
Solved:
Last query:
Last reply:
Revision history for this message
Best Dion Weatherley (d-weatherley) said :
#1

Hi Robert,

It is not possible to apply forces to particles via a Runnable. This is because Runnables can only be called either prior to force calculations or subsequent to position update. The first stage of force calculation sets the net force of each particle to zero, hence any force set by a Runnable will be zeroed before any other interaction forces are computed. Your only option is to implement a new interaction law in the C++ source code of ESyS-Particle. Some notes on how to do this are available here:
https://wiki.geocomp.uq.edu.au/images/d/d7/HowToAddInteraction.pdf

Regarding your damping constant, this would need to be implemented as a new interaction law (in C++) as well. I do not see any major problem with implementing a damping interaction which computes a new damping coefficient from particle position etc each timestep.

I should note that in ESyS-Particle, individual particles do not have material properties such as elastic stiffness or damping coefficients. Rather, individual interactions are assigned such properties. Particles only carry information specific to their own dynamical state (position, velocity, net force, mass and radius). This is a little different to other popular implementations of the DEM where individual particles are assigned stiffnesses etc. which are then averaged when computing particle-pair forces. The appropriate averaging formula to use (arithmetic, geometrical, ...) is somewhat ambiguous in most instances. The ESyS-Particle developers decided to eliminate that ambiguity by only assigning such properties to the interactions themselves, requiring no averaging step in the force calculations.

Cheers,

Dion

Revision history for this message
Robert Sarracino (robert-sarracino) said :
#2

Thanks Dion Weatherley, that solved my question.

Revision history for this message
Robert Sarracino (robert-sarracino) said :
#3

Thanks again, Dion. Going through the source code while following Stefan's article, I found a Buoyancy class in BodyForceGroup.h, which is exactly what I was looking for.

The only thing I would like to add to it is a damping constant for particles 'in water' which would be different from the damping constant outside water. For the moment it's not important, but I may try to modify it later.