How to create walls with friction

Asked by Tao

Hi all,
I want to simulate the friction interaction between a sphere with a wall. After reading some FAQs, I got the idea that ESyS cannot simulate a friction wall currently. Actually, I only need to set friction to planar walls, thus, I guess I can do that by modifying some scripts in ESyS source code. Can anyone tell which files do I need to modify in order to create a friction model? In Python script, I can see one InteractionGroup named NRotElasticWallPrms and I guess I need to modify this class. Where can I find this class in ESyS source code?

Thanks a lot.

Tao

Question information

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

Hi Tao,

Thank you for expressing interest in implementing frictional wall interactions. If you would be happy to contribute your code for inclusion in future versions of ESyS-Particle, the ESyS-P development team would be most happy to assist you with the implementation. Although I do not wish to discourage you, I think it's important I explain some of the challenges you may face when implementing frictional wall interactions.

On the face of it, it would seem to be fairly easy to code up frictional wall interactions however there are always hidden issues to resolve when it comes to implementing new interaction types. In the case of frictional wall interactions, there is at least one aspect of the implementation that is different to any of the existing wall interactions. This may end up being the most difficult issue to overcome. Let me try to explain what this is, whilst also pointing you to some key parts of the code for existing wall interactions.

For the purpose of discussion, let's assume we wish to implement "Cundall-like" frictional interactions. For this type of interaction, a particle that comes into contact with a wall experiences two forces:
1) a normal force repelling the particle from the wall, and
2) a shear force resisting tangential motion of the particle with respect to the wall. The shear force is restricted to be less than or equal to a maximum frictional force that is proportional to the normal force.

The normal repulsive force is simple to calculate. As you summised, it is identical to the implementation of the NRotElasticWall interaction. The actual implementation of this force can be found in Model/EWallInteraction.hpp, specifically the calcForces(..) subroutine in that file.

For the shear force:
When a particle first touches a wall, its point of contact is saved and the particle is attached to an elastic spring at that point. As the particle moves tangentially, this elastic spring extends, pulling the particle back towards the initial point of contact. The SoftBondedWall interaction implements something similar to this, the code for which can be found in Model/SoftBWallInteraction.hpp. Note however that this interaction is a *bonded* interaction where we specify during setup which particles experience this interaction. SoftBondedWall does not handle cases of particles coming into contact with the wall that were not previously bonded to the wall. The NRotElasticWall interaction does have the ability to identify new particle contacts though.

The first difficulty that arises is that we must record the point of first contact between the particle and the wall and remember that while ever that particle remains in contact with the wall. None of the existing wall interactions in ESyS-Particle need to remember information from previous timesteps in order to calculate forces. Consequently the way wall interactions are currently implemented, there is no way to store such information. This is the first coding challenge to be overcome when implementing frictional walls. It has nothing to do with the mathematics/logic of particle-wall friction but rather the way ESyS-Particle itself is written.

Another problem with particle-wall frictional interactions that tends not to be an issue for particle-pair frictional interactions is the issue of stick-slip cycles. For a particle-pair, once the maximum frictional force is exceeded, the particles slip past one another and typically will go out of contact as a result. Particle-pairs go from the stick state to slip state but never back to the stick state. For a particle sliding along a wall, this may not be the case, depending upon other forces acting on the particle.

A situation may arise where the net shear force due to other particles is equal to or less than, the maximum frictional force. The particle will then stop moving relative to the wall (assuming the wall is stationary). One must include code to detect this and switch back to using the elastic shear force approach until the maximum frictional force is exceeded once more.

Accurately capturing this stick-slip-stick transition is vital for particle-wall frictional interactions. It can be done (I have done it in other codes) but it is not trivial to tune it so that artefacts like reverberations are eliminated. The nasty problem is that at the time we calculate the shear force we don't know the net force due to interactions with all other particles interacting with the particle of interest. Overshoot or undershoot in calculating the frictional force is typical and can generate a lot of unwanted numerical noise in simulations. In my experience, this is the most frustrating problem to resolve when implementing frictional interactions in discrete numerical codes like ESyS-Particle.

If you are interested, there is a paper describing a method to implement particle-pair frictional interactions that resolves the stick-slip-stick transition problem amongst others. As you will see, this is a very complicated algorithm. Although it was implemented in a forerunner code to ESyS-Particle (called the Lattice Solid Model) we have since decided to stick with the simpler "Cundall-like" friction for ESyS-Particle.

The paper is:
Place, D. and Mora, P. (1999) "The Lattice Solid Model to Simulate the Physics of Rocks and Earthquakes: Incorporation of Friction", Journal of Computational Physics, Volume 150, Issue 2, 332-372

I hope all this does not discourage you from trying to implement frictional wall interactions, but perhaps it might be worthwhile to first have a go at writing a simple DEM code in which you can develop and refine the logic for frictional wall interactions before importing that logic into ESyS-Particle?

As always, I am happy to discuss this further and help as best I can.

Cheers,

Dion.

Revision history for this message
Tao (aaronztao) said :
#2

Hi Dion,
Thanks a lot for your detailed reply.
I once thought it wouldn't be hard to add friction force on a rigid wall. After reading your reply, I found it's really hard to achieve this. However, one thing appears quite strange to me that since we can see frictional wall interactions can be implemented in some other code: YADE, LAMMPS, how can they overcome this problem?

Thank you for your help.

Cheers,
Tao

Revision history for this message
Dion Weatherley (d-weatherley) said :
#3

Hi Tao,

I was not arguing that frictional wall interactions cannot be implemented at all. Frictional wall interactions certainly can be implemented but it is not necessarily a trivial exercise.

Perhaps a good starting point would be to find out how YADE, LAMMPS and other DEM codes implement frictional wall interactions then select the best method to adapt to ESyS-Particle? I suspect that the main difficulty, once you have a good algorithm, will be implementing wall interactions that can store information about the previous state of the particle-wall interaction.

Please do not give up if you are keen to try implementing frictional walls in ESyS-Particle.

Cheers,

Dion.

Can you help with this problem?

Provide an answer of your own, or ask Tao for more information if necessary.

To post a message you must log in.