← Back to team overview

yade-users team mailing list archive

Re: [Question #695126]: Cylinder powder compaction

 

Question #695126 on Yade changed:
https://answers.launchpad.net/yade/+question/695126

Karol Brzezinski proposed the following answer:
Hi,

the first thing is, you need to add "Bo1_Wall_Aabb()" and
"Bo1_Facet_Aabb()" in the collider, so the balls could interact with
walls and facets. The same story with "Ig2_Wall_Sphere_ScGeom(),
Ig2_Facet_Sphere_ScGeom()" in the interaction loop.

I erased the box from your example, and added one wall at the top of
your cloud. It moves down and pushes the balls. The rest is up to you.
Please find working code below.

Cheers,
Karol

##############################
from __future__ import print_function
sigmaIso=-1e5

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

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

sample_material=CohFrictMat(
    young=4e9
   ,poisson=1
   ,density=1400
   ,frictionAngle=radians(30)
   ,isCohesive=True
   ,normalCohesion=1e8*1.2
   ,shearCohesion=.4e8*1.2
   ,momentRotationLaw=True
   ,label='sample_mat')

O.materials.append(sample_material)

#DATOS PROBETA
radius_tablet = 0.015 #1.5 cm
height_tablet = 0.02 #2 cm
radius_particle = 0.001 #1 mm
radius_std = 0.0005 #0.5 mm

# randomDensePack packing
#pred = pack.inCylinder((0,0,0),(0,0,height_tablet),radius=radius_tablet)
#assembly = pack.randomDensePack(pred,radius=radius_particle,rRelFuzz=0,returnSpherePack=True)
#assembly.toSimulation(material='sample_mat')

sp = pack.SpherePack()
sp.makeCloud((0,0,0),(2.1,2.1,2.1),rMean=.1,num=500)
#cyl = pack.inCylinder((1,1,0),(1,1,2),1)
#sp = pack.filterSpherePack(cyl,sp,True,material=sample_material)
sp.toSimulation(material=sample_material)

id_wall = O.materials.append(FrictMat(density=10000,young=1e11,poisson=.5,frictionAngle=atan(0.5),label="wallmat"))
O.materials[id_wall]

### WALLS

O.bodies.append(yade.geom.facetCylinder((1,1,1),radius=1.6,height=3,segmentsNumber=20,wallMask=6,material=id_wall))

#find max Z coordinate of your cloud
max_z = aabbExtrema()[1][2]
# add top wall 
pushWallId = O.bodies.append(wall((0,0,max_z ), 2, material = O.materials[id_wall])) #

#set vertical downward speed to the wall
O.bodies[pushWallId].state.vel = (0,0,-1)

################### ENGINES
O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Wall_Aabb(),Bo1_Facet_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom()],
  [Ip2_FrictMat_FrictMat_FrictPhys()],
  [Law2_ScGeom_FrictPhys_CundallStrack()]
 ),
 NewtonIntegrator(damping=.2),
]
O.dt=.5*PWaveTimeStep()

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.