Friction Law and Contact-Model

360 views
edited Jul 13, 2016

Hey Vaclav,

according to my last question I'm still trying to simulate the interaction of rigid bodys. After creating the model, I deal with the parametrization right now. Therefore some question accured, of which I hope you have some answers ;)

1.) Friction Law

If I understand the code correctly, then friction in woo is implemented as a Cundall-Strack-Model. For a static case (relative velocity is 0), the reaction force is that great, so the body remains static. But only if the reaction  force is less equal than the Coulomb-Friction-Force of $F = \mu_H\cdot F_N$

For the not static case a tangential spring is initialized with the stiffness k_t. This stiffnes is calculated with the help of the two normal stifnesses of the colliding objects, which again are calculated with the help of Young's modulus E, the length l and the area A. (https://github.com/woodem/woo/blob/master/pkg/dem/FrictMat.cpp). So the only way I can control the friction is to set the parameter ktDivkn, which is the ratio of k_t/k_n. If this was right, then basically I have no other choice then fitting the parameter ktDivkn to some experimental results, because E, A, l don't have any physical influence (in real life) to the friction (which is influenced by the surface of the colliding objects).

I know that friction modelling with a tangential spring is state of the art in DEM, because of the possibilty to simulate  negative tangential restitution. But is there another way designated in woo? (E.g. the classic kinetic friction coefficient?)

2.) Contact Models

As you said in the thread before a hertzian model is not necessary for simulating colliding planar solids. I have choosen this approach, because in this model I was able to set the restitution coefficient. I'm a bit confused about the standard linear Cundall model, in which I set a global damping factor. Is there a relation between this global damping factor and the damping factor in a Kelvin-Voigt-Model $(F = c \cdot x + d \cdot \frac{dx}{dt})$?

My last question relates to the possibilty to set a model in an engine. I did it as shown below:

modelHertz=woo.models.ContactModelSelector(
name='Hertz',
damping=0,
poisson = 0.3,
restitution = 0.1)

S.engines=DemField.minimalEngines(model = modelHertz)

Is it possible to set different models in the engine for different colliding objects? For instance the model parameters of object A colliding with B are different than the parameters for A colliding with C.

I hope you can help me understanding these things. Thanks in advance!

Cheers, Clemens

answered Jul 18, 2016 by (49,070 points)
selected Aug 6, 2016

Hi Clemens,

1. I am not sure if I understand your description of friction; the tangential spring with Coulomb-type of friction is there always (and has non-zero reaction for non-zero tangential displacement on contact, which is computed incrementally from relative tangential velocity of surfaces at contact point). There is no distinction of static/dynamic; the simulation in itself is always dynamic. Please provide some link for "classic kinetic friction coefficient", I don't know what you refer to.

2. Contact models: I am sorry to suggest the simple linear contact model for your simulation, as it is only useful for quasi-static simulations (not your case), due to the absence of contact damping. If you use if, with non-zero numerical damping, you will get results which are dynamically not correct; that damping was designed to quickly get (quasi)static solution. So stay with Hertzian models, as those have contact-level damping, which is something you need.

For setting different contact models for different particles, it is somewhat possible, but you have to dump DemField.minimalEngines andContactModelSelector and build the engines and functors by yourself (see in DemField.minimalEngines what it does). Contact law is selected (via multi-method dispatch) for each contact given its combination of CGeom and CPhys types; CPhys is produced from multi-method dispatch for Material types. In practice, I've never encountered a simulation where this was needed, apart from some simple cases like different intera-body and body-boundary contacts, where it was useful.

HTH, Vaclav
answered Jul 18, 2016 by (290 points)

Hello Vaclav

Sorry, that I couldn't make clear my friction "problem". My "classical" understanding of friction is the following:

If two bodies are in contact (e.g. in my model  the bar and the ground) and no outer force occurs, than the bodies will not move. If there is force acting on the bar, than the bar will only move, if this force is greater than $\mu_s\cdot F_N$ . This was my understanding of the "static" case and I thought this coefficient $\mu_s$ is equal to the definition of tanPhi in FrictMat.

If the acting force is greater than $\mu_s \cdot F_N$ the body will move. In that case the friction decelerates the body. In elementar physics this friction force is calculable with the help of $\mu_k \cdot F_N$

With $\mu_s$I mean the coefficient of static friction and with $\mu_k$the coefficient of kinetic friction

