Interaction sphere grid.

Asked by tala

Hi,
I am trying to simulate a pull out of a geogrid. AT the beginning I want to deposit the grains and the geogrid in a box (layer of grains, grid, another layer of grains on the top) . The problem is that the geogrid is not blocked by the grains in the middle, seems that the interaction is not taken into account. The grid interpenetrate the deposited grains and goes out of the box.

This is my O.engines :
O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=1.2,label='aabb'),
  Bo1_GridConnection_Aabb(),Bo1_Box_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom6D(interactionDetectionFactor=1.2),Ig2_GridNode_GridNode_GridNodeGeom6D(),Ig2_Box_Sphere_ScGeom(),Ig2_Sphere_GridConnection_ScGridCoGeom()],
  [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=False),Ip2_FrictMat_FrictMat_FrictPhys()],
  [Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),Law2_ScGeom_FrictPhys_CundallStrack()]
 ),
        GlobalStiffnessTimeStepper(timestepSafetyCoefficient=0.6),
 NewtonIntegrator(gravity=(0,0,-0.1),damping=0.9,label='newton')
]

Question information

Language:
English Edit question
Status:
Answered
For:
Yade Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
Jérôme Duriez (jduriez) said :
#1

Hi,

It seems sphere-grid interaction has a "ScGridCoGeom" geometry (see the end of "Ig2_Sphere_GridConnection_ScGridCoGeom()" name).
Thus, your InteractionLoop has to include a Law2 that can deal with such interaction (geometry). It is not the case presently, you most probably need something like [1] or[2]

[1] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Law2_ScGridCoGeom_CohFrictPhys_CundallStrack
[2] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Law2_ScGridCoGeom_FrictPhys_CundallStrack

Revision history for this message
tala (tala-in) said :
#2

Hi Jerome,
Thank you for your answer, It is not working.
The problem is that the interaction is detected and is happening but when the grid is falling it does not stabilizes on the grains layer it continues to fall without to stop. this is the full code you can test it.
# encoding: utf-8

from yade import pack,geom,qt
from pylab import *
qt.View()
DENS=3000
YOUNG=3e6
def wallMat(): return FrictMat(young=YOUNG,frictionAngle=radians(0),density=DENS)

O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=1.2,label='aabb'),
  Bo1_GridConnection_Aabb(),Bo1_Box_Aabb()
 ]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(),Ig2_GridNode_GridNode_GridNodeGeom6D(),Ig2_Box_Sphere_ScGeom(),Ig2_Sphere_GridConnection_ScGridCoGeom()],
  [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=False),Ip2_FrictMat_FrictMat_FrictPhys()],
  [Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),Law2_ScGeom_FrictPhys_CundallStrack(),Law2_ScGridCoGeom_CohFrictPhys_CundallStrack()]
 ),
        GlobalStiffnessTimeStepper(timestepSafetyCoefficient=0.5),
 NewtonIntegrator(gravity=(0,0,-0.1),damping=0.9,label='newton',mask=1)
]
L=0.1 #length [m]
l=0.05 #width [m]
sp=pack.SpherePack()
O.materials.append(CohFrictMat(young=3e6,poisson=0.3,density=5000,frictionAngle=radians(30),normalCohesion=1e20,shearCohesion=1e20,momentRotationLaw=True,label='spheremat'))
O.materials.append(FrictMat(young=3e7,poisson=0.3,frictionAngle=radians(30),density=5000,label='spheres'))

### Parameters of a rectangular grid ###
L=0.1 #length [m]
l=0.05 #width [m]
nbL=10 #number of nodes for the length [#]
nbl=5 #number of nodes for the width [#]
r=L/100. #radius
color=[255./255.,102./255.,0./255.]
nodesIds=[]
#Create all nodes first :
for i in range(0,nbL):
 for j in range(0,nbl):
  nodesIds.append( O.bodies.append(gridNode([i*L/nbL,j*l/nbl,0.020],r,wire=False,fixed=False,material='spheremat',color=color)) )

