Getting stress from YADE

Asked by M.Meidani

Hi,
I have a problem with stresses in YADE.
I created a box and filled it with spheres as soil. Now I need to get a stress in Z direction (sigma Z) in different height.
For this scope I found three ways in YADE.

1- bodyStressTensores(): Getting stress for each particle, then average particle's stresses that has almost equal height and then multiply it by (1-n). n is prosity. [1]

2- bodyStressTensores() and TesselationWrapper(): Using micro-stress method and then average particle's stress which are in almost same height. [2]

3- Force method: Export f(z) for each particle then sum forces in almost same height. Then divide it by area of the bottom box.

I have done all of these methods but the results are not same. Which one is more realistic and reliable? Theoretical method is Gama* Z, but non of them are close to this value!

[1] https://yade-dem.org/doc/yade.utils.html?highlight=bodystresstensor#yade._utils.bodyStressTensors
[2] https://yade-dem.org/doc/user.html#micro-stress

Thanks.

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Bruno Chareyre
Solved:
Last query:
Last reply:
Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#1

Hi,
1- is the least accurate since it needs to assume a constant n along z
2- is good. Consider computing the convolution of particle stress with a
weight function, it is better than dividing into finite layers.
3- I'm not sure what you mean. "Each f(z)" should be the contact forces,
not the body forces (they are all zero at equilibrium). Computing stress
from contact forces through a cross section is possible but you need to
show your equations here, as many mistakes are possible.

Overall, if any of this method is far Gama* Z, you are probably doing a
mistake somewhere.

Bruno

Revision history for this message
M.Meidani (masood-meidani) said :
#2

Hi,
Thanks Brouno for your advice.

2- I'm not sure what you mean. "Consider computing the convolution of particle stress with a weight function". Do you mean
to average stresses by particles weight? Please explain more.

3- Actually I am not sure what is f(z)!! I used "O.forces(id)[2]" to export f(z) for each particle and the values were not 0. So it should be contact force. is it true?
I think last method needs more accuracy to choose correct particles in each height. I am not sure about my result and procedure.

Masood

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

Hi Masood,

> 3- Actually I am not sure what is f(z)!! I used "O.forces(id)[2]" to
> export f(z) for each particle and the values were not 0. So it should be
> contact force. is it true?
>

did you mean O.forces.f(id)? If so, this is force applied to the body, i.e.
NOT contact force. Such force is 0 at static equilibrium. If in your case
it is not 0, it means that your sample is not in static equilibrium and
therefore the formula for vertical stress (gamma*z) is not valid..

cheers
Jan

Revision history for this message
M.Meidani (masood-meidani) said :
#4

Hi Jan,

Thanks for your answer.

Yes, I mean O.forces.f(i)[2] in previous one. sorry for mistake.

I faced with problem. I checked the unbalanced force and it was 0.001, so the model was in static equilibrium, but when I exported O.forces.f(i) for spheres, f(x) and f(y) were near to 0, but f(z) in most of them was 24!! What does it mean?

Masood

Revision history for this message
M.Meidani (masood-meidani) said :
#5

Hi,

 I found another method to get stress in YADE. "VTKRecorder(fileName='stress',recorders=['all'],iterPeriod=1000)".
one of the items recorded is normal stress. Is it a normal micro-stress for each particle? What is the plain that this stress is normal on that?

Cheers

Masood

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

Hi,
you can use 'bstresses' for recorder, it "Saves per-particle principal
stresses ... and associated principal directions" [1]

I had a look how stress is computed using "stress" recorder, and I am not
sure about the result, I have to think more about it..

cheers
Jan

[1] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.VTKRecorder

2014-08-22 22:36 GMT+02:00 M.Meidani <email address hidden>:

> Question #253425 on Yade changed:
> https://answers.launchpad.net/yade/+question/253425
>
> M.Meidani posted a new comment:
> Hi,
>
> I found another method to get stress in YADE.
> "VTKRecorder(fileName='stress',recorders=['all'],iterPeriod=1000)".
> one of the items recorded is normal stress. Is it a normal micro-stress
> for each particle? What is the plain that this stress is normal on that?
>
> Cheers
>
> Masood
>
> --
> You received this question notification because you are a member of
> yade-users, which is an answer contact for Yade.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-users
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>

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

"stress" recorder averages for each body the normal stress or shear stress of all interactions associated to this body.
It needs to assign a cross section to each interaction, which is somehow arbitrary. The mechanical meaning is not clear.
I think we should remove this feature and replace it with bstresses.

> convolution of particle stress with a weight function

Say you define a weight function W (e.g. a normal distribution) centered on (x,y,z), such that W(X,Y,Z) vanish far away from (x,y,z).
The convolution of W with stress reads sum(W(b.pos-(x,y,z)) * stress[b.id])/sum(W(b.pos-(x,y,z)) and gives the stress in particles sufficiently close to (x,y,z).
That way you get a local average defined everywhere by changing x,y,z.

B

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

For completeness, the above convolution is not right if particles have different sizes. In that case the volume of bodies should be used for weighting the stress, in addition to the W function.

Also:
> but when I exported O.forces.f(i) for spheres, f(x) and f(y) were near to 0, but f(z) in most of them was 24!!

Gravitational forces are not counted in O.forces.f(id) when using Newton.gravity=g.
So I guess 24 is the weight of the particles.

B

Revision history for this message
M.Meidani (masood-meidani) said :
#9

Thanks Bruno Chareyre, that solved my question.

Revision history for this message
M.Meidani (masood-meidani) said :
#10

Thanks Jan for your answer.

Masood