# Porosity control (fixed volume and particle size)

Hello,

I am preparing a sample of spherical particles in a box, which I am using for simulating dry granular flow in a flume. The sample I am generating has a specific volume(L,W,H) and a specific particle size. I want these two to remain fixed while setting the porosity value of the sphere package.

One option to reach a specific porosity is to use TriaxialStressC

Any ideas?

Thanks,

Adel

## Question information

- Language:
- English Edit question

- Status:
- Answered

- For:
- Yade Edit question

- Assignee:
- No assignee Edit question

- Last query:
- 2013-10-09

- Last reply:
- 2013-10-11

Hi Adel,

If you know in advance L,W,H, porosity, and size distribution, then you can deduce the number of particles that will fit in the volume.

Let you generate this number.

Next step: reach the target porosity. Be it with the triaxial engine or by gravity deposition you can use the same technique: reduce contact friction until porosity=target (care to not ask an impossible value, the minimum porosity is what you get when friction=0).

Bruno

Adel ALBABA (adel-1) said : | #2 |

Hi Bruno,

Thank you for your reply

I am using a viscoElastic contact law where TriaxialStressC

The difficulty I am having is that the function "porosity" in YADE only computes the initial porosity of the package and doesn't get updated once the porosity is changed (under gravity deposition*). So how can I keep an eye on the porosity change so that I can Apply test: porosity=target ?

(*)note: I am using a projected gravity vector (gravity=

Adel

Christian Jakob (jakob-ifgt) said : | #3 |

Hi Adel,

For calculation of porosity you may want to use yades porosity [1] or voxelPorosity [2] functions.

You can use these function in a PyRunner [3] for example:

#your model boundaries:

b=Vector3(

t=Vector3(

#add a PyRunner to your engines:

O.engines=

Regards,

Christian

[1] https:/

[2] https:/

[3] https:/

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

If you use the porosity() function, you need (if, as I guess, you do not perform periodic simulations) to define the total volume to consider to compute this porosity. You can have it, for your evolving sample, by calling, from time to time aabbExtrema() function.

Then, I'd say there is no reason that porosity() would compute an *initial* value of porosity

The triaxial engine doesn't care about what type of contact laws you

use. It should be ok with viscoElastic contacts. But graviational is ok

as well, no need to tackle all problems at once.

One way to compute porosity when the geometry is complex (a free

surface, for instance), is to use TesselationWrapper [1], then you get a

porosity per particle.

You can average this data in inner regions to get the average porosity.

It would probably be interesting to use this also for the flow, since it

would give for instance porosity vs. height inside the flowing material,

or porosity change along the slope.

Bruno

Adel ALBABA (adel-1) said : | #6 |

Christian, jduriez and Bruno.. Thanks for the effective solutions. That has clarified a lot of YADE capabilities.

Bruno: For free surface problems, I tried the the Tesselation.Wrapper by looping over the particles and summing the values of Voronoi’s cell of all spheres (Total Volume) where I can workout the porosity. The porosity I am getting is the same as the voxelporosity of a bounding box (which does not consider the free surface of the problem). I do not know why the Tesselation.Wrapper does not take the irregular surface into acoount ? :s

Here is the mini-scrip:

# Porosity by TesselationWrapper

TW=TesselationW

TW.triangulate()

TW.computeVolumes()

volTW=0

for i in O.bodies:

volTW+

TWporo=

#------

# Porosity by aabbExtrema and voxelporosity

voxelPorosity(

Adel

The fact that voxelPorosity gives the same as tesselation-based porosity is a good verification.

You need in fact to filter out particles near the free surface based on position ("inner regions" mentioned above), and keep only particles which are in the bulk.

## Can you help with this problem?

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