getStress() applies for clumps?

Asked by ceguo

Hi,

Kozicki, et al. (2012) (published in Granular Matter) shows marvelous simulations using clumps in YADE. I am wondering if the current functions getStress() and fabricTensor() etc. applicable for clumps or not? If applicable, is the branch vector determined internally by YADE. And is there a function to get the clumps orientation tensor (e.g. elongated particle)?

Ning

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:

This question was reopened

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

Hi Ning,
current implementation of getStress() does not support clumps.
Jan

2012/8/21 ceguo <email address hidden>

> New question #206415 on Yade:
> https://answers.launchpad.net/yade/+question/206415
>
> Hi,
>
> Kozicki, et al. (2012) (published in Granular Matter) shows marvelous
> simulations using clumps in YADE. I am wondering if the current functions
> getStress() and fabricTensor() etc. applicable for clumps or not? If
> applicable, is the branch vector determined internally by YADE. And is
> there a function to get the clumps orientation tensor (e.g. elongated
> particle)?
>
> Ning
>
> --
> 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
Chiara Modenese (chiara-modenese) said :
#2

On 21 Aug 2012, at 14:30, ceguo wrote:

> New question #206415 on Yade:
> https://answers.launchpad.net/yade/+question/206415
>
> Hi,
>
> Kozicki, et al. (2012) (published in Granular Matter) shows marvelous simulations using clumps in YADE. I am wondering if the current functions getStress() and fabricTensor() etc. applicable for clumps or not? If applicable, is the branch vector determined internally by YADE. And is there a function to get the clumps orientation tensor (e.g. elongated particle)?
Both fabricTensor() and getStress() (as Jan said) functions do not currently support clumps. In Kozicki et al. walls are used at the boundaries thus I suppose stresses have been computed without the need to define the branch vector but let's wait for Janek's confirmation.

Chiara

>
> Ning
>
> --
> 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
ceguo (hhh-guo) said :
#3

Hi,

Thanks Jan and Chiara. To handle rigid clumps rotation we need to define the mass center of the clumps, right? and if we have the center and the contact point position, the branch vector is handily defined. So my question is how clumps rotate in YADE?

Ning

Revision history for this message
Chiara Modenese (chiara-modenese) said :
#4

On 22 Aug 2012, at 09:46, ceguo wrote:

> Question #206415 on Yade changed:
> https://answers.launchpad.net/yade/+question/206415
>
> Status: Answered => Open
>
> ceguo is still having a problem:
> Hi,
>
> Thanks Jan and Chiara. To handle rigid clumps rotation we need to define
> the mass center of the clumps, right? and if we have the center and the
> contact point position, the branch vector is handily defined. So my
> question is how clumps rotate in YADE?
This was already discussed in:
https://answers.launchpad.net/yade/+question/199704
In the end I did not have time to implement it but it is quite straightforward. All you need to know is the positions of the clumps, which you can do in Yade (see Bruno's hint in the thread above).

Chiara

>
> Ning
>
> --
> 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
ceguo (hhh-guo) said :
#5

Hi,

I just want to make sure how clumps rotation is treated. Is the whole clump rotating as a single rigid? Or each component (sphere) rotates separately? Though the former is much more reasonable, it needs significant modification of the current codes, right?

Ning

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

>Is the whole clump rotating as a single rigid?

Yes

>Though the former is much more reasonable, it needs significant modification of the current codes, right?

Yes. (thanks Vaclav!)
It's done here:
https://github.com/yade/trunk/blob/master/core/Clump.hpp#L68

Revision history for this message
ceguo (hhh-guo) said :
#7

Thanks Chareyre, that solved my question.

Revision history for this message
Chiara Modenese (chiara-modenese) said :
#8

Hi,

Concerning the computation of stress tensor and the question above I would like to know if the general definition of average stress tensor (e.g. Thornton, 2000; Bagi, 1996) holds true for clumps of particles (provided that the branch vector is correctly defined as previously discussed). In the paper by Bagi (1996) the definition is obtained for grains of arbitrary _convex_ shape. Do you know if the theory is also valid for grains of concave shape?

Thanks for opinion.
Chiara

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

Hello Chiara,

as far as I know the derivation, it is applicable to both convex and
non-convex shapes. The derivation itself (i.e. not necessariy all derived
equations) is also usable with clumps.
Could you write what equations do yo refer to? For example I do not have
access to the article of Thornton :-)

cheers
Jan

2012/12/18 Chiara Modenese <email address hidden>

