difference in returned stress

Asked by ceguo on 2012-02-15

Hi,

I am playing with Peri3dController with label e.g. 'biax', but I find the stress returned by biax.stress is different from that by calling utils.stressTensorOfPeriodicCell(). The formula used by stressTensorOfPeriodicCell is what we commonly adopt in DEM. How stress is calculated in Peri3dController?

Ning

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Jan Stránský
Solved:
2012-02-15
Last query:
2012-02-15
Last reply:
2012-02-15
Jan Stránský (honzik) said : #1

Hi Ning,

the formula used is exactly the same (actually the same function is
called). The difference could be because of different type of
stressTensorOfPeriodicCell() and Peri3dController.stress. The first one
returns a tensor stress=Matrix3(sxx,sxy,sxz, syx,syy,syz, szx,szy,szz),
while the second one is in "vectorized" (Voigt's) notation
stess=Vector6(sxx,syy,szz, syz,szx,sxy). Is this the source of the
difference?

Jan

ceguo píše v St 15. 02. 2012 v 02:50 +0000:
> New question #187798 on Yade:
> https://answers.launchpad.net/yade/+question/187798
>
> Hi,
>
> I am playing with Peri3dController with label e.g. 'biax', but I find the stress returned by biax.stress is different from that by calling utils.stressTensorOfPeriodicCell(). The formula used by stressTensorOfPeriodicCell is what we commonly adopt in DEM. How stress is calculated in Peri3dController?
>
> Ning
>

ceguo (hhh-guo) said : #2

Hi Jan,

Actually not. The difference is NOT format difference. Here is an example (if you remember the script I sent to you before):

>>> packing.consolidate() # calls Peri3dController and labels as 'cons'
>>> packing.getStress() # this calls utils.stressTensorOfPeriodicCell()
Matrix3(-48965.9,100.619,0, 100.619,-48972.5,0, 0,0,0)
>>> cons.stress # labelled as 'cons'
Vector6(-50002.634879037054,-50002.541124107054,0, 0,0,100.14402045344963)
>>> packing.shear() # calls Peri3dController and labels as 'biax'
>>> packing.getStress() # this calls utils.stressTensorOfPeriodicCell()
Matrix3(-38680.7,300.731,0, 300.731,-56123,0, 0,0,0)
>>> biax.stress # labelled as 'biax'
Vector6(-39449.714550942866,-57438.815800571429,0, 0,0,312.58387791336929)

You see, the results are different. May this be due to 2d simulation? To use the current formula in 2d, I set:
O.cell.hSize=utils.Matrix3(3,0,0, 0,3,0, 0,0,1). Here the size in the third direction is set to unity. I think this will work smoothly without modification within the code. Am I right?

Ning

Best Jan Stránský (honzik) said : #3

Hi Ning,

try tu use utils.stressTensorOfPeriodicCell(True), this is the only
difference in both cases, as in both approaches the same c++ function is
called (but with different parameter by default).

Jan

ceguo píše v St 15. 02. 2012 v 09:11 +0000:
> Question #187798 on Yade changed:
> https://answers.launchpad.net/yade/+question/187798
>
> Status: Answered => Open
>
> ceguo is still having a problem:
> Hi Jan,
>
> Actually not. The difference is NOT format difference. Here is an
> example (if you remember the script I sent to you before):
>
> >>> packing.consolidate() # calls Peri3dController and labels as 'cons'
> >>> packing.getStress() # this calls utils.stressTensorOfPeriodicCell()
> Matrix3(-48965.9,100.619,0, 100.619,-48972.5,0, 0,0,0)
> >>> cons.stress # labelled as 'cons'
> Vector6(-50002.634879037054,-50002.541124107054,0, 0,0,100.14402045344963)
> >>> packing.shear() # calls Peri3dController and labels as 'biax'
> >>> packing.getStress() # this calls utils.stressTensorOfPeriodicCell()
> Matrix3(-38680.7,300.731,0, 300.731,-56123,0, 0,0,0)
> >>> biax.stress # labelled as 'biax'
> Vector6(-39449.714550942866,-57438.815800571429,0, 0,0,312.58387791336929)
>
> You see, the results are different. May this be due to 2d simulation? To use the current formula in 2d, I set:
> O.cell.hSize=utils.Matrix3(3,0,0, 0,3,0, 0,0,1). Here the size in the third direction is set to unity. I think this will work smoothly without modification within the code. Am I right?
>
> Ning
>

ceguo (hhh-guo) said : #4

Thanks Jan Stránský, that solved my question.

utils.stressTensorOfPeriodicCell(False) is always exact, so why is there
this option of assuming small strain?
Can't we remove this flag?

Bruno

Jan Stránský (honzik) said : #6

Hi Bruno,

ok, why not, if somebody wanted to implement other type than Cauchy
stress tensor, he/she can add more parameters..

Jan

Chareyre píše v St 15. 02. 2012 v 19:00 +0000:
> Question #187798 on Yade changed:
> https://answers.launchpad.net/yade/+question/187798
>
> Chareyre posted a new comment:
> utils.stressTensorOfPeriodicCell(False) is always exact, so why is there
> this option of assuming small strain?
> Can't we remove this flag?
>
> Bruno
>