# I don not understand how to simulate triaxial-test in Yade.

Asked by Rong Zhao on 2019-08-27

Hello, everybody!

Although Yade provides a tutorial of Periodic triaxial test, I still not understand the role of PeriTriaxController() in every step of DEM simulation.

By documentation, I understand the role of ForceResetter() is to reset force, InsertionSortCollider([Bo1_Sphere_Aabb()]) to create potential interactions, InteractionLoop([Ig2_Sphere_Sphere_ScGeom()], [Ip2_FrictMat_FrictMat_FrictPhys()][Law2_ScGeom_FrictPhys_CundallStrack()]) to make exact collision detection, compute interaction properties and determine force, which coresponds to the sequence of simulation loop respectively.

So could you give me the role of played by PeriTriaxController() in the simulation loop. And what operation PeriTriaxController() in mumerical triaxial test does corespond to in a actual triaxial test?

Here is the codes:
from __future__ import print_function
sigmaIso=-1e5

#import matplotlib
#matplotlib.use('Agg')

# generate loose packing
from yade import pack, qt, plot

O.periodic=True
sp=pack.SpherePack()
if 0:
## uniform distribution
sp.makeCloud((0,0,0),(2,2,2),rMean=.1,rRelFuzz=.3,periodic=True)
else:
## create packing from clumps
# configuration of one clump
c1=pack.SpherePack([((0,0,0),.03333),((.03,0,0),.017),((0,.03,0),.017)])
# make cloud using the configuration c1 (there could c2, c3, ...; selection between them would be random)
sp.makeClumpCloud((0,0,0),(2,2,2),[c1],periodic=True,num=500)

# setup periodic boundary, insert the packing
sp.toSimulation()

O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_CundallStrack()]
),
PeriTriaxController(label='triax',
# specify target values and whether they are strains or stresses
# type of servo-control
dynCell=True,maxStrainRate=(10,10,10),
# wait until the unbalanced force goes below this value
maxUnbalanced=.1,relStressTol=1e-3,
# call this function when goal is reached and the packing is stable
doneHook='compactionFinished()'
),
NewtonIntegrator(damping=.2),
]
O.dt=.5*PWaveTimeStep()

sxx=triax.stress[0],syy=triax.stress[1],szz=triax.stress[2],
exx=triax.strain[0],eyy=triax.strain[1],ezz=triax.strain[2],
# save all available energy data
Etot=O.energy.total(),**O.energy
)

# enable energy tracking in the code
O.trackEnergy=True

# define what to plot
plot.plots={'i':('unbalanced',),'i ':('sxx','syy','szz'),' i':('exx','eyy','ezz'),
# energy plot
' i ':(O.energy.keys,None,'Etot'),
}
# show the plot
plot.plot()

def compactionFinished():
# set the current cell configuration to be the reference one
O.cell.trsf=Matrix3.Identity
# change control type: keep constant confinement in x,y, 20% compression in z
triax.goal=(sigmaIso,sigmaIso,-.2)
# allow faster deformation along x,y to better maintain stresses
triax.maxStrainRate=(1.,1.,.1)
# next time, call triaxFinished instead of compactionFinished
triax.doneHook='triaxFinished()'
# do not wait for stabilization before calling triaxFinished
triax.maxUnbalanced=10

def triaxFinished():
print('Finished')
O.pause()

Thanks!

## Question information

Language:
English Edit question
Status:
Solved
For:
Assignee:
No assignee Edit question
Solved by:
Bruno Chareyre
Solved:
2019-11-06
Last query:
2019-11-06
2019-09-24
 Bruno Chareyre (bruno-chareyre) said on 2019-08-27: #1

Hi Rong,
PeriTriaxController prescribes the deformation of space in order to satisfy user-defined targets in terms of stress or strain.
Obviously, it is equivalent to imposing strain or stress in an actual test. :)
Regards
Bruno

 Rong Zhao (zhaorong) said on 2019-09-23: #2

Thanks for your reply, Bruno Chareyre! I almost understand the code of Periodic Triaxial Test in the tutorial. But there is something I don't understand. When the function of compactionFinished() being called, this virtually is to make loading, but why is triax.maxUnbalanced is specified to 10 after calling the function of triaxFinished()?

 Bruno Chareyre (bruno-chareyre) said on 2019-09-24: #3

I would guess there is an increase in unbalanced forces when switching from static to deforming regime, but I'm not sure what you are asking.
B

 Rong Zhao (zhaorong) said on 2019-11-06: #4

Thanks Bruno Chareyre, that solved my question.