Hydrostatic pressure and some issues on triaxial tests

Asked by janaka kumara

Dear all,

I would like to know below issues.
1. Why I don't get stress 0 at time=0 during isotropic consolidation (hydrostatic pressure) when I run peri3dController_triaxialCompression.py with the parameters as given below (It seems that there is 300kPa pressure at t=0, I don't know how this high pressure is applied at t=0).
2. Its also not clear why stresses in xx and yy directions change during axial compression (those should be constants).
3. How can I change/know strain rate? It seems the original script attached herewith doesn't have any parameter to change strain rate. Is that so?
4. Whats stressMask? How is stressMask related to goal?
5. How can I access to original data of the tests (here, I just see graphs but I prefer to take data and use them in my analysis)
6. Are there any publications used peri3dController_triaxialCompression.py script to test triaxial tests?

.........................................................................................................................................................................................................................................
# peri3dController_triaxialCompression.py
# script, that explains funcionality and input parameters of Peri3dController on the example of
# triaxial compression.
# Firstly, a hydrostatic preassure is applied, then a strain along z axis is increasing
# while x- and y- stress is constant
# The simulation is run on rotated cell to enable localization and strain softening
# (you can also try simulation with command sp.toSimulation() with no rotation,
# in this case there is almost no difference, but in script peri3dController_shear,
# the cell rotation has significant effect)

from yade import pack,plot,qt

# define material
O.materials.append(FrictMat())

# create periodic assembly of particles
initSize=.004
sp=pack.randomPeriPack(radius=.00023,initSize=Vector3(initSize,initSize,initSize),memoizeDb='/tmp/packDb.sqlite')
angle=0
rot=Matrix3(cos(angle),0,-sin(angle), 0,1,0, sin(angle),0,cos(angle))
sp.toSimulation(rot=rot)

# plotting
plot.live=False
plot.plots={'iter':('sx','sy','sz','syz','szx','sxy',),'iter_':('ex','ey','ez','eyz','ezx','exy',),'ez':('sz',)}
def plotAddData():
 plot.addData(
  iter=O.iter,iter_=O.iter,
  sx=p3d.stress[0],sy=p3d.stress[1],sz=p3d.stress[2],
  syz=p3d.stress[3],szx=p3d.stress[4],sxy=p3d.stress[5],
  ex=p3d.strain[0],ey=p3d.strain[1],ez=p3d.strain[2],
  eyz=p3d.strain[3],ezx=p3d.strain[4],exy=p3d.strain[5],
 )

O.dt=utils.PWaveTimeStep()/2

# define the first part of simulation, hydrostatic compression
O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_Dem3DofGeom()],
  [Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_Dem3DofGeom_FrictPhys_CundallStrack()]),
 NewtonIntegrator(),
 Peri3dController( goal=(-1e5,-1e5,-1e5, 0,0,0), # Vector6 of prescribed final values
       stressMask=0b000111,
       nSteps=500,
       doneHook='print "Hydrostatic load reached."; O.pause()',
       youngEstimation=.09e9, # needed, when only nonzero prescribed values are stress
       maxStrain=.5,
       label='p3d'
       ),
 PyRunner(command='plotAddData()',iterPeriod=1),
]
O.run(); O.wait()

# second part, z-axis straining and constant transversal stress
O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_Dem3DofGeom()],
  [Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_Dem3DofGeom_FrictPhys_CundallStrack()]),
 NewtonIntegrator(),
 Peri3dController( goal=(-1e5,-1e5,-4e-1, 0,0,0), # Vector6 of prescribed final values
       stressMask=0b000011,
       nSteps=1000,
       xxPath=[(0,1),(1,1)], # the first (time) zero defines the initial value of stress considered nonzero
       yyPath=[(0,1),(1,1)],
       doneHook='print "Simulation with Peri3dController finished."; O.pause()',
       maxStrain=.5,
       label='p3d',
       strain=p3d.strain, # continue from value reached in previous part
       stressIdeal=Vector6(-1e5,-1e5,0, 0,0,0), # continue from value reached in previous part
       ),
 PyRunner(command='plotAddData()',iterPeriod=1),
]
O.run();O.wait()
plot.plot()
...........................................................................................................................................................................................................................................

Thank you very much.

Regards,
Janaka

Question information

Language:
English Edit question
Status:
Expired
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 Janaka,

>1. Why I don't get stress 0 at time=0 during isotropic consolidation (hydrostatic pressure) when I run peri3dController_triaxialCompression.py with the parameters as given below (It seems that there is 300kPa pressure at t=0, I don't know how this high pressure is applied at t=0).
The pressure is probably because of residual stress from packing phase of simulation (the initial packing is not "stress-free"), maybe someone else could confirm this?

