period triaxial test under cyclic shear load

Asked by jsonscript on 2020-02-25

Hello everyone:

       Triaxial test, periodic boundary, undrained condition.
       The consolidation stress is 100kpa, cyclic shear load is 25kpa.
        I would like to ask why under cyclic shear load, the vertical effective stress(stress[2,2]) remains almost constant (about 100kpa) instead of decreasing. Is my cyclic shear load being added in the wrong way? Here's part of my code. I hope to get your help.

############################################
### generate particles in the packing ###
############################################
from yade import plot
from yade import pack,qt

O.periodic=True
O.cell.setBox(.016,.016,.016)
radius=0.4e-3
O.materials.append(FrictMat(young=70e9,poisson=0.3,frictionAngle=0.13,density=2650*1e4,label='spheres'))
sp=pack.SpherePack()
sp.makeCloud(minCorner=(0,0,0),maxCorner=(.016,.016,.016),psdSizes=[0.00045,0.000525,0.0006,0.000675,0.00075,0.000825,0.0009],psdCumm=[0,0.167,.333,.5,.667,0.833,1],num=10000,distributeMass=True,periodic=True)
O.bodies.append([utils.sphere(s[0],s[1]) for s in sp])
V_sphere=utils.getSpheresVolume()#Compute the total volume of spheres in the simulation, mask parameter is considered
V_cell=O.cell.hSize[0,0] * O.cell.hSize[1,1] * O.cell.hSize[2,2]
print 'void ratio:',(V_cell-V_sphere)/V_sphere,'dt:',utils.PWaveTimeStep()
O.save('gen-ball.xml')
qt.View()

############################################
### consolidate the packing to reach the required confining pressure ###
############################################
from yade import plot,qt
from yade.pack import *
O=Omega()
O.load('gen-ball.xml')
radius=0.4e-3
for b in O.bodies:
  b.mat.frictionAngle=0.119

V_sphere=utils.getSpheresVolume() #the volume of the sphere
O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb()],verletDist=.05*radius),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom()],
  [Ip2_FrictMat_FrictMat_MindlinPhys()],
  [Law2_ScGeom_MindlinPhys_Mindlin(includeMoment=False)]
 ),
 PeriTriaxController(dynCell=True,maxUnbalanced=2e-3,relStressTol=2e-5,goal=[-1e5,-1e5,-1e5],stressMask=7,globUpdate=5,maxStrainRate=[0.1,0.1,0.1],doneHook='triaxDone()',label='triax'),
 NewtonIntegrator(damping=.2),
]

def triaxDone():
 print 'Here we are: stress',triax.stress,'strain',triax.strain,'stiffness',triax.stiff
 O.pause()

O.dt=0.4*utils.PWaveTimeStep()
O.run()
O.wait()
O.save('Phase1.xml.bz2')

#######################################
### cyclic shear ###"
#######################################
from yade.pack import *
O=Omega()
O.load('Phase1.xml.bz2')
cycle=0
g0=O.cell.hSize[0,2]*100.0/O.cell.hSize[2,2]

O.dt=utils.PWaveTimeStep()
O.cell.velGrad=Matrix3(0,0,-0.01,0,0,0,0,0,0)
time=0
count=0
count1=0
zero=1
stop=0
count2=0
while 1:
  #O.run(time*10,True)
  O.run(100,True)
  count=count+1
  count1=count1+1
  gamma=O.cell.hSize[0,1]*100/O.cell.hSize[1,1]-g0
  if count==32:
    count=0

  stress=utils.getStress()
  sigmazx=stress[0,2]/-1000
  sigmazz=stress[2,2]/1000.0
  if sigmazx>25:
    #saveDat()
    # defData(cycle)
    count=0
    count1=0
    count2=count2+1
    O.cell.velGrad=Matrix3(0,0,0.01,0,0,0,0,0,0)

  if sigmazx<-25:
    count=0
    count1=0
    count2=count2+1
    O.cell.velGrad=Matrix3(0,0,-0.01,0,0,0,0,0,0)

  print 'Speed:',O.cell.velGrad[0,2],'time:',O.realtime,'cycle:',cycle,'szx:',sigmazx,'stop:',stop
  if count2==2:
    cycle=cycle+1
    count2=0
  if count1==4:
    defData(cycle)
    count1=0
  if gamma>2:
    O.save('gamma3.xml.bz2')
    break

Thank you very much!

Question information

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

Hello,

> I would like to ask why under cyclic shear load, the vertical effective stress(stress[2,2]) remains almost constant (about 100kpa) instead of decreasing.

I have almost no experience with simulation and experiments of this, but why should the vertical stress decrease?
E.g. in the case of elastic isotropic material, shear deformation would have no influence on normal stress..

cheers
Jan

Robert Caulk (rcaulk) said : #3

Fluid coupling is not simulated in Yade unless you add a separate engine designed to do so [1].

[1]http://people.3sr-grenoble.fr/users/bchareyre/yade/public/yade.wrapper.html#yade.wrapper.FlowEngine

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

> Under the action of cyclic shear load, the effective stress gradually decreases as the number of cycles increases.

this is experiment, right?

> If the material is anisotropic, will there be an effect on the effective stress?

