Particle compaction in a cylinder wall

Asked by lida

Dear all,

I am a fresh man in yade, and now need to run a 3D model about die compaction of multi-particles. My geometry consists of a cylindrical wall ( 12mm in height, 4mm in diameter) and particles (about 1mm in diameter). I want to simulate the compaction processing which includes:1. the particles fill in the cylinder by gravity; 2. apply a displacement(6mm) to compress; 3 when the displacement got 6mm, it is done. Then just simply output a displacement-force curve.

My questions are:
1. How to create this cylinder which can be defined as a rigid body? just create a geom.facetCylinder or cylindrical wall?
2. How to define the particle packing to fill in the cylinder? Use ''sp=SpherePack()'' and ''sp.makeCloud''?
3. How to define compression following by 6mm displacement instead of applying load?
4. How to export the displacement-force curve?

Any help will be greatly appreciated.

Thanks and regards,

Lida

Question information

Language:
English Edit question
Status:
Answered
For:
Yade Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
Alexander Eulitz [Eugen] (kubeu) said :
#1

Hi Lida,
welcome to Yade.
1) Facets are rigid bodies as well as walls, I think.
2) I do a lot of similar simulations and suggest to use randomDensePack to fill up the cylinder. In my case I have packings with equal sized spheres made of the same material.
It creates a pack of spheres with given dimensions by compressing and relaxing a loos packing and has the possibility to save them.
Code could be something like that:

        cylinderpredicate=pack.inCylinder(centerBottom, centerTop, radius=radiusCylinder)
 cylinderpack=pack.randomDensePack(cylinderpredicate radius=radiusSpheres, color=colorSphere, material=material1, spheresInCell=2000, memoDbg=True, memoizeDb='/home/user/Yade/myLibs/densePackings.sql3')
 O.bodies.append(cylinderpack)
3) define a velocity for compression
v=0.01 (e.g. defined as [m/s])
Then you can calculate the time that is necessary to reach a displacement of 6mm=0.006m
timestep=O.dt # in seconds per iteratino
timeNeeded=0.006/v
iterNeeded=timeNeeded/timestep
O.run()
O.stopAtIter(iterNeeded)

4) plots can easily be saved
plot.saveGnuplot(baseName = plotpath)
This gives a data file which is compressed and a gnuplot code file which you can execute in terminal via "gnuplot file.gnuplot".
You can edit the gnuplot script and read in data which other applications as well.

Hope it helps,
Alex

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

For 3), O.run(iterNeeded) / O.run(iterNeeded,wait=True) works also.

Give a look at the doc (https://www.yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Omega.run) to decide if you need wait=True

Revision history for this message
lida (chelida821) said :
#3

Great, Thank you very much indeed. I will start to do this ASAP.

Revision history for this message
Klaus Thoeni (klaus.thoeni) said :
#4

Hi

add 1: facetCylinder [1] should do the job if you want rigid lateral walls. You might want to replace the top facets with a wall.
add 2: you can as well use the SpheresFactory [2] or CircularFactory [3] to fill the cylinder.

HTH
Klaus

[1] https://yade-dem.org/doc/yade.geom.html?highlight=facetcylinder#yade.geom.facetCylinder
[2] https://yade-dem.org/doc/yade.wrapper.html?highlight=factory#yade.wrapper.SpheresFactory
[3] https://yade-dem.org/doc/yade.wrapper.html?highlight=factory#yade.wrapper.CircularFactory

Revision history for this message
lida (chelida821) said :
#5

Hi Alex @Alexander Eulitz,

Thank you for your help. That is great! However, since I don't have any background in yade. I don't know how to define the velocity and timestep. What does "timestep=O.dt # in seconds per iteratino" mean?

I can show you my poor command:
from yade import pack

pred=pack.inCylinder(centerBottom=(0,0,0),centerTop=(0,0,0.012),radius=0.002))

O.materials.append(FrictMat(young=200e9,poisson=.3,frictionAngle=.5,label="steel")

spheres=pack.randomDensePack(pred,radius=0.001,color=None,material="steel",sphereInCell=200,memoDbg=True,memoizeDb=None)

O.bodies.append(spheres)

spheres.toSimulation()

O.engines=[

   ForceResetter(),

   InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb(),Bo1_Wall_Aabb()]),

   InteractionLoop(

       [Ig2_Sphere_Sphere_L3Geom(),Ig2_Facet_Sphere_L3Geom(),Ig2_Wall_Sphere_L3Geom()],

      [Ip2_FrictMat_FrictMat_FrictPhys()],
      [Law2_L3Geom_FrictPhys_ElPerfPl()]
   ),

   GravityEngine(gravity=(0,0,-9.81)),

   NewtonIntegrator(damping=0.4),

   PyRunner(command='velocity()'),

]

O.dt=.5*util.PWaveTimeStep()

def velocity():

   velocity=0,0001

   timeNeed=0.006/velocity

   iterNeed=timeNeed/
O.run()
O.stopAtlter(iterNeeded)
plot.saveGnuplot(baseName=plotpath)

Could you give me any specific informations to finish this model?

Regards,

Lida

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

Hello Lida,

Alexander meant in his comment about O.dt "in seconds per iteratiON". What is this variable is briefly described here https://www.yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Omega.dt.

Unfortunately, if this does not help you so much (as it is normal for yade/DEM beginners), I'm afraid you will mandatorily have to give a serious attention to Yade manual (mainly User's Manual and DEM Background), to finish your computations.

Revision history for this message
Alexander Eulitz [Eugen] (kubeu) said :
#7

Hi Lida,

I agree with jduriez, you should have a closer look at the manual.
But nevertheless here are some hints:
first of all your line "spheres.toSimulation()" is not necessary because "O.bodies.append(spheres)" is already adding your spheres to simulation.

Furthermore it is not necessary to add a PyRunner Engine for your purpose of calculating a velocity.
Just remove the Pyrunner and add this after you determined the timestep:

#...
velocity=0.0001 #it's a decimal point not a comma

timeNeed=0.006/velocity

iterNeed=timeNeed/O.dt

O.run()
#...

Have fun,
Alex

-----Ursprüngliche Nachricht-----
Von: <email address hidden> [mailto:<email address hidden>] Im Auftrag von jduriez
Gesendet: Mittwoch, 23. Oktober 2013 17:12
An: Eulitz, Alexander
Betreff: Re: [Question #237753]: Particle compaction in a cylinder wall

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

    Status: Open => Answered

jduriez proposed the following answer:
Hello Lida,

Alexander meant in his comment about O.dt "in seconds per iteratiON".
What is this variable is briefly described here https://www.yade- dem.org/doc/yade.wrapper.html#yade.wrapper.Omega.dt.

Unfortunately, if this does not help you so much (as it is normal for yade/DEM beginners), I'm afraid you will mandatorily have to give a serious attention to Yade manual (mainly User's Manual and DEM Background), to finish your computations.

--
You received this question notification because you are a direct subscriber of the question.

Revision history for this message
lida (chelida821) said :
#8

Thanks Alex and jduriez. yes, the manual is necessary for me to go through, indeed.

Can you help with this problem?

Provide an answer of your own, or ask lida for more information if necessary.

To post a message you must log in.