Question #656538 on Yade changed: https://answers.launchpad.net/yade/+question/656538
Status: Answered => Open wise dan is still having a problem: THIS IS THE COMPLETE CODE: ########### ###################################################################### # INPUTS ###################################################################### gravity = 100 # box dimensions widthl = .3 widthr = .3 widthc = .3 height = .3 thick = .1 deep = -.2 # size of grains sizeMin = 40e-3 sizeMax = 60e-3 frictionAngle = .5 young = 1e8 # stiffness dt = 1e-3 # time step nGravityDeposition = 250 # how long to run initial gravity deposition nCycles = 3 # how many jumps to run afterwards nStepsBetweenCycles = 200 # number of time steps between jumps dspl = 20e-3 # how much larger the initial make cloud box should be fillBoxHFactor = 3 ###################################################################### from yade import polyhedra_utils width = widthl+widthc+widthr # mat, engines, ... mat = PolyhedraMat(young=young,poisson=10,frictionAngle=frictionAngle) O.materials.append(mat) O.engines=[ ForceResetter(), InsertionSortCollider([Bo1_Polyhedra_Aabb(),Bo1_Facet_Aabb()]), InteractionLoop( [Ig2_Polyhedra_Polyhedra_PolyhedraGeom(), Ig2_Facet_Polyhedra_PolyhedraGeom()], [Ip2_PolyhedraMat_PolyhedraMat_PolyhedraPhys()], [Law2_PolyhedraGeom_PolyhedraPhys_Volumetric()], ), NewtonIntegrator(damping=0.4,gravity=(0,0,-gravity)), PyRunner(iterPeriod=1,command='checker()'), ] O.dt = dt def checker(): for i in range(nCycles): ii = nGravityDeposition+i*nStepsBetweenCycles if O.iter == ii: moveBottom() if O.iter == ii+1: stopBottom() if O.iter == nGravityDeposition+nCycles*nStepsBetweenCycles: O.pause() def moveBottom(): v = dspl / O.dt for b in movables: b.state.vel = (0,0,-v) def stopBottom(): for b in movables: b.state.vel = (0,0,0) # box p000 = Vector3(0,0,0) p100 = Vector3(widthl,0,0) p200 = Vector3(widthl+widthc,0,0) p300 = Vector3(widthl+widthc+widthr,0,0) pxs = (p000,p100,p200,p300) p001,p101,p201,p301 = [p+Vector3(0,0,height) for p in pxs] p010,p110,p210,p310 = [p+Vector3(0,thick,0) for p in pxs] p011,p111,p211,p311 = [p+Vector3(0,thick,height) for p in pxs] p00b,p10b,p20b,p30b = [p+Vector3(0,0,deep) for p in pxs] p01b,p11b,p21b,p31b = [p+Vector3(0,thick,deep) for p in pxs] def rect(vs,**kw): v1,v2,v3,v4 = vs return [ facet((v1,v2,v3),**kw), facet((v1,v3,v4),**kw), ] movables = rect((p100,p200,p210,p110)) # bottom center rects = ( (p000,p100,p110,p010), # bottom left (p200,p300,p310,p210), # bottom left (p000,p010,p011,p001), # left (p300,p310,p311,p301), # right (p000,p100,p101,p001), # front left (p100,p200,p201,p101), # front center (p200,p300,p301,p201), # front right (p010,p110,p111,p011), # back left (p110,p210,p211,p111), # back center (p210,p310,p311,p211), # back right (p100,p200,p20b,p10b), # front center below (p110,p210,p21b,p11b), # back center below (p100,p110,p11b,p10b), # left below (p200,p210,p21b,p20b), # right below ) rects = movables + sum((rect(r) for r in rects),[]) O.bodies.append(rects) # gravel polyhedra_utils.fillBox((0,0,0),(width,thick,fillBoxHFactor*height),mat,sizemin=3*[sizeMin],sizemax=3*[sizeMax],seed=1) ########### #to record the values #O.forces.f(id) #sum((O.forces.f(id) for id in ids), Vector3.Zero) # #f = Vector3.Zero #for i in ids: # f += O.forces.f(i) middle = 0,1 lef= 2,3 right = 4,5 #trapdoor.state.displ() O.bodies[1].state.displ() ## for b in O.bodies: if not isinstance(b.shape,Polyhedra): continue pos = b.state.pos # center of polyhedron ori = b.state.ori vs = b.shape.v vs = [pos + ori*v for v in vs] # vertices of polyhedron in global coordinate system ## -- 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