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

    Status: Answered => Open

Lei Hang is still having a problem:
Thank you Jan,

The OS information is(Linux version 5.4.0-37-generic
(buildd@lcy01-amd64-001) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2))
#41-Ubuntu SMP Wed Jun 3 18:57:02 UTC 2020)

The method you provided solved my problem. But when I conduct the below script, 
why it can run normally? The position of 
"plot.saveDataTxt(O.tags['d.id']+'.data.bz2')" fllows the "O.pause()". It is 
not changed to behind the "waitIfBatch()". 
The script:
#
readParamsFromTable(damping=.2)     
from yade.params import table 

from yade import pack, plot

O.bodies.append(geom.facetBox((.5,.5,.5),(.5,.5,.5),wallMask=31))

# create empty sphere packing
# sphere packing is not equivalent to particles in simulation, it contains only 
the pure geometry
sp=pack.SpherePack()
# generate randomly spheres with uniform radius distribution
sp.makeCloud((0,0,0),(1,1,1),rMean=.05,rRelFuzz=.5)
# add the sphere pack to the simulation       

sp.toSimulation()

O.engines=[
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb()]),
        InteractionLoop(
                # handle sphere+sphere and facet+sphere collisions
                [Ig2_Sphere_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom()],
                [Ip2_FrictMat_FrictMat_FrictPhys()],
                [Law2_ScGeom_FrictPhys_CundallStrack()]
        ),
        NewtonIntegrator(gravity=(0,0,-9.81),damping=table.damping),
        # call the checkUnbalanced function (defined below) every 2 seconds
        PyRunner(command='checkUnbalanced()',realPeriod=2),
        # call the addPlotData function every 200 steps
        PyRunner(command='addPlotData()',iterPeriod=100)
]
O.dt=.5*PWaveTimeStep()

# enable energy tracking; any simulation parts supporting it
# can create and update arbitrary energy types, which can be
# accessed as O.energy['energyName'] subsequently
O.trackEnergy=True

# if the unbalanced forces goes below .05, the packing
# is considered stabilized, therefore we stop collected
# data history and stop
def checkUnbalanced():
        if unbalancedForce()<.05:
                O.pause()
                plot.saveDataTxt(O.tags['d.id']+'.data.bz2')
                # plot.saveGnuplot('bbb') is also possible

# collect history of data which will be plotted
def addPlotData():
        # each item is given a names, by which it can be the unsed in plot.plots
        # the **O.energy converts dictionary-like O.energy to plot.addData 
arguments
        plot.addData(i=O.iter,unbalanced=unbalancedForce(),**O.energy)

# define how to plot data: 'i' (step number) on the x-axis, unbalanced force
# on the left y-axis, all energies on the right y-axis
# (O.energy.keys is function which will be called to get all defined energies)
# None separates left and right y-axis
plot.plots={'i':('unbalanced',None,O.energy.keys)}

# show the plot on the screen, and update while the simulation runs
plot.plot()

O.run()               # run forever, until stopped by checkUnbalancedForce()
waitIfBatch()

O.saveTmp()
#

-- 
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     : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to