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.

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to