Contacts in function getStress()

Asked by Leonard

Hi,

I'd like to ask that in function getStress() [1], it says that "the sum is over all interactions, with f the contact force and l the branch vector (joining centers of the bodies)".

My question is what is the branch vector between sphere particle and wall?

For instance, for a packing which includes particles confined by rigid wall boundaries, there are particle-particle interaction and particle-wall interaction. Is particle-wall interaction also considered in getStress() function? If so, how to describe the branch vector between sphere particle and walls, is it joining contact point and center of particle?

Thanks
Leonard

[1]https://yade-dev.gitlab.io/trunk/yade.utils.html?highlight=getstress#yade._utils.getStress

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Karol Brzezinski
Solved:
Last query:
Last reply:
Revision history for this message
Leonard (z2521899293) said :
#1

Hi,

Could you please also share the link to the source code of getStress()?

Many thanks
Leonard

Revision history for this message
Best Karol Brzezinski (kbrzezinski) said :
#2

Hi,

You can find the code here [2]. Maybe this will help you to find the answer.

I can't interpret this for sure, because of my little experience in cpp.

Cheers,
Karol

[2] https://gitlab.com/yade-dev/trunk/-/blob/master/preprocessing/dem/Shop_02.cpp#L380

Revision history for this message
Leonard (z2521899293) said :
#3

Hi Karol,

Thanks very much for your sharing.

As described in the code:
branch = b1->state->pos - b2->state->pos;
stressTensor += (nsi->normalForce + nsi->shearForce) * branch.transpose();

Based on my limited knowledge of cpp, I think the brach vector is calculated by the position of the two objects, no matter they are sphere or wall. Please correct me if I am wrong.

Best,
Leonard

Revision history for this message
Leonard (z2521899293) said :
#4

Thanks Karol Brzezinski, that solved my question.

Revision history for this message
Jan Stránský (honzik) said :
#5

> the brach vector is calculated by the position of the two objects

currently the code is like that.
Therefore, it is not suitable for wall-sphere contact, where the branch should (?) be perpendicular to the wall (not related to wall.state.pos, which is some "random" point in the wall plane)
Cheers
Jan

Revision history for this message
Jérôme Duriez (jduriez) said :
#6

If one goes back to the analytical derivations of this "Love-Weber" formula, one should see contacts with boundary bodies should probably not be included at all. Since boundary bodies do not belong to the material whose stress we want to compute.

It is somewhat discussed in https://www.icevirtuallibrary.com/doi/10.1680/jgeot.15.P.113 (or https://hal.archives-ouvertes.fr/hal-01868739), around Eq. (6) which gives a stress expression that better accounts for boundary effects, in my opinion.

(Not implemented in public YADE, at the moment)

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#7

Hi,
Using the position of the wall instead of the contact point is perfectly fine.
The sum of f*l really runs over all interacting pairs regardless of the shapes of the objects.
The nice thing with this expression is it doesn't require the notion of a "contact point", at all. Which is great when the interactions are remote (capillary forces, electrostatic, lubrication, etc.).

In general it would be wrong to select different reference points for one single object when defining "l". It is correct in the particular case of an external wall, though. And therefore the suggestion by Jan and Jerome are correct too (at least for those interaction models which define a contact point, not always the case). It gives the same result in practice.

Bruno