New question #704485 on Yade: https://answers.launchpad.net/yade/+question/704485
I have assigned permanent forces of 1,000 acting along the z-axis to the facets. I expected that the facets will move due to the unbalanced forces (because it has no reaction forces). However, it will not move at all. Does the contacting force of body is different with the conventional forces acting on the rigid body surface? Thanks in advance. -- OS : Ubuntu 22.10 YADE : 2022.01a The followings are MWE === from yade import pack, plot import sys sys.path.append('/home/jinsun/Dropbox/Yadee/CDSS') def setGeomVars (): # initialize variables width = 0.05 height = 0.03 margin = 30 # Calculate extra length dx = width/100/2*margin dy = width/100/2*margin dz = height/100/2*margin saveVars('geoms',loadnow=True,**locals()) setGeomVars () from yade.params.geoms import * # load initilized variables # side pannel p1s = (-width/2,-width/2-dy,-height/2-dz) p5s = (-width/2,-width/2-dy,height/2+dz) p6s = (-width/2,width/2+dy,height/2+dz) p2s = (-width/2,width/2+dy,-height/2-dz) side1_1 = utils.facet(vertices=[p1s,p5s,p2s], wire=True, highlight=False) #p1 p5 p2 side1_2 = utils.facet(vertices=[p2s,p5s,p6s], wire=True, highlight=False) #p1 p5 p2 O.bodies.append(side1_1) O.bodies.append(side1_2) p4s = (width/2,-width/2-dy,-height/2-dz) p8s = (width/2,-width/2-dy,height/2+dz) p7s = (width/2,width/2+dy,height/2+dz) p3s = (width/2,width/2+dy,-height/2-dz) side2_1 = utils.facet(vertices=[p4s,p8s,p3s], wire=True, highlight=False) #p1 p5 p2 side2_2 = utils.facet(vertices=[p3s,p8s,p7s], wire=True, highlight=False) #p1 p5 p2 O.bodies.append(side2_1) O.bodies.append(side2_2) # front pannel p1f = (-width/2-dx,-width/2,-height/2-dz) p5f = (-width/2-dx,-width/2,height/2+dz) p4f = (width/2+dx,-width/2,-height/2-dz) p8f = (width/2+dx,-width/2,height/2+dz) front1 = utils.facet(vertices=[p1f,p5f,p8f], wire=True, highlight=False) front2 = utils.facet(vertices=[p1f,p8f,p4f], wire=True, highlight=False) O.bodies.append(front1) O.bodies.append(front2) # back pannel p2b = (-width/2-dx,width/2,-height/2-dz) p6b = (-width/2-dx,width/2,height/2+dz) p3b = (width/2+dx,width/2,-height/2-dz) p7b = (width/2+dx,width/2,height/2+dz) back1 = utils.facet(vertices=[p2b,p6b,p7b], wire=True, highlight=False) back2 = utils.facet(vertices=[p2b,p7b,p3b], wire=True, highlight=False) O.bodies.append(back1) O.bodies.append(back2) #bottom pannel p1bt = (-width/2-dx,-width/2-dy,-height/2) p2bt = (-width/2-dx,width/2+dy,-height/2) p3bt = (width/2+dx,width/2+dy,-height/2) p4bt = (width/2+dx,-width/2-dy,-height/2) bot1 = utils.facet(vertices=[p1bt,p2bt,p3bt], wire=True, highlight=False) bot2 = utils.facet(vertices=[p1bt,p4bt,p3bt], wire=True, highlight=False) O.bodies.append(bot1) O.bodies.append(bot2) # create topcap p5t = (-width/2-dx,-width/2-dy,height/2+2*dz) p6t = (-width/2-dx,width/2+dy,height/2+2*dz) p7t = (width/2+dx,width/2+dy,height/2+2*dz) p8t = (width/2+dx,-width/2-dy,height/2+2*dz) topcap1 = utils.facet(vertices=[p5t,p6t,p7t], wire=True, highlight=False) topcap2 = utils.facet(vertices=[p5t,p8t,p7t], wire=True, highlight=False) O.bodies.append(topcap1) O.bodies.append(topcap2) no_bodies = len(O.bodies) O.bodies[no_bodies-1].shape.highlight = True O.bodies[no_bodies-2].shape.highlight = True top_caps = range(no_bodies-2, no_bodies) # O.materials.append(FrictMat(young=20e6, poisson=0.17, density=2000, label='frictmat')) O.engines = [ ForceResetter(), InsertionSortCollider([Bo1_Sphere_Aabb(), Bo1_Facet_Aabb()]), InteractionLoop( [Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom()], # collision geometry [Ip2_FrictMat_FrictMat_FrictPhys()], # collision "physics" [Law2_ScGeom_FrictPhys_CundallStrack()] # contact law -- apply forces ), NewtonIntegrator(gravity=(0, 0, -9.81), damping=0.02), # PyRunner(command='addData()', iterPeriod=100), PyRunner(command='addPlotData()', iterPeriod=100), # ForceEngine(force=(0,0,-1000),ids=top_caps, label="ovp"), # ServoPIDController(axis=(0,0,1), ids=top_caps, target=servo_targetForce, kD=5.0, kI=5.0, kP=5.0, maxVelocity=-0.01, iterPeriod=100, label="servo_1"), DomainLimiter(lo=(-width,-width,-height+2*dz), hi=(width,width,2*height), iterPeriod = 100, label = 'Domain') # destroy balls outside domain in every 100 steps ] def addPlotData(): top_cap_force=(O.forces.f(no_bodies-2)[2] + O.forces.f(no_bodies-2)[2]) top_cap_zdisp=O.bodies[no_bodies-2].state.displ()[2] # direction in z plot.addData(i=O.iter, top_cap_force=top_cap_force, w=O.iter, top_cap_zdisp=top_cap_zdisp) plot.plots={'i':('top_cap_force',), 'w':('top_cap_zdisp',)} plot.plot() O.forces.setPermF(O.bodies[-1].id,(0,0,-1000)) O.forces.setPermF(O.bodies[-2].id,(0,0,-1000)) O.dt=0.5*PWaveTimeStep() O.run() -- 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