The particle deposition rate is too slow

Asked by William

Hi, I want to pour the particles into a container and stir. However, the particle deposition rate is too slow. How can I accelerate the process?

Here is my script.

import random
import math
from yade import geom, pack, utils, plot, ymport, export
import numpy as np

#particle parameters
Density = 3000
FrictionAngle = 0
PoissonRatio = 0.5
Young = 300e6
Damp = 0.7
AvgRadius = 0.01
N_particles = 20000

#Wall constants
WDensity = 3000
WFrictionAngle = 0.0
WPoissonRatio = 0.5
WYoung = 500e9

SphereMat = O.materials.append(FrictMat(young = Young, poisson = PoissonRatio, frictionAngle = radians(FrictionAngle), density = Density))
WallMat = O.materials.append(FrictMat(young = WYoung, poisson = WPoissonRatio, frictionAngle = radians(WFrictionAngle), density = WDensity))

### tank
center = (0, 0, 0)
diameter = 2
height = 1
cylinder = geom.facetCylinder(center=center, radius=diameter/2, height=height, segmentsNumber=80, wallMask=6,material=WallMat)
O.bodies.append(cylinder)

### funnel
# Define cylinder with funnel parameters
center2 = (0, 0, 1)
diameter2 = 0.4
height2 = 1

# create cylindrical body
cylinder2 = geom.facetCylinder(center=center2, radius=diameter2/2, height=height2, segmentsNumber=80, wallMask=4,material=WallMat)
O.bodies.append(cylinder2)

# Define cylinder with funnel parameters
center1 = (0,0,height2/2+1)
dBunker = 2
dOutput = 0.4
hBunker = 0
hOutput = 1
hPipe = 0

# create funnel as a bunker
funnel = geom.facetBunker(center=center1, dBunker=dBunker, dOutput=dOutput, hBunker=hBunker,hOutput=hOutput, hPipe=hPipe, segmentsNumber=80, wallMask=4,material=WallMat)
O.bodies.append(funnel)

# Define cylinder with funnel parameters
center3 = (0, 0, 4.5)
diameter3 = 2
height3 = 4

# create cylindrical body
cylinder3 = geom.facetCylinder(center=center3, radius=diameter3/2, height=height3, segmentsNumber=80, wallMask=4,material=WallMat)
O.bodies.append(cylinder3)

### blender
b1=[]
for i in range(60):
    b1.append(O.bodies.append(sphere([0.707/2,0.707/2,i*0.02-0.48],0.04)))

for i in range(5):
    for j in range(48):
        b1.append(O.bodies.append(sphere([j*0.01+0.707/2,0.707/2,i*0.2-0.48],0.02)))
        b1.append(O.bodies.append(sphere([-j*0.01+0.707/2,0.707/2,i*0.2-0.38],0.02)))

idclump1=O.bodies.clump(b1)
s1=O.bodies[-1]
s1.state.blockedDOFs='xyzXYZ'

b2=[]
for i in range(60):
    b2.append(O.bodies.append(sphere([-0.707/2,-0.707/2,i*0.02-0.48],0.04)))

for i in range(5):
    for j in range(48):
        b2.append(O.bodies.append(sphere([-(j*0.01+0.707/2),-0.707/2,i*0.2-0.48],0.02)))
        b2.append(O.bodies.append(sphere([-(-j*0.01+0.707/2),-0.707/2,i*0.2-0.38],0.02)))

idclump2=O.bodies.clump(b2)
s2=O.bodies[-1]
s2.state.blockedDOFs='xyzXYZ'

b3=[]
for i in range(60):
    b3.append(O.bodies.append(sphere([0.707/2,-0.707/2,i*0.02-0.48],0.04)))

for i in range(5):
    for j in range(48):
        b3.append(O.bodies.append(sphere([(-j*0.01+0.707/2),-0.707/2,i*0.2-0.48],0.02)))
        b3.append(O.bodies.append(sphere([(j*0.01+0.707/2),-0.707/2,i*0.2-0.38],0.02)))

idclump3=O.bodies.clump(b3)
s3=O.bodies[-1]
s3.state.blockedDOFs='xyzXYZ'

