Controlling pore sizes in sphere packings

Asked by Othman Sh on 2019-11-04


Is there a method to generate a porous material in Yade made of spheres that has same pore network/pore distribution of an actual sample? I am modeling stress-strain behavior of porous concrete using Yade and I'm trying to make the sphere packing and pore distribution relatively similar to the actual concrete sample.

I know its a difficult task but I would appreciate any thoughts, recommendations or links to relevant publications.


Question information

English Edit question
Yade Edit question
No assignee Edit question
Solved by:
Othman Sh
Last query:
Last reply:
Othman Sh (othman-sh) said : #2

Hi Robert,

I'm talking about arranging the positions of the spheres to match the actual porous material that I'm modeling. So the location of voids and the connectivity of the pores inside the DEM model should be the same as the actual sample. Not sure if that is possible but I just wanted to check if this is doable.


Jan Stránský (honzik) said : #3

Hi Othman,

it depends on definitions of many terms ("same", "pore", "network")..

Could you please provide some more information?
- What scale you simulate?
- What is typical pore size / pore structure of your sample?


Robert Caulk (rcaulk) said : #4

If you have grain positions from a specimen imagery, you can place spheres in those positions with one or two commands in yade. I’m unsure if this is what you seek though.

Othman Sh (othman-sh) said : #5


My actual specimens are 100 mm diameter by 200 mm height. Pore sizes are 0.5~3 mm.


Yes that's what I seek and I have x-ray slices/images of the actual sample. Would you elaborate more on the Yade commands that you mentioned?


Jérôme Duriez (jduriez) said : #6

Something like

O.bodies.append(sphere( (xC,yC,zC),radius )) # with xC,yC,zC the coordinates of the center, and radius the .. radius, as given by your imagery


Othman Sh (othman-sh) said : #7


Thanks for your answer but I'm not sure if I understand what you're providing. So you mean to import a 3D volume of the actual sample and fill the solid part with spheres?

If you see Fig. 1-b in [1], I'm trying to fill the solid part (the aggregates) with spheres so that I have a DEM model with exact pore network as the real sample (from imagery).


Robert Caulk (rcaulk) said : #8

Oh, it all makes sense...only 7 comments into the thread :-)

If I were you I would make a grid of boolean points in your imagery data characterized by solid or pore. Then I would isolate the grid points characterized by "pore". Now take those coordinates and use them to delete spheres (i.e. if a sphere is a certain distance from a pore grid point, it should be deleted) from a dense packing in Yade. I think that would be your best bet.

Coincidentally, I am working on a very similar imagery data extraction followed by Yade data injection process in the coming days. My plan is to use ImageJ to extract the grid point data and then probably feed that txt file directly into C++ for characterizing pore spaces.

Othman Sh (othman-sh) said : #9


That's really helpful. Thanks a lot for sharing this idea. Just a quick question, when I delete spheres based on pores grid point " if a sphere is a certain distance from a pore grid point, it should be deleted", pores have different sizes, so if I specify fixed distance that if a sphere is within, the sphere will be deleted, then I will end up having constant pore size. Any idea how to fix that?


Robert Caulk (rcaulk) said : #10

Happy to help ;-)
I dont think that will be an issue. It is my impression that you will have many grid points within the pore spaces. Bigger pores will contain more grid points, thus they will be larger. The sphere delete buffer won't impact that.

Othman Sh (othman-sh) said : #11

Sounds great. Thank you all for your help. Problem solved.