> Question #206415 on Yade changed:
> https://answers.launchpad.net/yade/+question/206415
>
> Status: Solved => Open
>
> Chiara Modenese changed the question status:
> Hi,
>
> Concerning the computation of stress tensor and the question above I
> would like to know if the general definition of average stress tensor
> (e.g. Thornton, 2000; Bagi, 1996) holds true for clumps of particles
> (provided that the branch vector is correctly defined as previously
> discussed). In the paper by Bagi (1996) the definition is obtained for
> grains of arbitrary _convex_ shape. Do you know if the theory is also
> valid for grains of concave shape?
>
> Thanks for opinion.
> Chiara
>
> --
> 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
Chiara Modenese (chiara-modenese) said :
#10

Hi Jan,

Thanks for reply. The definition of average stress tensor in Bagi's paper, for instance, is equal to the one in Yade [1]. I was not sure about its validity for arbitrary grain shape (Bagi specifies that the method is valid for grains of convex shape but I cannot see why his derivation would not apply to concave shape too). I have adapted the definition of branch vector in my local branch [2] but it only handles the case of clump-clump interaction whereas it would be nice to have in trunk all the possible combinations (sphere-clump, etc.).

[1] https://yade-dem.org/doc/yade.utils.html?highlight=getstress#yade._utils.getStress

[2] // compute branch vector
      if ( Body::byId(I->getId2(),scene)->isClumpMember() && Body::byId(I->getId1(),scene)->isClumpMember()) { // if both bodies are clump mumbers
         int id_clump_2 = Body::byId(I->getId2(),scene)->clumpId;
         int id_clump_1 = Body::byId(I->getId1(),scene)->clumpId;
         branch = Body::byId(id_clump_2,scene)->state->pos + scene->cell->hSize*I->cellDist.cast<Real>() - Body::byId(id_clump_1,scene)->state->pos;
      } else { // only spheres
         branch= Body::byId(I->getId2(),scene)->state->pos + scene->cell->hSize*I->cellDist.cast<Real>() - Body::byId(I->getId1(),scene)->state->pos;
      }

Chiara

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

Hi Chiara,

thanks for information.

I think that a nice and general approach (applicable for both clump-clump
and clump-otherShape interaction) would be to stop the derivation before
introducing interaction length, i.e.:

sigma_ij = sum_intrs ( x_i * f_j )

x_i is contact point with the other particle with respect to the center of
particle. So

x_i = contactPoint_i - center_i

What do you think?

Jan

2012/12/18 Chiara Modenese <email address hidden>

> https://yade-
> dem.org/doc/yade.utils.html?highlight=getstress#yade._utils.getStress
>

Revision history for this message
ceguo (hhh-guo) said :
#12

Or something like this:

if (Body::byId(I->getId1(),scene)->isClumpMember()) {
        int id_clump_1 = Body::byId(I->getId1(),scene)->clumpId;
        pos1 = Body::byId(id_clump_1,scene)->state->pos;
}
else {
        pos1 = Body::byId(I->getId1())->state->pos;
}
if (Body::byId(I->getId2(),scene)->isClumpMember()) {
        int id_clump_2 = Body::byId(I->getId2(),scene)->clumpId;
        pos2 = Body::byId(id_clump_2,scene)->state->pos;
}
else {
        pos2 = Body::byId(I->getId2())->state->pos;
}
branch= pos2 + scene->cell->hSize*I->cellDist.cast<Real>() - pos1;

Revision history for this message
Chiara Modenese (chiara-modenese) said :
#13

@Ning
Your proposed solution looks fine to me. Are you planning to commit it?

@Jan
How do you define the branch vector in your case? Can you clarify your suggestion please?

Chiara

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

Hi Chiara,

the point is, that there is no branch vector in my solution :-) or that
"branch" vector is computed as x = contactPoint - center, see "x" in [1].
For the spherical case, it coincides with half branch vector, but is more
general (e.g. for the clump case, where you do not have branch vectors in
the "classical" Yade sense).

The solution proposed by Ning is nice and is exact for the cases, where the
contact point is located on the line (clump1->pos -- clump2->pos), but in
general case this is not true and trherefore it violates the assumptions of
the derivation.

Thanks for the discussion
Jan

[1] https://yade-dem.org/doc/yade.utils.html#yade._utils.bodyStressTensors

2012/12/18 Chiara Modenese <email address hidden>

