yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #29423
[Question #706684]: Small particles jumping up in gravity deposition example in a cylindrical box
New question #706684 on Yade:
https://answers.launchpad.net/yade/+question/706684
Hello everyone,
Hope you are doing well.
I want to simulate spherical packing in a cylindrical container. I followed the Gravity deposition example on the Yade website. It works well for the bigger particles. But for the small particles, most of the particles jumping up and going above, instead of deposition. Some of the particles go out of the box.
I need the porosity and particle configuration of packing at the end (balanced state).
I want to simulate my experiments, in which the particles are mono-sized spheres with 0.5 mm and 0.1 mm in diameter. And, the diameter of my cylinder is 5.2 cm. As it is not possible to use the real geometry of the cylinder because of the huge number of particles, that is why I used smaller ones.
Here is my code:
###########
# gravity deposition in box, showing how to plot and save history of data,
# and how to control the simulation while it is running by calling
# python functions from within the simulation loop
# import yade modules that we will use below
from yade import pack, geom, plot
from yade import export
pred = pack.inCylinder((0,0,0),(0,0,0.01),0.005)
sp = pack.randomDensePack(pred,radius=0.00025,spheresInCell=300)
O.bodies.append(sp)
facets = geom.facetCylinder((0,0,0.02),0.005,0.05,wallMask=2|4)
O.bodies.append(facets)
# add the sphere pack to the simulation
# sp.toSimulation()
O.engines = [
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(), Bo1_Facet_Aabb()]),
InteractionLoop(
# handle sphere+sphere and facet+sphere collisions
[Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_CundallStrack()]
),
NewtonIntegrator(gravity=(0, 0, -9.81), damping=0.4),
# call the checkUnbalanced function (defined below) every 2 seconds
PyRunner(command='checkUnbalanced()', realPeriod=2),
]
O.dt = .5 * PWaveTimeStep()
# enable energy tracking; any simulation parts supporting it
# can create and update arbitrary energy types, which can be
# accessed as O.energy['energyName'] subsequently
O.trackEnergy = True
# if the unbalanced forces goes below .05, the packing
# is considered stabilized, therefore we stop collected
# data history and stop
def checkUnbalanced():
if unbalancedForce() < .05:
O.pause()
O.saveTmp()
# export spheres function every 1000 iterations
O.engines += [PyRunner(command="exportSpheres()", iterPeriod=1000, initRun=True)]
def exportSpheres():
i = O.iter
fName = f"yade-spheres-{i:06d}.txt"
export.text(fName)
# porosity
O.engines += [PyRunner(iterPeriod=1000,command="plotAddData()",initRun=True)] # runs every 1000 iterations
def plotAddData():
porosity = utils.porosity()
plot.addData(iter=O.iter, time=O.time, porosity=porosity)
plot.saveDataTxt("result.txt")
############
Any help will be greatly appreciated.
Thanks and regards,
Soheil
--
You received this question notification because your team yade-users is
an answer contact for Yade.