← Back to team overview

yade-users team mailing list archive

[Question #675797]: gridnode interaction with sphere cannot display the grid

 

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

I have learned examples in the folder of trunk/examples/grids/ on github. The example of "CohesiveGridConnectionSphere" deal with a line of girds interacting with a sphere. The example of Simple_Grid_Falling deals with a free falling grid plane. I want to simulate a 
scene where a moving mesh plane hits a sphere then the mesh plane deforms at the interaction spot and the the sphere gets momentum to move.   
So i combine the codes from the examples above. But when i run it, i can not see the mesh in the views, only the sphere(qt. View). Here is the code, 


from yade import qt, plot, geom  
from yade.gridpfacet import *
import numpy as np 
from pprint import pprint 

### materials definition###
O.materials.append(CohFrictMat(young=8e5,poisson=0.3,density=4e3,frictionAngle=radians(30),normalCohesion=4e4,shearCohesion=1e5,momentRotationLaw=False,label='spheremat'))

### engines#### 
O.engines=[
	ForceResetter(),
	InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_GridConnection_Aabb(),]),
	InteractionLoop(
            [Ig2_GridNode_GridNode_GridNodeGeom6D(), Ig2_Sphere_GridConnection_ScGridCoGeom()],#, Ig2_Facet_Sphere_ScGeom6D()],
		[Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=False)],
		[Law2_ScGeom6D_CohFrictPhys_CohesionMoment(), Law2_ScGridCoGeom_CohFrictPhys_CundallStrack()]
	),
    NewtonIntegrator(gravity=(0,0,0),damping=0.3,label='newton'),
    PyRunner(command='main()',iterPeriod=100),
#    PyRunner(iterPeriod=500, command='history()')
#    PyRunner(iterPeriod=1,command='changeValues()'),
]

### Parameters of a square grid ###
zl = 0.1 #z [m]
yl = 0.1	#y	[m]
nzl = 10	#number of nodes for the length	[#]
nyl = 10 	#number of nodes for the width	[#]
rssp = 2e-3
rscl = 2e-3   
color=[255./255.,102./255.,0./255.]
bblen = yl/(nyl-1)

nodesIds=[]
#Create all nodes first :
for i in np.linspace(0, yl, nyl):
	for j in np.linspace(0, zl, nzl):
		nodesIds.append(O.bodies.append(gridNode([0,i,j], rssp, 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<=bblen*1.01):
			O.bodies.append(gridConnection(i, j, rscl, color=color, material='spheremat'))


### the sphere ### 
spx, spy, spz = 20e-3, 50e-3, 10e-3    
rsp = 10e-3 
idsp=O.bodies.append(sphere([spx,spy,spz], rsp, wire=False, fixed=False, material='spheremat'))

### the top edge of the grid node, set a veloicty, make the mesh move ### 
mknodeids = [] 
for each in nodesIds:
    ez = O.bodies[each].state.pos[2]
    if ez > zl-0.5*bblen:
        mknodeids.append(each)
   
def main():
    for each in mknodeids:
        O.bodies[each].dynamic = False  
        O.bodies[each].state.vel[0] = 1.0   
        

qt.Controller() 
qt.View()

O.dt=1e-05    
O.run()


I find that if i remove the Ig2_Sphere_GridConnection_ScGridCoGeom(),  i can see the mesh in the view but it will go through the sphere if it is set a velocity,  that means there is no interaction between sphere and the mesh. I know the  Ig2_Sphere_GridConnection_ScGridCoGeom() is used to deal with interaction between the sphere and the cylinder. But why the example of "CohesiveGridConnectionSphere" succeed, the only difference is that my mesh is a 2d mesh. 

Then my question is that:
1. How can i adapt my code to realise my intention. 

2.  In fact, i want to simulate a deformable wiper sweeping particles. If the particle is too large, the wiper will deform to go over it. Does the gird module in yade works? 

Thanks a lot.
 
Xuesong Gao 

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