Question #706302 on Yade changed: https://answers.launchpad.net/yade/+question/706302
内山康太郎 posted a new comment: #Current Program from __future__ import print_function from yade import pack,plot,polyhedra_utils,geom from yade import export,qt from yade.gridpfacet import * import math import numpy as np import os frictangle = np.radians(25)#45do density = 3400.0 young = 3e8 gravity = (0.0, 0.0, 0) velocity_cyl=5 velocity_cyl_idsCyl2=5 velocity_cyl_Box=5 # create cloud of spheres and insert them into the simulation # we give corners, mean radius, radius variation ############################################### #Create sphere ############################################### mat_sp = CohFrictMat(alphaKr=.2,alphaKtw=.2,young = young, poisson = 0.35,frictionAngle=(frictangle), density=density) O.materials.append(mat_sp) pred=pack.inCylinder(centerBottom=(0,0,0.0),centerTop=(0,0,.02),radius=.03) sp0=pack.randomDensePack(pred,spheresInCell=3000,radius=.0004) O.bodies.append(sp0) ############################################### #Boundary creation ############################################### idsCyl1 = O.bodies.append(geom.facetCylinder((0, 0, 0.005), radius=.03, height=.01, segmentsNumber=30, wallMask=6)) idsCyl2 = O.bodies.append(geom.facetCylinder((0, 0, .015), radius=.03, height=.01, segmentsNumber=30, wallMask=5)) #idsCyl3 = O.bodies.append(geom.facetCylinder((0, 0, .0225), radius=0.10, height=.005, segmentsNumber=100, wallMask=2)) radius1 = .03 radius2 = .15 fixBoxIds=[] moveBoxIds=[] i=0 for i in range(0,365,5): r = math.radians(i) x1 = radius1 * math.cos(r) y1 = radius1 * math.sin(r) x2 = radius2 * math.cos(r-math.radians(5)) y2 = radius2 * math.sin(r-math.radians(5)) x3 = radius2 * math.cos(r+math.radians(5)) y3 = radius2 * math.sin(r+math.radians(5)) x4 = radius1 * math.cos(r-math.radians(5)) y4 = radius1 * math.sin(r-math.radians(5)) x5 = radius1 * math.cos(r+math.radians(5)) y5 = radius1 * math.sin(r+math.radians(5)) x6 = radius2 * math.cos(r) y6 = radius2 * math.sin(r) fixBoxIds.append(O.bodies.append(facet([(x1,y1,.01),(x2,y2,.01),(x3,y3,.01)]))) fixBoxIds.append(O.bodies.append(facet([(x4,y4,.01),(x5,y5,.01),(x6,y6,.01)]))) moveBoxIds.append(O.bodies.append(facet([(x1,y1,.01),(x2,y2,.01),(x3,y3,.01)]))) moveBoxIds.append(O.bodies.append(facet([(x4,y4,.01),(x5,y5,.01),(x6,y6,.01)]))) upper_plate=box((0,0,-0.001),(0.06,0.06,0.001)) upper_plateID=O.bodies.append(upper_plate) O.bodies[upper_plateID].state.blockedDOFs = 'xyXY' #O.forces.addF(upper_plateID,(0,0,50e3),permanent=True) O.forces.setPermF(upper_plateID,(0,0,100e3)) ############################################### #engines ############################################### O.engines = [ ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb(),Bo1_Box_Aabb()]), InteractionLoop( # interaction loop [Ig2_Sphere_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()], [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys()], [Law2_ScGeom6D_CohFrictPhys_CohesionMoment(always_use_moment_law=True),Law2_ScGeom_FrictPhys_CundallStrack()] ), NewtonIntegrator(gravity=gravity,damping=0.2), ##TranslationEngine(translationAxis=[0,0,1],velocity=-1,ids=idsCyl3), TranslationEngine(translationAxis=[1,0,0],velocity=velocity_cyl_idsCyl2,ids=idsCyl2), TranslationEngine(translationAxis=[1,0,0],velocity=velocity_cyl_Box,ids=moveBoxIds), PyRunner(command='checkStress()', iterPeriod=10), #PyRunner(command='checkStress_NO()', iterPeriod=10), PyRunner(command='plotPlotData()',iterPeriod=1), ] def checkStress(): cylDisplacement_x = O.bodies[idsCyl2[0]].state.displ()[0] cylDisplacement_y = O.bodies[idsCyl2[0]].state.displ()[1] plot.addData( cylDisplacement_x=cylDisplacement_x, cylDisplacement_y=cylDisplacement_y, ) print('{:1.04f}'.format(cylDisplacement_x)," ", '{:1.04f}'.format(cylDisplacement_y)) ############################################### #Definition of distortion ############################################### def checkStress_1(): if O.bodies[idsCyl2[0]].state.displ()[0] > 0.020: O.pause() def checkStress_2(): if O.bodies[idsCyl2[0]].state.displ()[1] > 0.020: O.pause() def checkStress_3(): if O.bodies[idsCyl2[0]].state.displ()[0] < -0.020: O.pause() def checkStress_4(): if O.bodies[idsCyl2[0]].state.displ()[1] < -0.020: O.pause() def checkStress_5(): if O.bodies[idsCyl2[0]].state.displ()[0] > 0.0020: O.pause() ############################################### #output ############################################### sp_num = len([b for b in O.bodies if isinstance(b.shape, Sphere)]) # 粒子の総数をカウント print("number of spheres = ",sp_num) O.dt=0.5*PWaveTimeStep() def plotPlotData(): pipe_force_x = sum([O.forces.f(i)[0] for i in idsCyl2]) pipe_force_y = sum([O.forces.f(i)[1] for i in idsCyl2]) cylDisplacementx = O.bodies[idsCyl2[0]].state.displ()[0] cylDisplacementy = O.bodies[idsCyl2[0]].state.displ()[1] cylDisplacementz = O.bodies[idsCyl2[0]].state.displ()[2] Dz=upper_plate.state.displ()[2] plot.addData( i=O.iter, disp=O.time*velocity_cyl, force_x=pipe_force_x, force_y=pipe_force_y, Dz=Dz, cylDisplacementx=cylDisplacementx, cylDisplacementy=cylDisplacementy, cylDisplacementz=cylDisplacementz, ) plot.saveDataTxt('pipe_force.out',vars=('disp','force_x','force_y', 'Dz', 'cylDisplacementx','cylDisplacementx','cylDisplacementx' )) plot.plots={ 'disp':('force_x','force_y'), 'i':('Dz'), 'cylDisplacementx':('cylDisplacementy',) } plot.plot() #plot.saveDataTxt(O.tags['id'] + '.txt') -- You received this question notification because your team yade-users is an answer contact for Yade. _______________________________________________ Mailing list: https://launchpad.net/~yade-users Post to : yade-users@lists.launchpad.net Unsubscribe : https://launchpad.net/~yade-users More help : https://help.launchpad.net/ListHelp