balls passing through wall in triaxial test

Asked by Yuri Bezmenov

Hi,
I am simulating Triaxial Test using TriaxialStressController.
I noticed some particles flying out of the boundary in the simulation. i.e. all particles should be within the boundary but some particles are flying beyond the walls.

here is my code

from yade import pack, qt, plot, export
compFricDegree=30 # contact friction during the confining phase
finalFricDegree = 30 # contact friction during the deviatoric loading
rate = -0.001 # loading rate (strain rate)
stabilityThreshold = 0.01 # we test unbalancedForce against this value in different loops
young = 5e6 # contact stiffness
mn, mx = Vector3(0, 0, 0), Vector3(1, 1, 1)
O.materials.append(FrictMat(young=young, poisson=0.5, frictionAngle=radians(compFricDegree), density=2600, label='spheres'))
O.materials.append(FrictMat(young=young, poisson=0.5, frictionAngle=0, density=0, label='walls'))
walls = aabbWalls([mn, mx], thickness=0, material='walls')
wallIds = O.bodies.append(walls)
# psdSizes, psdCumm = [75e-6, 150e-6, 212e-6, 300e-6, 425e-6, 600e-6, 1000e-6, 2000e-6, 3350e-6, 4750e-6], [0, 0.14, 0.22, 0.39, 0.48, 0.62, 0.72, 0.85, 0.97, 1]
sp = pack.SpherePack()
sp.makeCloud(mn, mx, rMean=.07, rRelFuzz=.03, periodic=True)
# sp.makeCloud(mn, mx, psdSizes=psdSizes, psdCumm=psdCumm, distributeMass=True, num=20000)
O.bodies.append([sphere(center, rad, material='spheres') for center, rad in sp])

triax = TriaxialStressController(
 thickness=0,
 stressMask=7,
 internalCompaction=False,
)

O.engines = [
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(), Bo1_Box_Aabb()]),
 InteractionLoop([Ig2_Sphere_Sphere_ScGeom(), Ig2_Box_Sphere_ScGeom()], [Ip2_FrictMat_FrictMat_FrictPhys()], [Law2_ScGeom_FrictPhys_CundallStrack()]),
 GlobalStiffnessTimeStepper(active=1, timeStepUpdateInterval=100, timestepSafetyCoefficient=0.8),
 triax,
 NewtonIntegrator(damping=0.2),
 # VTKRecorder(fileName='/home/files/RigidTriax/vtkFiles', recorders=['all'], iterPeriod=500, label="visul", dead=True),
 PyRunner(command='vtk()', iterPeriod=100, label="visul", dead=True),
 PyRunner(command='addPlotData()', iterPeriod=100, label="graph", dead=True),
]

def addPlotData():
 plot.addData(
  e11=-triax.strain[0], e22=-triax.strain[1], e33=-triax.strain[2],
  ev=-triax.volumetricStrain,
  s11=-triax.stress(triax.wall_right_id)[0],
  s22=-triax.stress(triax.wall_top_id)[1],
  s33=-triax.stress(triax.wall_front_id)[2],
  i=O.iter,
  n=triax.porosity
  # Etot=O.energy.total(),
  # **O.energy
 )

O.run(1000,True)

vtkExporter = export.VTKExporter('/home/files/RigidTriax/test')
plot.plots = {
        'i':('e11','e22','e33'),
        'i ':('s11','s22','s33'),
        'e22':('s11','s22','s33'),
   ' i ': ('n','ev')
        # energy plot
        # ' i ': (O.energy.keys, None, 'Etot', 'ev'),
}

plot.plot()

def vtk():
 vtkExporter.exportSpheres()
 vtkExporter.exportInteractions()
 vtkExporter.exportFacets()

### APPLYING CONFINING PRESSURE ###
triax.goal1 = triax.goal2 = triax.goal3 = -100000
while 1:
 O.run(1000, True)
 unb=unbalancedForce()
 print ('unbalanced force:',unb,' mean stress: ',triax.meanStress)
 if unb<stabilityThreshold and abs(-100000-triax.meanStress)/100000<0.0005:
  break
# O.save('confinedState.yade.gz')
print ("### Isotropic state reached ###")

triax.depth0=triax.depth
triax.height0=triax.height
triax.width0=triax.width
O.step()

visul.dead=False
graph.dead=False

### DEVIATORIC LOADING ###
# triax.internalCompaction=False
setContactFriction(radians(finalFricDegree))
triax.stressMask = 5
triax.goal2=rate
triax.goal1=-100000
triax.goal3=-100000
while -triax.strain[1] <0.15:
 O.run(10000,1) ######change to 10000
 print ("10000 step foreward Strain=",-triax.strain[1]*100,"%")
print ("### deviatoric loading finished ###")
plot.saveDataTxt('triaxial.txt')

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Jan Stránský
Solved:
Last query:
Last reply:
Revision history for this message
Best Jan Stránský (honzik) said :
#1

Hello,

> I noticed some particles flying out of the boundary

in which phase of the simulation?

> young = 5e6 # contact stiffness
> triax.goal1 = triax.goal2 = triax.goal3 = -100000
> Law2_ScGeom_FrictPhys_CundallStrack()

increase stiffness / decrease load.
If you are sure with the values (e.g. they correspond to the experimental values) use a different contact model.

Cheers
Jan

Revision history for this message
Yuri Bezmenov (yuribezmenov) said :
#2

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