Want to connect all the particles in an aggregate using cohesive bond
Hello everyone,
Here is a description of the problem I am trying to solve:
-- I have a granular sample with spherical particles of diameters D1, D2, D3 etc. All of such big particles (lets call them agglomerates) are composed of smaller particles of diameter 'd', since d is the smallest particle size of interest.
-- Initially, within each big spherical particle, all the smaller particles should be densely packed and connected with cohesive bonds (CohFrictMat). As the loading is applied, the initially defined cohesive bonds within each big sphere will break progressively leading to smaller fragments.
Now, the problem I am facing: Initially, within a single big sphere itself, sometimes there are particles which are shown not to have any cohesive interaction, leaving the small individual particle free to fly. How can I alleviate this problem ?
This is a follow-up question to https:/
Here is the script:
from yade import pack
#######
# Set up run
#######
run_name=
data_root_dir="."
#######
# Materials
#######
plate_material=
young=200e9
,poisson=0.3
,density=8000.
,frictionAngle
,label=
O.materials.
sample_
young=4e9
,poisson=0.25
,density=1400
,frictionAngle
,normalCohesio
,shearCohesion
,momentRotatio
,label=
O.materials.
#######
# Component dimensions and operating condition
#######
# Granular material dimension
sample_
#sample_
sample_
# Sub-particle dimension
particle_
particle_
#######
# grinding plate dimension
#######
rotvel=
#######
# Periodic Geometry
#######
# Set up periodic boundary conditions
O.periodic=True
xExt=4*
yExt=3.
zExt=xExt
xLim=xExt
yLim=yExt/4
zLim=zExt
O.cell.
xExt, 0, 0,
0, yExt, 0,
0, 0, zExt)
length=xExt
height=yExt
width=zExt
# Top and bottom plate thickness
thickness=
bottomBoxes = []
for ix in (0,1,2):
for iz in (0,1,2):
bottomBoxes.
center=
,extents=
,wire=False
,material=
))
bottom_
O.bodies[
#######
# Particle Packing
#######
min_corner= (0,yLim,0)
max_corner= (xLim, yExt-yLim, zLim)
sp=pack.
sp.makeCloud( min_corner,
print "Generated ",len(sp)," aggregates"
#######
# Sample
#######
for s in sp:
sphere=
sp1=pack.
sphere
,spheresInCel
,radius=
,memoizeDb=
,returnSphere
)
sp1.toSimulati
print 'Generated ',len(sp1),' particles'
Gl1_Sphere(
#########
# Top
#########
topBoxes = []
for ix in (0,1,2):
for iz in (0,1,2):
topBoxes.
center=
,extents=
,wire=False
,material=
))
top_id,top_ids = O.bodies.
O.bodies[
plate_downforce
O.forces.
O.bodies[
#######
# Run the simulation
#######
r_int = 1.0 # interaction radius
O.dt=0.
O.engines=[
ForceResetter(),
InsertionSortC
Bo1_Sphere_
,Bo1_Box_Aabb()
], allowBiggerThan
),
InteractionLoop(
[Ig2_Sphere_
,Ig2_Box_
],
[Ip2_FrictMat_
,Ip2_CohFrictM
],
[Law2_
,Law2_
]
), # End InteractionLoop
NewtonIntegrat
]
O.step()
def addBodyToAggreg
if body.id in aggreg: # do nothing if b is already in aggreg ...
return
aggreg.
intrs = body.intrs()
for i in intrs: # and add also all its neighbors ...
if not isinstance(
continue
if i.phys.
continue
# if not i.isReal:
# continue
i2 = i.id1 if i.id2==body.id else i.id2 # choose the other body of interaction
b2 = O.bodies[i2]
addBodyToAggr
def aggregs(): # actual function to detect standalone aggregates
ids = set(b.id for b in O.bodies if isinstance(
ret = []
while len(ids)>0: # while there are still some particles not assigned to any aggregate ...
i = ids.pop() # ... choose one random ...
b = O.bodies[i]
a = set() # ... create new aggregate (set of sphere ids)
addBodyToAggr
for bid in a: # delete all used ids from ids
ids.discard(bid)
ret.append(a)
return ret
aggs = aggregs()
for a in aggs:
print a
I would really appreciate your help.
Thanks
Varun
Question information
- Language:
- English Edit question
- Status:
- Solved
- For:
- Yade Edit question
- Assignee:
- No assignee Edit question
- Solved by:
- Bruno Chareyre
- Solved:
- Last query:
- Last reply:
This question was reopened
- by VG