How to increase the fill factor?

Asked by Milly Ro

Hello,

I want to pack spheres in a box and then to apply gravity. For this I use my own particle distribution. My question is how can I increase the fill factor? My ideas were to increase the dimension of the box in order to generate more spheres. But it did not help. Then I wanted to add the porosity parameter in makeCloud function and again no significant changes in fill factor. I also variied the timestep. It helps a little bit, but I am still far from the desired result. The code that I used for packing and gravity applying and the formula for fill factor you can find below:

################

from yade import export
# create box with free top, and ceate loose packing inside the box
from yade import pack, plot
import numpy as np

psdSizes = np.array(np.genfromtxt("r.txt", dtype=float, unpack=False))*2
psdCumm = np.genfromtxt("cdf.txt", dtype=float, unpack=False)

O.bodies.append(geom.facetBox((50,50,50),(50,50,50),wallMask=63))
sp=pack.SpherePack()
sp.makeCloud((0,0,0),(100,100,100),porosity=.65, psdSizes=psdSizes,psdCumm=psdCumm, distributeMass=False)
sp.toSimulation()

O.engines=[
 ForceResetter(),
 # sphere, facet
 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.1),

]

#O.dt=utils.PWaveTimeStep()
O.dt=0.02

O.run(1000)

###############

The fill factor is calculated as ratio of the sum of the volume of all generated spheres to the volume of the box. The maximum achieved value was 46%. The desired value is 65-75%

Best wishes
Milly

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Robert Caulk
Solved:
Last query:
Last reply:
Revision history for this message
Robert Caulk (rcaulk) said :
#1

What are 'r.txt' and 'cdf.txt?' Please review [1].

The only ways to decrease the porosity of your packing (I think that is what you are referring to when you say 'fill factor') is to

1\ widen the distribution of sphere sizes - which probably becomes computationally prohibitive at some point due to the dependence of time-step on sphere size.
2\ Add confining pressure (and you can decrease sphere stiffness) - but this presumes your simulation will have confining pressure.

Otherwise, you will need to accept that sphere packings intrinsically have a minimum porosity [2]

Cheers,

Robert

[1] https://yade-dem.org/wiki/Howtoask
[2]https://en.wikipedia.org/wiki/Sphere_packing

Revision history for this message
Milly Ro (milly93) said :
#2

Hello Robert,

thank you for your reply. As I said I use my own particle distribution and 'r.txt' and 'cdf.txt' give the values of radii and cumultative distribution function (cdf) as text file. My spheres have different size (radii from 0.5 to 2.5 micron and the mean value is 1.1 micron).

1\ I cannot change my distribution of sphere sizes, because I got it from my measurements.

I thought maybe there is a solution how I can place my spheres more closely to each other in order to achieve a high fill factor (average packing density).

Best wishes,
Milly

Revision history for this message
Milly Ro (milly93) said :
#3

There is an update: I have just discovered, that more than half of the spheres intersect with each other after applying gravity. This of course greatly affects the packing density (fill factor). Could you please give me some advice how can I solve this problem so that the spheres do not intersect?

Best wishes,
Milly

Revision history for this message
Jérôme Duriez (jduriez) said :
#4

Hi,

For avoiding spheres intersection, you have to stop using YADE right away and switch to a contact dynamics code, since interpenetration is at the root of (forces computation for) DEM approaches like that of YADE.

For getting a denser packing, maybe you could try trick (lowering) your inter-particle friction angle in the deposition phase. You can still set it to the physical one before subsequent loading, if there is such a thing than subsequent loading in your case.

That is the idea used while simulating triaxial compressions in https://gitlab.com/yade-dev/trunk/-/blob/master/examples/triax-tutorial/script-session1.py, look for the use of setContactFriction() therein.

Revision history for this message
Milly Ro (milly93) said :
#5

Hello Jerome,

thank you for the answer. I think I did not understand the part for avoiding spheres intersection. Could you please explain it more detailed, because I am new in yade. Maybe I should also mention, that I do not want to do any complex physics with yade. My goal is only to generate the spheres from my measurements, then to apply the gravity and save the positions of the spheres with desired fill factor.

Best wishes,
Milly

Revision history for this message
Best Robert Caulk (rcaulk) said :
#6

>I think I did not understand the part for avoiding spheres intersection.

The contact force estimation in Yade is based on the "intersection" of spheres. If they do not intersect, there are no forces. Jerome says if having no "intersection" is imperative to your problem then Yade (and DEM) is generally not the right tool.

"Intersection" is probably the incorrect way to think about the model. Frict_mat is just an elastic deformation model. So if two spheres are "intersecting" they are actually just "deforming" one another and generating forces as a function of the deformation magnitude. Elastic means that the deformation is fully recoverable in the event that the spheres move away from one another.

You can reduce the deformation magnitude by increasing particle stiffness or "youngs modulus." But there will still be a small deformation if you are applying gravity and if the particles are relying on one another to maintain a structure.

Try Jerome's suggestion of reducing the friction angle during gravity settling.

Revision history for this message
Robert Caulk (rcaulk) said :
#7
Revision history for this message
Milly Ro (milly93) said :
#8

Hi Robert,

that helps me a lot!

Best wishes,
Milly

Revision history for this message
Milly Ro (milly93) said :
#9

Thanks Robert Caulk, that solved my question.