granular collapses (deposition)

Asked by German Varas on 2021-05-04

Hello,

First of all, I want to thank the YADE community for allowing those (like me) new to simulations to have access to this excellent program.

I am creating a code based on the gravity deposition example shown on the official YADE page to learn a little bit. I added some modifications, such as dropping three-grain samples of different sizes and filtering the initial arrangement in order to have a cylindrical shape. However, I would like to simulate something closer to a deposition experiment, that is, to separate the simulation into two parts:

1.- Generate a cylinder and deposit the grains inside. This has an associated stabilization time in which all the particles settle and the system is at rest.
2.- Once this happens (i.e., all the grains stop), I remove the cylindrical container and allow the granular column to flow.

Below is my code that allows observing the collapse of the granular cylinder with the drawback that the grains are not deposited in a cylinder, but simply created in a cylinder shape.

------------------------------
------- CODE -----------
------------------------------
#!/usr/bin/python
# -*- coding: utf-8 -*-

# import yade modules that we will use below
from yade import pack, plot

# characteristics of the spheres and walls
O.materials.append(FrictMat(density=1800,young=50e6,poisson=0.2,frictionAngle=radians(36),label='sphereMat'))
O.materials.append(FrictMat(density=600,young=5e6,poisson=0.2,frictionAngle=radians(40),label='wallMat'))

# create rectangular box from facets
O.bodies.append(geom.facetBox((0,0,0),(4,4,2),wallMask=31,material='wallMat'))

# create empty sphere packing
# sphere packing is not equivalent to particles in simulation, it contains only the pure geometry
sp=pack.SpherePack()

# generate randomly spheres with uniform radius distribution
sp.makeCloud((-0.25,-0.25,-2.0),(0.25,0.25,-1.0),rMean=0.05,rRelFuzz=0.01),
sp.makeCloud((-0.25,-0.25,-1.0),(0.25,0.25,0.0),rMean=0.03,rRelFuzz=0.01),
sp.makeCloud((-0.25,-0.25,0.0),(0.25,0.25,1.0),rMean=0.02,rRelFuzz=0.01)

# filter and create a cylindrical array
pred=pack.inCylinder((0.0,0.0,-3),(0.0,0.0,2),radius=0.3)
sp2 = pack.filterSpherePack(pred,sp,returnSpherePack=True)
# add the sphere pack to the simulation
sp2.toSimulation(material='sphereMat')

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.0),
]
O.dt=.5*PWaveTimeStep()

O.saveTmp()
-------------------------------------------

Thank you very much, any help is welcome!!

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Jan Stránský
Solved:
Last query:
Last reply:
Best Jan Stránský (honzik) said : #1

Hello,

> 1.- Generate a cylinder and deposit the grains inside. This has an associated stabilization time in which all the particles settle and the system is at rest.

See e.g. [1] for a library function - facetCylinder instead of facetBox:
###
cylinderFacets = geom.facetCylinder(...)
cylinderFacetsIds = O.bodies.apend(cylinderFacets)
###

Or you can create your own solution, e.g. using boxes or pfacets instead of facets.

> 2.- Once this happens (i.e., all the grains stop), I remove the cylindrical container and allow the granular column to flow.

Use O.bodies.erase [2]
###
...
O.run(10000,True) # run 10000 steps. Or some stop condition. Or ... In case of this problem, pleas open a new question

for f in cylinredFacets:
    O.bodies.erase(f.id)
# or
# for i in facetCylinderIds:
# O.bodies.erase(i)
...
###

Concerning the flow, have a look at recent discussion about "rectangular" results [3].

Cheers
Jan

[1] https://yade-dem.org/doc/yade.geom.html#yade.geom.facetCylinder
[2] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.BodyContainer.erase
[3] https://answers.launchpad.net/yade/+question/696786

German Varas (gvaras) said : #2

thank you very much for your response Jan. After some exploration I was able to impose a condition to remove the cylinder after a certain number of iterations.

German Varas (gvaras) said : #3

Thanks Jan Stránský, that solved my question.