>2. Its also not clear why stresses in xx and yy directions change during axial compression (those should be constants).
In the case of periodic cell, we cant (or at least I dont know about it) prescribe stress directly, so we estimate deformation such that the stress is as close as possible to the prescribe value. The smaller is the time step, the smaller should be the difference between actual and prescribed stress.

>3. How can I change/know strain rate? It seems the original script attached herewith doesn't have any parameter to change strain rate. Is that so?
in O.engines there is Peri3dController(....,label='p3d'), so you can use this label to acces Peri3dController values, i.e.
strainRate = p3d.strainRate
The strain rate is updated automatically to satisfy prescribed goal values.

>4. Whats stressMask? How is stressMask related to goal?
Stress mask determines in which components is prescribed deformation and in which components is prescribed stress (although not directly as mentioned above). 0b000011 means prescribed stress in xx and yy direction and prescribed strain in all other directions. The format is 0b(txy)(tzx)(tyz)(szz)(syy)(syy) where instead of (..) you write 0 (for prescribed strain) or 1 (for prescribed stress). Google python binary format for more details if you are interested.. Goal is prescribed value at the end of simulation, corresponding to stress or strain declared in stressMask

>5. How can I access to original data of the tests (here, I just see graphs but I prefer to take data and use them in my analysis)
The data are stored in plot.data

>6. Are there any publications used peri3dController_triaxialCompression.py script to test triaxial tests?
I wrote this example script to demonstrate basic usage of Pari3dController, but I think there is no serious publication using this specific file..

Hopefylly at least some of my explanations are understandable :-)
Regards
Jan

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

Hi Janaka,
>> 2. Its also not clear why stresses in xx and yy directions change during axial compression (those should be constants).
> In the case of periodic cell, we cant (or at least I dont know about it) prescribe stress directly, so we estimate deformation such that the stress is as close as possible to the prescribe value. The smaller is the time step, the smaller should be the difference between actual and prescribed stress.
The stress is imposed directly in engine PeriTriaxController (with
isDynamic=True).
The two engines are controlling stress differently, if one is not well
suited for your application you may try the other. See test scripts
periodic-triax.py (in last revision), or periodic-triax-settingHsize.py
for more complicated shape.

PeriTriaxController with isDynamic=False will most probably have the
same problems as Peri3dController. PeriTriaxController is well tested
with the CundallStrack law and it should also work with other laws,
there is no published results yet, unfortunately.

On your other questions, Jan's answers apply whatever the engine (with
the exception of stressMask, see documentation and example scripts).

Bruno

Revision history for this message
janaka kumara (janaka-eng) said :
#3

Dear Honzik,

Thank you very much for your lengthy explanations. They worked well for me.

>5. How can I access to original data of the tests (here, I just see graphs but I prefer to take data and use them in my analysis)
The data are stored in plot.data
I have also read the same details on the documents but still was unable to find plot.data. I use ubuntu. Could you say exactly how to find plot.data?

There is a file named "WallStresses" in home directory. What's WallStresses? I think that also store some data? Is that right? If so, what kind of data are they?

As you explained strain is controlled in Yade. Then, what's stressIdeal=Vector6 and what does that control?

Thank you,

Regards,
Janaka

PhD candidate,
Geotechnical Laboratory,
Yokohama National University,
Japan

Revision history for this message
janaka kumara (janaka-eng) said :
#4

Dear Bruno,

Thank you for your details.

I will try with periodic-triax.py and periodic-triax-settingHsize.py too.

Regards,
Janaka

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

Dear Janaka,

>>5. How can I access to original data of the tests (here, I just see graphs but I prefer to take data and use them in my analysis)
>The data are stored in plot.data
>I have also read the same details on the documents but still was unable to find plot.data. I use ubuntu. Could you say exactly how to find plot.data?
according to specific functions used in peri3dController_triaxialCompression.py:

def plotAddData():
plot.addData(
iter=O.iter,iter_=O.iter,
sx=p3d.stress[0],sy=p3d.stress[1],sz=p3d.stress[2],
syz=p3d.stress[3],szx=p3d.stress[4],sxy=p3d.stress[5],
ex=p3d.strain[0],ey=p3d.strain[1],ez=p3d.strain[2],
eyz=p3d.strain[3],ezx=p3d.strain[4],exy=p3d.strain[5],
)

