Triaxial test using polyhedral particles

Asked by Bilal Al Tfaily on 2020-12-03

Hello,

I am new user of YADE and I’m trying to do a Triaxial test using polyhedral shapes.
To prepare the sample I created a cloud of spheres and then replace them with polyhedral particles.
Therefore, my question is:
1- Is it possible to use polyhedral shapes using periodic boundary conditions?
If you have any suggestions about using polyhedral particles please tell me! (the following is my code)
sp0=pack.SpherePack();
NbParticles=sp0.makeCloud(mn,mx,psdSizes=[0.125,0.160,0.2,0.25,0.315,0.4,0.5,0.63], psdCumm=[0,0.0325,0.0725,0.1875,0.365,0.605,0.85,1.0],distributeMass=True, num=num_spheres, porosity=0.7,seed=1,periodic=True)
#### to replace the spheres with polyhedral particles ####
for center,radius in sp0:
 t=polyhedra_utils.polyhedra(matPoly,v=[],fixed=True,size=(radius,radius,radius) ,mask=1) ### to give the polyhedral particle the same "radius" as the sphere
 t.state.pos=center ### to give the polyhedral particle the same position as the sphere
 O.bodies.append(t)

2- I am also trying to prepare a Triaxial test with polyhedral particles and walls:
I created walls using aabbWalls
Use the TriaxialStressController engine to control the stress
However, when I run the simulation I get a warning saying that the verletDist is set to 0 because no spheres are found… and the walls move with no contacts with the particles. I used the following engine and laws:
O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Polyhedra_Aabb(),Bo1_Wall_Aabb(),Bo1_Facet_Aabb()]),
 InteractionLoop(
  [Ig2_Facet_Polyhedra_PolyhedraGeom(),Ig2_Polyhedra_Polyhedra_PolyhedraGeom(),Ig2_Wall_Polyhedra_PolyhedraGeom()],
  [Ip2_PolyhedraMat_PolyhedraMat_PolyhedraPhys(),Ip2_FrictMat_PolyhedraMat_FrictPhys()],
  [Law2_PolyhedraGeom_PolyhedraPhys_Volumetric()]
 ),
O.dt=0.25*polyhedra_utils.PWaveTimeStep()
...... I tried to change the time step but its the same.
When I run a previous example “examples_polyhedra_free-fall.py” I get the same warning. but its working.

Thank you for your help!

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Jan Stránský
Solved:
2020-12-08
Last query:
2020-12-08
Last reply:
2020-12-06
Best Jan Stránský (honzik) said : #1

Hello,

> I am new user of YADE

welcome :-)

> the following is my code

please post the code in the form of MWE [1] M=minimal, W=working, such that we can try the code ourselves.
Without it, often we can just guess..

> 1- Is it possible to use polyhedral shapes using periodic boundary conditions?

yes
###
from yade import polyhedra_utils
mat = PolyhedraMat()
p1,p2 = [polyhedra_utils.polyhedra(mat) for _ in (0,1)]
p1.state.pos = (1,2,2)
p2.state.pos = (19,2,2)
p1.state.vel = (1,0,0)

O.bodies.append((p1,p2))

O.periodic = True
O.cell.setBox(4,4,4)

O.engines=[
    ForceResetter(),
    InsertionSortCollider([Bo1_Polyhedra_Aabb()]),
    InteractionLoop(
       [Ig2_Polyhedra_Polyhedra_PolyhedraGeom()],
       [Ip2_PolyhedraMat_PolyhedraMat_PolyhedraPhys()],
       [Law2_PolyhedraGeom_PolyhedraPhys_Volumetric()],
    ),
    NewtonIntegrator(),
]

O.dt = 3e-5
###

2)
> However, when I run the simulation I get a warning saying that the verletDist is set to 0 because no spheres are found

it is just warning :-)
Collider with default verletDist expects some spherical particles.
set InsertionSortCollider([...],verletDit=0)
to hide the warning.

> I created walls using aabbWalls
> and the walls move with no contacts with the particles

aabbWalls create 6 Boxex, not actually Walls.
You have no box-polyhdron Ig2 in your engines.

cheers
Jan

[1] https://www.yade-dem.org/wiki/Howtoask
[2] https://yade-dem.org/doc/yade.utils.html#yade.utils.aabbWalls

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

3. You may note that stress control algorithms in TriaxialStressController assume a classical force/length linear stiffness for the packing-surrounding boxes ( ;-) ) interaction.

Which does not exist with a default use of Polyhedra, see eg https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Ip2_PolyhedraMat_PolyhedraMat_PolyhedraPhys and maybe a previous discussion on the mailing list, same topic.

Bilal Al Tfaily (bilaltf) said : #3

Thank you Jan and Jérôme for your answers. :-)

-Yes, we can hide the warning, but setting the verletDist to 0 will prevent us from avoiding the collider to run at every time step, which will cause more computation time. Is it true? If yes, how can I choose a good value for the verletDist of non-spherical particles?

-As I read from previous discussion that aabbWalls does not work well with polyhedral particles. In addition, no Box_Polyhedra Ig2 exists in the engines. Therefore, I am trying to create real Walls using utils.wall, but now I should control the stress.

Best,
Bilal

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

> but setting the verletDist to 0 will prevent us from avoiding the collider to run at every time step, which will cause more computation time. Is it true?

not necessarily.
It makes collider to run fewer times, but potentially let more work on interaction geometry. Which is "cheap" for spheres, but "expensive" for polyhedrons.

> how can I choose a good value for the verletDist of non-spherical particles?

trial-and-error is a good approach here (try different values, determine the trend and choose the best one).
It depends on the simulation itself (shape of particles, density of the packing, ...), so probably a number cannot be set very generally..

cheers
Jan

Bilal Al Tfaily (bilaltf) said : #6

Thanks Jan Stránský, that solved my question.