#Create connection between the nodes
for i in range(0,len(nodesIds)):
 for j in range(i+1,len(nodesIds)):
  dist=(O.bodies[i].state.pos - O.bodies[j].state.pos).norm()
  if(dist<=L/nbL*1.01):
   O.bodies.append( gridConnection(i,j,r,color=color) )
xinf=-0.0010
xsup=L+0.001
X=xsup-xinf

yinf=-0.001
ysup=l+0.001
Y=ysup-yinf

zinf=-0.1
zsup=0.05
Z=zsup-zinf

oversizeFactor=2
thickness=0.001

O.bodies.append(utils.box(center=(xinf-thickness,ysup,zinf+Z/2.),extents=(thickness,oversizeFactor*Y/2,oversizeFactor*Z/2),material=wallMat,fixed=True,wire=True))
O.bodies.append(utils.box(center=(xsup+thickness,ysup,zinf+Z/2.),extents=(thickness,oversizeFactor*Y/2,oversizeFactor*Z/2),material=wallMat,fixed=True,wire=True))
O.bodies.append(utils.box(center=(xsup/2,ysup,zinf-thickness),extents=(oversizeFactor*X/2,oversizeFactor*Y/2,thickness),material=wallMat,fixed=True,wire=True))
O.bodies.append(utils.box(center=(xsup+thickness,yinf,zinf+Z/2.),extents=(thickness,oversizeFactor*Y/2,oversizeFactor*Z/2),material=wallMat,fixed=True,wire=True))
O.bodies.append(utils.box(center=(xinf-thickness,yinf,zinf+Z/2.),extents=(thickness,oversizeFactor*Y/2,oversizeFactor*Z/2),material=wallMat,fixed=True,wire=True))
O.bodies.append(utils.box(center=(xsup/2,yinf,zinf-thickness),extents=(oversizeFactor*X/2,oversizeFactor*Y/2,thickness),material=wallMat,fixed=True,wire=True))
O.bodies.append(utils.box(center=(xsup/2,ysup,zsup/2),extents=(oversizeFactor*X/2,thickness,oversizeFactor*Z/2),material=wallMat,fixed=True,wire=True))
O.bodies.append(utils.box(center=(xsup/2,yinf,zsup/2),extents=(oversizeFactor*X/2,thickness,oversizeFactor*Z/2),material=wallMat,fixed=True,wire=True))
num1=sp.makeCloud((0,0,0.03),(L,l,0.03+0.1),rRelFuzz=0.1,rMean=0.01,num=2000,periodic=False,seed=1)
num=sp.makeCloud((0,0,-0.08),(L,l,-0.08+0.1),rRelFuzz=0.1,rMean=0.01,num=2000,periodic=False,seed=1)
O.bodies.append([sphere(s[0],s[1],material='spheres') for s in sp])

Revision history for this message
Kneib François (francois-kneib) said :
#3

Hi Tala,

It seems that you started from the grid example I made in the source code, that's a good point. But it is not very complete as it doesn't gives a sphere-grid example, sorry for that.

I saw a couple of things that will solve you problem :
- remove the "mask" attribute to NewtonIntegrator (at least in my "old" Yade version, the grid will not fall otherwise)
- use Law2_ScGridCoGeom_FrictPhys_CundallStrack() instead of Law2_ScGridCoGeom_CohFrictPhys_CundallStrack()
The Sphere-Grid contact is not cohesive, right ?
At this point, if you launch the code, all should explode at the first iteration. But it's normal :-D. The code is developed to handle any gridCo-gridCo interactions, except in the case of two adjacent (and connected) connections. So you have to avoid two connected nodes to interact, either by adding "Ig2_GridConnection_GridConnection_GridCoGridCoGeom()" in your IGs, or by playing with "avoidSelfInteractionMask".
- now it works.

Warning, I saw an initial overlap of your lower sphere packing and the grid, did you probably forgot a radius somewhere ...

Can you help with this problem?

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

To post a message you must log in.