after the simulation, you can acces plot.data. It is a python dictionary, with keys 'sx', 'sy' etc (defined in plotAddData function). So for example to get saved data of number of iteration and stress xx, respectively:

iters = plot.data['iter']
stressXX = plot.data['sx']

iters and stresses are now python lists of values, so for example [10,20,30,40,50].

>As you explained strain is controlled in Yade. Then, what's
>stressIdeal=Vector6 and what does that control?
stressIdeal are ideal (prescribed) components of stress at current step (as I mentioned, the actual stress is not directly controlled and can differ a bit from the actual one). From the difference of actual and ideal stress and its signs, the strain rate is increased or decreased to make the difference smaller.

regards
Jan

Revision history for this message
janaka kumara (janaka-eng) said :
#6

Dear Bruno,

Could you please tell me how to get periodic-triax.py (in last revision) and periodic-triax-settingHsize.py scripts? Actually I have periodic-triax.py but I dont know whether thats the one in last revision. I use yade 0.60.

Thank you.

Regards,
Janaka

Revision history for this message
Anton Gladky (gladky-anton) said :
#7
Revision history for this message
Anton Gladky (gladky-anton) said :
#8
Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#9

You need the "snapshot" package yade-daily (development version,
https://launchpad.net/~yade-pkg/+archive/snapshots) if that script is
not in 0.6.
You will also find up-to-date scripts if you download the sources with
bazaar (https://www.yade-dem.org/doc/installation.html).

Revision history for this message
janaka kumara (janaka-eng) said :
#10

Dear all,

Thank you Gladky and Chareyre for the previous comments.

I found documents to check definitions of stressMask in the type of 0bxxxxxx (e.g. 0b000111). However, I cannot find documents to check definitions of stressMask in the type of a digital digit (i.e. stressMask = x), e.g. stressMask=3 in periodic-triax.py (last revision) or stressMask = 7 in periodic-triax-settingHsize.py (here, its more complicated to understand as only three parameters are in goal).

Any helps are welcome.

Thank you.

Janaka

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

The stress mask is only one digit. Even 0b000111. It is in binary format, so binary 0b000111 = decimal 7. see e.g. these discussions
http://www.gossamer-threads.com/lists/python/dev/492581
http://stackoverflow.com/questions/1476/how-do-you-express-binary-literals-in-python
for more details

regards
Jan

______________________________________________________________
> Od: "janaka kumara" <email address hidden>
> Komu: <email address hidden>
> Datum: 04.07.2011 04:21
> Předmět: Re: [Yade-users] [Question #163253]: Hydrostatic pressure and someissues ontriaxial tests
>
>Question #163253 on Yade changed:
>https://answers.launchpad.net/yade/+question/163253
>
> Status: Answered => Open
>
>janaka kumara is still having a problem:
>Dear all,
>
>Thank you Gladky and Chareyre for the previous comments.
>
>I found documents to check definitions of stressMask in the type of
>0bxxxxxx (e.g. 0b000111). However, I cannot find documents to check
>definitions of stressMask in the type of a digital digit (i.e.
>stressMask = x), e.g. stressMask=3 in periodic-triax.py (last revision)
>or stressMask = 7 in periodic-triax-settingHsize.py (here, its more
>complicated to understand as only three parameters are in goal).
>
>Any helps are welcome.
>
>Thank you.
>
>Janaka
>
>--
>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
Bruno Chareyre (bruno-chareyre) said :
#12

You need to see mask as the integer whose binary representation corresponds
to bools for x, y, and z.
Simpler with examples:

control stress on xyz: 111 -> 7

x alone: 001 -> 1
xy: 011 -> 3
z: 100 -> 4
etc.

Revision history for this message
janaka kumara (janaka-eng) said :
#13

Thanks Chareyre, that solved my question.

Revision history for this message
janaka kumara (janaka-eng) said :
#14

Dear all,

Could you please explain how to reduce stress at initial time (as Jan guessed, residual stress from packing phase of simulation is quite high). Since I work (I want to work) with relatively low hydrostatic pressure (about 100kPa) and the pressure by residual stress from packing (as I understood with Jan' comments) is about 250kPa (I checked with default parameters of goals and also with changing them too but always got them around 250kPa), that default pressure should be reduced almost to 0. In practice, at time =0, pressure should be 0 (however, there might be some small pressure due to initial packing), but to me, this 250kPa pressure is too high.

Any idea to reduce that initial pressure to 0 (at least closed to 0)? your comments are appreciated.

Regards,
Janaka

Revision history for this message
Launchpad Janitor (janitor) said :
#15

This question was expired because it remained in the 'Open' state without activity for the last 15 days.