The following picture illustrates what I have in mind. It is from the Matlab Contact Forces Library. I'm asking for this modelling technique, because with this definition of friction I'm capable to parameterrize this coefficients of friction in a very easy way in contrast to the parametrization of ktDivkn - in which I don't know how to determine it.

I hope I could make my problem clear.

commented Jul 31, 2016 by (49,070 points)

Hi, thank you for the detailed exposition.

DEM models tend to not make distinction between static and kinetic friction coefficients, since (it is a guess, that would be for historians to determine that) DEM contacts are never purely "static" -- there will be oscillation of both patricles in contact, thus the threshold static/dynamic will be blurred. If you need that distinction, it can be implemented - if you have the formulas (which you do), it is relatively straightforward (how to make it nicely fit within the existing framework is another question).

The two parameters are ktDivKn and tanPhi. As you guessed, tanPhi is the friction angle, but not in the sense as you say above (to be honest, I've never seen that definition, but it might be different background it comes from). You say $Ff=FN\mu$, but the formulas for the DEM model is that (using terminology from plasticity) if trial tangential force is beyond the plasticity surface ($FN\mu$), there is non-associated plastic flow (displacement accumulation) and FN returns to the plastic surface (without changing $FN$). So effectively $|FT|≤F_N\mu$, and is e.g. zero for zero normal force.

There are more exact solutions of the slip problem in tribology (contact science), like partial-slip solutions, partial plasticity and so on, but those are again too detailed for DEM (which given its idealizations does not need such solutions mostly).

So I think you will get what you expect, but need to rephrase it. The tangential modulus (kt=kN*ktDivKn) is defined using the dimensionless ktDivKn so that it suffices to change young (and indirectly $k_N$) to increase material stiffness.

What is the problem you are simulating? That might also reveal what you need.

I will be away till Wednesday, in case I am delayed with answering.

HTH, vaclav

commented Aug 1, 2016 by (290 points)
reshown Aug 1, 2016

Hi Vaclav,

thank you for this detailed answer.

I understand your explanation very well, but the more I think about your friciton model implemented in woo, I'm afraid that I can't use it for my problem.

As you have seen in the other thread I want to simulate a bar, which gets an initial velocity and then freely slides over the ground. So the behavior only depends from the friction force. In experiments I found out, that this friction force depends from the relative velocity. In fact I know very well for what relative velocity what friction force takes affect.

Do you see a way to reproduce this behavior in woo?

The general problem ( I think) is, that the DEM is not the right method to simulate the exact trajectory of one particle. Instead it is very helpful to simulate the global behavior of many particles. Do you agree with this assumption?

commented Aug 3, 2016 by (49,070 points)

Hi Clemens,

I understand now your friction is viscosity-based rather than plasticity based. DEM as such is not unsuitable for contact mechanics (maybe the DEM from the 80s, yes), it expands in ways which are not pure "DEM" anyway. Just like one can implement precise contact models (like adhesive Hertzian models, which come from tribology theories), the model you present is implementable as long as you have the equations.

DEM must simulate even single particles well so that the global behavior, which emerges from the simulation, makes any sense. Of course it simplifies, but it has to simplify in ways which are "right". Something like agent-based society models can be useful but the agents must be simplified the "right" way, otherwise the result is nonsense. I cannot give any better definition of "right" other than operational: what eventually works; plus some intuitive guesses, such as that energy non-conservative implies "not right".

I suggest is that you implement your contact model from scratch; I will be able to help you (not in next 3 weeks when I will be away, but afterwards). What the framework of Woo will provide you is contact detection and relative velocity. A limitation is that there are contacting surfaces, not the whole boxes, but the friction you show may be superposed and distributed over several contact points with the same result. You also need to think about the normal force, if you add some viscosity or some other forms of damping.

Have a look at some existing models, like pkg/dem/Ice.* or pkg/dem/IdealElPl.* (this one is complicated by energy tracking, otherwise very simple) to get an idea. Once I wrote (IIRC) a tutorial on how to write a contact model for Yade, I could cook something similar up again for Woo.

Cheers, v.

commented Aug 12, 2016 by (290 points)

Hi Vaclav,

I really thank you for your explanations! Right now I had to determine wether my problem is solvable with woo or not. This is also a result.

I think, that a tutorial for the implementation of a contact model in woo would be very useful for a lot of users. I would appreciate it a lot! I will consider your offer, helping me with the implementation, if it gets acute ;)

Cheers, Clemens

commented Aug 25, 2016 by (49,070 points)

Hi Clemens, there is a short writeup on how to implement a new contact law: https://woodem.org/prog/contact.html . HTH, Václav