Advertisement
Guest User

Yade

a guest
Mar 19th, 2018
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.39 KB | None | 0 0
  1. # -*- coding: utf-8
  2. from yade import qt,plot
  3. from yade.gridpfacet import *
  4. import math
  5. math.pi
  6.  
  7. ##################
  8. ### PARAMETERS ###
  9. ##################
  10. phi=20.
  11. E=5.*1e10
  12. color=[255./255.,102./255.,0./255.]
  13. r=0.05
  14. density_sp = 2700
  15.  
  16. # position of imported mesh
  17. xpafet=7.5
  18. ypafet=1.1
  19. zpafet=7.5
  20.  
  21. ################
  22. ### ENGINES  ###
  23. ################
  24. O.engines=[
  25.     ForceResetter(),
  26.     InsertionSortCollider([
  27.         Bo1_PFacet_Aabb(),
  28.         Bo1_Sphere_Aabb(),
  29.     ]),
  30.     InteractionLoop([
  31.         Ig2_GridNode_GridNode_GridNodeGeom6D(),
  32.         Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
  33. #       Ig2_Sphere_GridConnection_ScGridCoGeom(),
  34.         Ig2_GridConnection_PFacet_ScGeom(),
  35.         Ig2_Sphere_PFacet_ScGridCoGeom(),
  36.         Ig2_PFacet_PFacet_ScGeom(),
  37.     ], 
  38.     [
  39.         Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=True),
  40.         Ip2_FrictMat_FrictMat_FrictPhys()
  41.     ],
  42.     [
  43.         Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),
  44.         Law2_ScGeom_FrictPhys_CundallStrack(),
  45.         Law2_ScGridCoGeom_FrictPhys_CundallStrack(),
  46.         Law2_GridCoGridCoGeom_FrictPhys_CundallStrack()
  47.     ]
  48.     ),
  49.     GlobalStiffnessTimeStepper(timestepSafetyCoefficient=0.5,label='ts'),
  50.     NewtonIntegrator(gravity=(0,-9.81,0),damping=0.0,label='newton'),
  51.     PyRunner(iterPeriod=200,command='history()'),
  52. ]
  53.  
  54. ################
  55. ### MATERIAL ###
  56. ################
  57. O.materials.append( CohFrictMat( young=E/100,poisson=0.3,density=2700,frictionAngle=radians(phi),normalCohesion=1e100,shearCohesion=1e100,momentRotationLaw=True,label='gridNodeMat1' ) )  # material to create the gridConnections
  58. O.materials.append( CohFrictMat( young=E/100,poisson=0.3,density=1,frictionAngle=radians(phi),normalCohesion=1e100,shearCohesion=1e100,momentRotationLaw=True,label='gridConMat1' ) )
  59. O.materials.append( CohFrictMat( young=E,poisson=0.3,density=2700,frictionAngle=radians(phi),normalCohesion=1e100,shearCohesion=1e100,momentRotationLaw=True,label='gridNodeMat2' ) )
  60. O.materials.append( CohFrictMat( young=E,poisson=0.3,density=2700,frictionAngle=radians(phi),normalCohesion=1e100,shearCohesion=1e100,momentRotationLaw=True,label='gridConMat2' ) )
  61. O.materials.append( FrictMat( young=E,poisson=0.3,density=2700,frictionAngle=radians(phi),label='pFacetMat') )  # material for general interactions
  62. O.materials.append( FrictMat( young=E,poisson=0.3,density=density_sp,frictionAngle=radians(phi),label='sphereMat' ) )
  63.  
  64. ########################################
  65. ### GENERATE THE WALL AND THE SPHERE ###
  66. ########################################
  67.  
  68. # FIXED WALL
  69. N=30
  70. IdNodes = []
  71. for i in range(N):
  72.     for j in range(N):
  73.         IdNodes.append(O.bodies.append( gridNode([5*i*1e-1,0,5*j*1e-1],r,wire=False,fixed=False,material='gridNodeMat1',color=color) ))
  74.         if i == 0 or i == (N-1) or j == 0 or j == (N-1):
  75.             O.bodies[IdNodes[-1]].state.blockedDOFs='xyzXYZ'
  76. for i in range(N*N-1):
  77.     if i<(N*N-N):
  78.         IdNodes.append(O.bodies.append( gridConnection(IdNodes[i],IdNodes[i+N],r,color=color,material='gridConMat1')))
  79.     if (i+1)%N==0:
  80.         continue   
  81.     IdNodes.append(O.bodies.append( gridConnection(IdNodes[i],IdNodes[i+1],r,color=color,material='gridConMat1') ))
  82.     if i<(N*N-N):
  83.         IdNodes.append(O.bodies.append( gridConnection(IdNodes[i],IdNodes[i+1+N],r,color=color,material='gridConMat1')))
  84. for i in range(N*N-1)
  85.     if (i+1)%N==0:
  86.         continue
  87.     if i<(N*N-N-1):
  88.         IdNodes.append(O.bodies.append( pfacet(IdNodes[i],IdNodes[i+1],IdNodes[i+N+1],wire=False,material='pFacetMat',color=color) ))
  89.         IdNodes.append(O.bodies.append( pfacet(IdNodes[i],IdNodes[i+N],IdNodes[i+1+N],wire=False,material='pFacetMat',color=color) ))
  90.  
  91. # LOWER MESH
  92. N=30
  93. IdNodes2 = []
  94. for i in range(N):
  95.     for j in range(N):
  96.         IdNodes2.append(O.bodies.append( gridNode([5*i*1e-1,-1,5*j*1e-1],r,wire=False,fixed=False,material='gridNodeMat2',color=color) ))
  97.         O.bodies[IdNodes2[-1]].state.blockedDOFs='xyzXYZ'
  98. for i in range(N*N):
  99.     m = O.bodies[IdNodes[i]].id
  100.     n = O.bodies[IdNodes2[i]].id
  101.     print (m,n)
  102.     O.bodies.append( gridConnection(IdNodes[i],IdNodes2[i],r,color=color,material='gridConMat2') )
  103.  
  104.  
  105. O.bodies.append(sphere(Vector3(xpafet,ypafet,zpafet), radius=20*r, wire=False, fixed=False, material='sphereMat', color=[1,0,0]))
  106.  
  107. ############
  108. ### PLOT ###
  109. ############
  110. init_pos = 0 #change it
  111. m = O.bodies[-1].state.mass
  112. #m = density_sp * 4/3 * pi * (20*r)**(3)
  113. def history():
  114.   xyz=[]
  115.   pot = 0
  116.   pot+=m * (9.81) * (O.bodies[-1].state.pos[1]-ypafet)
  117.   kin = 0
  118.   vel = O.bodies[-1].state.vel.norm()
  119.   kin+=(m/2) * vel**(2)
  120.   Force = 0
  121.  
  122.   for i in range(5163): #impatto in prossimità di un nodo
  123.     d = dist(O.bodies[IdNodes[i]],O.bodies[-1])
  124.     if d <= (21.3)*r: #check if the value can be lower    
  125.       print (i)
  126.       break
  127.  
  128.   for k in [0,1,2]:
  129.     ksum=0
  130.     ksum+=O.bodies[-1].state.pos[k]
  131.     xyz.append(ksum)  # take average value as reference
  132.   plot.addData(i=O.iter,t=O.time,time=O.time,tt=O.time,x=xyz[0],y=xyz[1],z=xyz[2],pot_en=pot,kin_en=kin,tot_en=pot+kin,pen=abs(O.bodies[IdNodes[i]].state.pos[1]-init_pos),Force=O.forces.f(O.bodies[IdNodes[i]].id)[1])
  133. plot.plots={'x':'y','t':('pot_en','kin_en','tot_en'),'time':'pen','tt':'Force'}
  134. plot.plot(subPlots = False)
  135.  
  136. def dist(a,b):
  137.     return math.sqrt((a.state.pos[0]-b.state.pos[0])**2+(a.state.pos[1]-b.state.pos[1])**2+(a.state.pos[2]-b.state.pos[2])**2)
  138.  
  139.  
  140. ##########
  141. ## VIEW ##
  142. ##########
  143.  
  144. qt.Controller()
  145. qtv = qt.View()
  146. qtr = qt.Renderer()
  147. qtr.light2=True
  148. qtr.lightPos=Vector3(1200,1500,500)
  149. qtr.bgColor=[1,1,1]
  150.  
  151. O.saveTmp()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement