How to generate tiny particles in pore space

Asked by Leonard

Hi,
I'd like to generate some tiny particles in pore space of a pack of soil, in order to model the fines in soil.
Can it be achieved in Yade? What kinds of methods or algorithm could be used for this case?
I would appreciate any examples, thoughts, recommendations or links to relevant publications.
Many thanks,
Best regards,
Leonard

Question information

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

Many thanks Robert,

I am not sure if I got what you mean for using a PSD, could you please give more clues?

Following your suggestion, I make an example using makeCloud:

###
from yade import pack
## soil particles
sp1=pack.SpherePack()
sp1.makeCloud((0,0,0),(1,1,1),num=900,rMean=0.04,rRelFuzz=0)
sp1.toSimulation(color=[1,1,1])
## fine particles
sp2=pack.SpherePack()
sp2.makeCloud((0,0,0),(1,1,1),num=3000,rMean=.005,rRelFuzz=.00033)
sp2.toSimulation(color=[0,0.8,0])

Gl1_Sphere.quality=3
#####

This example is a kind of progress. However, I still have some questions regarding the example above.
1. Some of the tiny particles are inside the body of soil particles.
2. This is for a cloud pack at the beginning, is there any way to generate tiny particles in pore space after the soil particles are compacted. For example, after soil particles are compacted at 100 KPa confining pressure?

Thanks,

Leonard

Revision history for this message
Jan Stránský (honzik) said :
#3

if you want non-overlapping particles, use one SpherePack instance, something like (not tested)
###
sp=pack.SpherePack() # just one SpherePack
sp.makeCloud((0,0,0),(1,1,1),num=900,rMean=0.04,rRelFuzz=0)
sp.toSimulation(color=[1,1,1])
doCompaction() # replace by your code
sp.fromSimulation() # now sp is according to compacted particles
n = len(sp)
sp.makeCloud(minCorner,maxCorner,num=3000,rMean=.005,rRelFuzz=.00033) # new particles, guaranteed to be "outside the body of soil particles" = outside already existing particles in sp
for i,(c,r) in enumerate(sp):
   if i < n: # skip already existing particles
      continue
   O.bodies.append(sphere(c,r))
###

> rRelFuzz=.00033

rRelFuzz is a relative value, the radii are in the range ((1-rRelFuzz)*rMean, (1+rRelFuzz)*rMean), isn't 0.00033 absolute value?

cheers
Jan

Revision history for this message
Leonard (z2521899293) said :
#4

Hi Jan,

> I tested the approach you suggested, it works very well, thanks.

> rRelFuzz is a relative value.
Thanks for your kind notification.

Cheers
Leonard