← Back to team overview

yade-users team mailing list archive

[Question #688528]: Multiple Geogrids

 

New question #688528 on Yade:
https://answers.launchpad.net/yade/+question/688528

Dear all,

I'm modelling the interaction of different particle layers separeted by geogrids. However, I came to this practical implementation of multiple geogrids, I couldn't find in the examples and I am facing troubles to create the grid layers in the conventional way:

from yade import pack,geom,qt
from yade.gridpfacet import *
from pylab import *

O.engines=[
	ForceResetter(),
	InsertionSortCollider([
		Bo1_Sphere_Aabb(),Bo1_Facet_Aabb(),Bo1_GridConnection_Aabb(),
	]),
	InteractionLoop(
		[Ig2_Sphere_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom(),Ig2_GridNode_GridNode_GridNodeGeom6D(),Ig2_Sphere_GridConnection_ScGridCoGeom(),Ig2_GridConnection_GridConnection_GridCoGridCoGeom()],
		[Ip2_FrictMat_FrictMat_FrictPhys(),Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=False)],
		[Law2_ScGeom_FrictPhys_CundallStrack(),Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),Law2_ScGridCoGeom_FrictPhys_CundallStrack()]
 ),
	NewtonIntegrator(gravity=(0,0,-5),damping=0.3,label='newton')
]

O.materials.append(FrictMat(young=10e7,poisson=.25,frictionAngle=0.5,density=1e2,label='sphere'))
O.materials.append(FrictMat(young=10e7,poisson=.25,frictionAngle=0.5,density=1e2,label='walls'))
O.materials.append(CohFrictMat(young=3e5,poisson=0.3,density=1e1,frictionAngle=10,normalCohesion=1e7,shearCohesion=1e7,momentRotationLaw=True,label='spheremat'))


### Parameters of a rectangular grid 1 ###
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],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) )

### Parameters of a rectangular grid 2 ###
L2=0.1 #length [m]
l2=0.05	#width	[m]
nbL2=10	#number of nodes for the length	[#]
nbl2=5	#number of nodes for the width	[#]
r2=L2/100.	#radius
color2=[255./255.,102./255.,0./255.]
nodesIds2=[]
#Create all nodes first :
for q in range(0,nbL):
	for u in range(0,nbl):
		nodesIds2.append( O.bodies.append(gridNode([q*L2/nbL2,u*l2/nbl2,0.05],r2,wire=False,fixed=False,material='spheremat',color=color)) )

#Create connection between the nodes
for q in range(0,len(nodesIds2)):
	for u in range(q+1,len(nodesIds2)):
		dist2=(O.bodies[q].state.pos - O.bodies[u].state.pos).norm()
		if(dist2<=L2/nbL2*1.01):
			O.bodies.append( gridConnection(q,u,r2,color=color) )

#O.bodies.append([sphere((0.05,0.025,0.05),.01, material='sphere')])
mn,mx=Vector3(0.01,0,0.015),Vector3(0.09,0.04,0.1) #m
sp=pack.SpherePack()
sp.makeCloud(mn,mx,rMean=0.005)
sp.toSimulation(material='sphere')

mn1,mx1=Vector3(0.01,0,-0.02),Vector3(0.09,0.04,-0.1) #m
spp=pack.SpherePack()
spp.makeCloud(mn1,mx1,rMean=0.005)
spp.toSimulation(material='sphere')

O.bodies.append(geom.facetBox((0.05,0.02,0),(0.045,0.0245,0.11),wallMask=1+2+4+8+16+32,material='walls'))

O.dt=1e-05
O.saveTmp()
qt.View()


Do you have any idea of how to implement it? The issue is on creating the connection:
		if(dist2<=L2/nbL2*1.01):
			O.bodies.append( gridConnection(q,u,r2,color=color) )

Thank you in advance,
Luis

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.