> Question #206415 on Yade changed:
> https://answers.launchpad.net/yade/+question/206415
>
> Chiara Modenese proposed the following answer:
> @Ning
> Your proposed solution looks fine to me. Are you planning to commit it?
>
> @Jan
> How do you define the branch vector in your case? Can you clarify your
> suggestion please?
>
> Chiara
>
> --
> 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
ceguo (hhh-guo) said :
#15

Hi Jan,

In the case the contact point is not located in the line connecting the two clumps centres, the solution is still valid, since the vector algorithm (<contact point> - <clump1 pos>) dyadic <force> + (<contact point>-<clump2 pos>) dyadic <-force> is always equal to (<clump2 pos>-<clump1 pos>) dyadic <force>.

Ning

Revision history for this message
Chiara Modenese (chiara-modenese) said :
#16

Hi Jan,

I agree with Ning, the contact point does not need to be located in line with the branch vector for the derivation to be valid. See Bagis' paper (or similar references).

Chiara

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

Hello Ning,

this equality is of course always valid :-) I had in my mind different
aspect: the derivation of the stress of one (I will call it "investigated")
particle is based on the equation [1]

stress = sum ( x_i * f_i )

where x_i is the contact point (with respect to the center of particle),
where some external force "f" is applied (external in the sense with
respect to the investigated particle). Here we do not care about the
opposite particles at all. For the special case of spheres, this "x" equals
half of the branch vector between investigated particle and the formula can
be accordingly simplified with real branch vectors.

But for the clump case, if you use some point on the line connecting
clumps' centers (which in general differs from real "x"), you are in fact
using different formula.

It is the same case as if you have force acting on rigid body. You can
shift the force to any point, but you have to add some moment to preserve
the equality of these two situations.

@Chiara: Exactly, "the contact point does not need to be located in line with
the branch vector", but at the same time you can't place it to the line
with the branch vector (what is done by the approach proposed by Ning) if
it is located in different place. Or of course you can, but then the result
would be different..

Jan

[1] https://yade-dem.org/doc/yade.utils.html#yade._utils.bodyStressTensors

2012/12/18 Chiara Modenese <email address hidden>

> Question #206415 on Yade changed:
> https://answers.launchpad.net/yade/+question/206415
>
> Chiara Modenese proposed the following answer:
> Hi Jan,
>
> I agree with Ning, the contact point does not need to be located in line
> with the branch vector for the derivation to be valid. See Bagis' paper
> (or similar references).
>
> Chiara
>
> --
> 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
ceguo (hhh-guo) said :
#18

Yes, for calculating body stress per particle, the contact point position should be used.
While for the calculation of homogenized bulk stress, the use of branch vector (connecting clumps centres) is appropriate. Actually the branch vector is defined as the connection between centroids of two particles in contact. See (H. Ouadfel, L. Rothenburg, 2001, Mech. Mater.). In their case using ellipsoidal particles, the contact points are mostly NOT aligned on the branch vector.

Ning

Revision history for this message
Chiara Modenese (chiara-modenese) said :
#19

Hi Jan,

If I correctly interpret the code by Ning, he is simply taking the distance between the centroids of the two contacting bodies - whether these are spheres or clumps the definition of branch vector is the same. In the special case of two contacting spheres the branch vector then becomes in line with the contact point. Why do you state that this approach is wrong? It is general (as I understand it now, see my original question #10) and it would be good to include this adaption for clumps in trunk.

Chiara

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

Hello,

for some reason I was discussing one particle.. In the case of periodic
cell, the approach proposed by you is of course ok :-)
Sorry for misunderstanding
Jan

2012/12/18 ceguo <email address hidden>

> Question #206415 on Yade changed:
> https://answers.launchpad.net/yade/+question/206415
>
> ceguo posted a new comment:
> Yes, for calculating body stress per particle, the contact point position
> should be used.
> While for the calculation of homogenized bulk stress, the use of branch
> vector (connecting clumps centres) is appropriate. Actually the branch
> vector is defined as the connection between centroids of two particles in
> contact. See (H. Ouadfel, L. Rothenburg, 2001, Mech. Mater.). In their case
> using ellipsoidal particles, the contact points are mostly NOT aligned on
> the branch vector.
>
> Ning
>
> --
> 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
Chiara Modenese (chiara-modenese) said :
#21

Comments #9 and #12 solve the problem.
Chiara

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

Solved.

Then the remaining problem is that we have no per-body tensor for clumps ;)
For spheres we have bodyStressTensors(). If we want it for clumps, we need to consider the contact points (for spheres it also uses the contact point actually).