Question #702877 on Yade changed:
https://answers.launchpad.net/yade/+question/702877

孙灿 posted a new comment:
My code is as follows:

from yade import pack,plot
O.bodies.append(geom.facetBox((0.05, 9, 10), (0.1, 9, 10), wallMask=63))
sp = pack.SpherePack()
sp.makeCloud(Vector3(0.05,0,0),Vector3(0.05,18,20), rMean=0.1, rRelFuzz=1/3)
sp.toSimulation()

(xdim,ydim,zdim)= aabbDim()
print("Height is ",zdim)

for b in O.bodies:
   if isinstance(b.shape,Sphere):
       b.state.blockedDOFs='ZxY'
       b.shape.color=(3.,2.,1.)

circleRadius=1.5
circleCenter = Vector3(0.05,6,6)
circleRadius1=1.5
circleCenter1 = Vector3(0.05,12,6)

O.engines = [
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb(), Bo1_Facet_Aabb()]),
        InteractionLoop(
                [Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom()],
                [Ip2_FrictMat_FrictMat_FrictPhys()],
                [Law2_ScGeom_FrictPhys_CundallStrack()]
        ),
        NewtonIntegrator(gravity=(0, 0, -9.81), damping=0.4),
        PyRunner(command='checkUnbalanced()', realPeriod=2),
        PyRunner(command='addPlotData()', iterPeriod=100)
]
O.dt = 0.5 * PWaveTimeStep()
O.trackEnergy = True

def checkUnbalanced():
        if unbalancedForce() < .05:
                O.pause()
                plot.saveDataTxt('bbb.txt.bz2')
                zMax = max(b.state.pos[2] for b in O.bodies if 
isinstance(b.shape,Sphere))
                print("Z ",zMax)
                layer = zMax-0.25
                for b in O.bodies:
                    if isinstance(b.shape,Sphere):
                        #b.state.blockedDOFs='zxy'
                        b.state.vel=(0,0,0)
                        b.state.angVel=(0,0,0)
                    d = (b.state.pos - circleCenter).norm() 
                    d1 = (b.state.pos - circleCenter1).norm()
                    if d < circleRadius:
                       O.bodies.erase(b.id)
                    if d1 < circleRadius1:
                       O.bodies.erase(b.id)
                    #print(b.state.pos) 
                    if b.state.pos[2]>layer:
                        print(b.id,b.state.pos) 
                #zMax = max(b.state.pos[2] for b in O.bodies)

                #zMax = max(b.state.pos[2] for b in O.bodies)
                #print("Z ",zMax)
                (xdim,ydim,zdim)= aabbDim()

                print("Height is ",zdim)

def addPlotData():
        plot.addData(i=O.iter, unbalanced=unbalancedForce(), **O.energy)


O.saveTmp()

from yade import qt
#qt.Controller()
qt.View()


I use print (b.id, b.state.pos) to output the id and coordinates of the 
particle. For example, the id of a particle is 1, in the print (b.id, 
b.state.pos) I know its coordinates at this time, and then I run the code 
again, the coordinates of the particle will change, at this time I can directly 
call the particle with id 1, get the coordinates after running it?

-- 
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

Reply via email to