b4=[]
for i in range(60):
    b4.append(O.bodies.append(sphere([-0.707/2,0.707/2,i*0.02-0.48],0.04)))

for i in range(5):
    for j in range(48):
        b4.append(O.bodies.append(sphere([-(-j*0.01+0.707/2),0.707/2,i*0.2-0.48],0.02)))
        b4.append(O.bodies.append(sphere([-(j*0.01+0.707/2),0.707/2,i*0.2-0.38],0.02)))

idclump4=O.bodies.clump(b4)
s4=O.bodies[-1]
s4.state.blockedDOFs='xyzXYZ'

for b in O.bodies:
    if isinstance(b.shape,Sphere):
        b.shape.color=(0.,1.,0.)

### particle generation
mn = Vector3(0.6,-0.6,2.5)
mx = Vector3(-0.6,0.6,5.5)

sp = pack.SpherePack()
sp.makeCloud(mn,mx,num=N_particles,rMean=AvgRadius,rRelFuzz=0,distributeMass=False)
sp.toSimulation(material = SphereMat)

O.engines=[
   ForceResetter(),
   InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb()]),
   InteractionLoop(
      [Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom()],
      [Ip2_FrictMat_FrictMat_FrictPhys()],
      [Law2_ScGeom_FrictPhys_CundallStrack()]
   ),
   NewtonIntegrator(gravity=(0,0,-9.8),damping=0.7),
   CombinedKinematicEngine(ids=[s1.id],comb=[RotationEngine(angularVelocity=10000,rotateAroundZero=1,rotationAxis=(0,0,1),zeroPoint=(0.707/2,0.707/2,0))]),
   CombinedKinematicEngine(ids=[s2.id],comb=[RotationEngine(angularVelocity=10000,rotateAroundZero=1,rotationAxis=(0,0,1),zeroPoint=(-0.707/2,-0.707/2,0))]),
   CombinedKinematicEngine(ids=[s3.id],comb=[RotationEngine(angularVelocity=-10000,rotateAroundZero=1,rotationAxis=(0,0,1),zeroPoint=(0.707/2,-0.707/2,0))]),
   CombinedKinematicEngine(ids=[s4.id],comb=[RotationEngine(angularVelocity=-10000,rotateAroundZero=1,rotationAxis=(0,0,1),zeroPoint=(-0.707/2,0.707/2,0))])
]
O.dt=2*PWaveTimeStep()

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Karol Brzezinski
Solved:
Last query:
Last reply:
Revision history for this message
Karol Brzezinski (kbrzezinski) said (last edit ):
#1

Hi William,

First of all I need to tell you how to slow down your simulation. In the last line, you should change the timestep to be smaller than PWaveTimeStep() (e.g. 0.8*PWaveTimeStep()). Otherwise, the simulation will become unstable after the particles start to touch each other.

Secondly, you can decrease the young modulus of walls. Usually, a modulus 10-20 times bigger than for spheres is enough to prevent particle "leakage".

If applicable, you can try to scale up the particles.

BTW do you take advantage of multithread computing (by simply running the simulation with -j parameter)?

Cheers,
Karol

Revision history for this message
William (qfxx-123) said :
#2

Hi, Karol. Thanks for your reply.

> you should change the timestep to be smaller than PWaveTimeStep()
Thanks for your suggestion.

> Secondly, you can decrease the young modulus of walls.
I have decreased that. It didn't seem to work, still very slow.

> BTW do you take advantage of multithread computing (by simply running the simulation with -j parameter)?
Yes, I used "yade -j 8 ..."

Please allow me to make an addition. When I delete the "blender" and just sedimentate, the particle deposition rate is acceptable. Thus, I think the deposition rate might affected by the "blender".

Revision history for this message
Best Karol Brzezinski (kbrzezinski) said :
#3

Hi,

I checked that decreasing young parameter of wall to WYoung = 500e7, increases timestep (hence the speed of the simulation) ten times. So it is a significant difference in my opinion.

If blenders are problematic, I would try to model it differently (e.g. cylinders/ facet cylinders).

Cheers,
Karol

Revision history for this message
William (qfxx-123) said :
#4

Thanks Karol Brzezinski, that solved my question.