New question #292911 on Yade:
https://answers.launchpad.net/yade/+question/292911
Hello,
I am trying to model crushing of aggregates of particles and look at the
resulting fragment size distribution. The model consists of an assembly of
spheres (each sphere is composed of constituent smaller particles) between the
two plates. The top plate is subjected to a constant force and a velocity in
lateral direction to induce shear.
As the simulation progresses, the cohesive bonds between the different
particles start breaking resulting into individual particles and fragments of
particles. How can I measure the number of such individual particles, fragments
and the number of particles in each fragment ?
I want to do this to obtain the particle size distribution of the crushed
sample.
Here is the minimal working example script:
from yade import pack
#############################################################################
# Set up run
#############################################################################
run_name="PeriodicCohesive_MWE"
data_root_dir="."
#############################################################################
# Materials
#############################################################################
plate_material=FrictMat(
young=200e9
,poisson=0.3
,density=8000.
,frictionAngle=radians(30)
,label='plate_mat')
O.materials.append(plate_material)
sample_material=CohFrictMat(
young=4e9
,poisson=0.25
,density=1400
,frictionAngle=radians(30)
,normalCohesion=1e8*1.2
,shearCohesion=.4e8*1.2
,momentRotationLaw=True
,label='sample_mat')
O.materials.append(sample_material)
#############################################################################
# Component dimensions and operating condition
#############################################################################
# Granular material dimension
sample_diameter=2e-4
sample_radius=sample_diameter/2.0
# Sub-particle dimension
particle_diameter=74.e-6
particle_radius=particle_diameter/2.
#############################################################################
# grinding plate dimension
#############################################################################
rotvel=2./3.*pi*(1.5+0.5)*.254
#############################################################################
# Periodic Geometry
#############################################################################
# Set up periodic boundary conditions
O.periodic=True
xExt=4*sample_diameter
yExt=3.*sample_diameter*2 #to block the periodicity in y direction
zExt=xExt
xLim=xExt
yLim=yExt/4
zLim=zExt
O.cell.hSize=Matrix3(
xExt, 0, 0,
0, yExt, 0,
0, 0, zExt)
length=xExt
height=yExt
width=zExt
# Top and bottom plate thickness
thickness=0.1*height
bottomBoxes = []
for ix in (0,1,2):
for iz in (0,1,2):
bottomBoxes.append(box( # create 3x3 boxes with 1/3 cell size
center=(xExt/6.*(1+2*ix),yLim - thickness/2.0,zExt/6.*(1+2*iz))
,extents=(xExt/6.,thickness/2.0,zExt/6.)
,wire=False
,material='plate_mat'
))
bottom_id,bottom_ids = O.bodies.appendClumped(bottomBoxes) # bottom_id is the
clump id,
O.bodies[bottom_id].state.blockedDOFs='xyzXYZ'
#############################################################################
# Particle Packing
#############################################################################
min_corner= (0,yLim,0)
max_corner= (xLim, yExt-yLim, zLim)
sp=pack.SpherePack()
sp.makeCloud( min_corner,max_corner, rMean=sample_radius, periodic=False)
print "Generated ",len(sp)," aggregates"
###########################################
# Sample
###########################################
for s in sp:
sphere=pack.inSphere((s[0][0],s[0][1],s[0][2]),s[1])
sp1=pack.randomDensePack(
sphere
,spheresInCell=2000
,radius=particle_radius
,memoizeDb='/tmp/triaxPackCache.sqlite'
,returnSpherePack=True
)
sp1.toSimulation(material='sample_mat',color=(0.9,0.8,0.6))
print 'Generated ',len(sp1),' particles'
Gl1_Sphere(stripes=True)
#########
# Top
#########
topBoxes = []
for ix in (0,1,2):
for iz in (0,1,2):
topBoxes.append(box( # create 3x3 boxes with 1/3 cell size
center=(xExt/6.*(1+2*ix),yExt - yLim + thickness/2.0,zExt/6.*(1+2*iz))
,extents=(xExt/6.,thickness/2.0,zExt/6.)
,wire=False
,material='plate_mat'
))
top_id,top_ids = O.bodies.appendClumped(topBoxes) # top_id is the clump id,
O.bodies[top_id].state.blockedDOFs='xzXYZ'
plate_downforce=-0.036
O.forces.addF(top_id,(0,plate_downforce,0),permanent=True)
O.bodies[top_id].state.vel[0]= rotvel
#############################################################################
# Run the simulation
#############################################################################
O.dt=0.5*PWaveTimeStep()
O.engines=[
ForceResetter(),
InsertionSortCollider([
Bo1_Sphere_Aabb()
,Bo1_Box_Aabb()
], allowBiggerThanPeriod=True
),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom6D()
,Ig2_Box_Sphere_ScGeom6D()
],
[Ip2_FrictMat_FrictMat_FrictPhys()
,Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,label="cohesiveIp")
],
[Law2_ScGeom_FrictPhys_CundallStrack()
,Law2_ScGeom6D_CohFrictPhys_CohesionMoment()
]
), # End InteractionLoop
NewtonIntegrator(damping=0.8,gravity=(0.,0.,0.)),
]
--
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 protected]
Unsubscribe : https://launchpad.net/~yade-users
More help : https://help.launchpad.net/ListHelp