← Back to team overview

yade-users team mailing list archive

[Question #264456]: Simple compression on an sphere assembly

 

New question #264456 on Yade:
https://answers.launchpad.net/yade/+question/264456

Hello,

I try to create a spherical grain and watch his simple compressive failure modes depending on the mesh, size and cohesion between grains affected.
I managed to create this little piece of code that allows me to create a sphere made up of smaller sphere, but when I run the simulation with high Young's modules, the ball explodes, countered for this I must impose strong cohesion and ruptures observed are not consistent. I also tested to reduce the time step but it has not worked.

Would anyone have a solution?

Below is my entire code.

Thank you in advance.

Best Regards

from yade import pack
from math import *
from yade import plot
from yade import qt

vitesse=0.01
cohN=100e3
cohT=70e3
E=50e7
nu=0.3
d=2310
phi=35
rayon_s=0.005
rayon_g=0.05
rayon_boite=0.050
fin_calcul=1000

O.materials.append(CohFrictMat(young=E,poisson=nu,density=d,frictionAngle=radians(phi),normalCohesion=cohN,shearCohesion=cohT,label='sol'))
O.materials.append(CohFrictMat(young=10000,poisson=0.5,density=3000,frictionAngle=radians(35),normalCohesion=0,shearCohesion=0,label='walls'))

sp=pack.regularHexa(yade._packPredicates.inSphere(center=(0,0,0),radius=rayon_g),gap=rayon_s/1,radius=rayon_s,material='sol') 

mn,mx=(-rayon_boite*2,-rayon_boite,-rayon_boite*2),(rayon_boite*2,rayon_boite,rayon_boite*2) # minimum and maximum vector of the box around the spheres' cloud
walls=utils.aabbWalls([mn,mx],thickness=0,material='walls') # define material for walls
wallIds=O.bodies.append(walls) # call walls into simulation

O.bodies.append(sp)

O.engines=[
    ForceResetter(),
    InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
    InteractionLoop(
        [Ig2_Sphere_Sphere_ScGeom6D(),Ig2_Box_Sphere_ScGeom6D()], #to handle CohFrictPhys we need SCGeom6D between spheres
        [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=False),Ip2_FrictMat_FrictMat_FrictPhys()], 
        [Law2_ScGeom6D_CohFrictPhys_CohesionMoment()] # law2 for CohFrictPhys and FrictPhys 
        ),
    TranslationEngine(
    translationAxis=(0,-1,0),
    ids=[3],
    label='tl',
    velocity=vitesse
    ),
    NewtonIntegrator(damping=0.7),
    VTKRecorder(iterPeriod=1000,fileName='/home/dgerard/YADE/VTK/boule-',recorders=['spheres','facets']),
    PyRunner(command='sauvegarde()',iterPeriod=fin_calcul)
]


O.dt=0.01*utils.PWaveTimeStep()

qt.Controller()
qt.View()

def sauvegarde():
	num = 0
	for i in O.interactions:
		if i.phys.cohesionBroken:
			num+=1
	nbcontact=num
	plot.saveDataTxt('ecrasementgrain.txt')
	plot.addData(i=O.iter,Fs=O.forces.f(3)[1],Fi=O.forces.f(2)[1],nombre=nbcontact)

plot.plots={'i':('Fs','Fi','nombre')}
plot.plot()


O.saveTmp()

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.