I was talking about **elastic** material, just as an example how to demonstrate that the decrease of normal stress due to shear strain is not "automatic".
Yes, for **elastic** anisotropic material, there could (depending on the type of anisotropy and orientation) be effect of shear strain on normal stress.
The granular material may or may not behave like elastic, depending on many factors, but usually at leas friction makes the material not elastic.

> In addition, I would like to ask whether pore pressure is considered in the periodic undrained triaxial shear test?

Not directly, but I remember some publications (e.g. [2,3], seems to be a similar topic, they are using Yade) considering water pressure somehow (did not read it really in detail)

cheers
Jan

[2] E. L. Martin, C. Thornton, S. Utili, "Micromechanical investigation of liquefaction of granular media by cyclic 3D DEM tests", Géotechnique, 2019
[3] https://www.icevirtuallibrary.com/doi/abs/10.1680/jgeot.18.P.267

> Under the action of cyclic shear load, the effective stress gradually decreases as the number of cycles increases.

That statement is generally wrong in both experiments and simulations. Let you do cycles on a random sand and in the vast majority of the cases what you describe will not happen. The question starts on the wrong foot IMO.

> they are using Yade) considering water pressure somehow

I was afraid someone would mention that at some point. :)
Not that these papers are bad, but the discussion is already too confused.
What Martin et al. (and many others for ages) did is that they simulated dry materials, nothing else. They did not consider pore pressure "somehow", they simply postulated that mechanical response in dry conditions (simulated) could be extrapolated to saturated conditions (not simulated).

B

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

@Bruno: thanks for clarification, let my comment "did not read it really in detail" be to my apology :-)

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

Hello,

> How to apply the shear stress

as you proposed, change in shear strain **should** result in a change of shear stress

> Is it possible to use O.cell.velGrad=Matrix3(0,0,-0.01,0,0,0,0,0,0) to control the shear strain rate and periodically change the direction to produce cyclic shear stress?

yes (see above)

> This process does not change the engine's goal and stressmask, is it for this reason that the effective stress keeps unchanged at 100kpa during the shear process?

yes

> What is the solution?

this is the intended behavior, so please specify what you want to solve

> In materials we learn that pure shear volume does not change.

yes, only normal components of deformation has influence on volume

> How to control the volume of the sample to remain unchanged in the periodic boundary? I used the peritriaxcontroller engine to simulate the undrained triaxial test.
> If the shear stress is applied to the zx surface, how can the volume be controlled unchanged?
> Is there any need for control here?

you have 6 independent components of strains / stresses. For each, either strain or stress is prescribed. Only normal components has influence on volume. To control volume, you can
- prescribe all 3 normal strains (stressMask=0) to fully control strain(rate), than it is easy to prescribe it to preserve volume (sum of strain increments has to be zero)
- prescribe all 3 normal stresses (stressMask=7) -> than you have no control over volume, volume is just a result
- prescribe some stresses and at least one strain - then according to actual volume you can control the prescribed strain(s) to preserve volume (or to minimize the difference between actual and desired volume)

> By the way ,Sand is not elastic material,

well, it depends pretty much on definition, model, conditions, load, purpose of modelling..........
I would not be that decisive in general.

> granular material has shear volume deformation, if the volume remains constant, so theoretically the effective stress should change.

reality is the worst enemy of theory :-) illustration:
> Under the action of cyclic shear load, the effective stress gradually decreases as the number of cycles increases.
> the effective stress should change. -> indeed, it should increase, "In general, the denser the soil, the greater the amount of volume expansion under shear." [2]

on one hand you expect decrease of stress, on the other hand granular matter could expand (increasing normal stress at constant volume), so stress can do (both theoretically and in reality) anything :-) depending on many factors..

cheers
Jan

[4] https://en.wikipedia.org/wiki/Dilatancy_(granular_material)

> Am I right?

Yes indeed. If you prescribe the strain with rate no volume change the volume will not change.
Here "undrained" simply means trace(velGrad)=0.
Bruno

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

> just stressMask =0 satisfies the requirements). Am I right?

what about triax.goal?

Chareyre (bruno-chareyre-9) said : #13

You are imposing 9 components, not 1:
> O.cell.velGrad=Matrix3(0,0,-0.01,0,0,0,0,0,0)

Bruno

Le ven. 28 févr. 2020 20:22, yangsiyuan <
<email address hidden>> a écrit :

> Question #688979 on Yade changed:
> https://answers.launchpad.net/yade/+question/688979
>
> Status: Answered => Open
>
> yangsiyuan is still having a problem:
> The strain rate I'm applying is the shear strain rate, not the normal
> strain rate. It points to the X-axis inside the zx plane.
> I can change direction periodically
> The effective stress is calculated directly by getstress ().
> Stressmask =0 is adjusted as a strain control, which can reflect the
> change of effective stress during the shear phase. And the effective stress
> will no longer maintain a constant value.
> Because the load applied during the shear phase is cyclic shear strain
> rate rather normal strain rate. This can be done through o.c.velgrad.
> Therefore, there is no need to set triaxial.goal during the shear phase.
> By the way, what happens if you don't set triax.goal, is there any
> influence on the effective stress.
>
> --
> You received this question notification because your team yade-users 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
>
>
>

By this you simply set velgrad[0,0]=velgrad[1,1]=velgrad[2,2]=0, it is redundant with setting velGrad.
For keeping constant volume you don't need triax engine at all..
Set triax.dead=True and inverse the sign of velGrad periodically based on your stress condition, it should be enough.
B