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

    Status: Open => Answered

Jan Stránský proposed the following answer:
Hello,
what is written in the script directly (not in function etc) is executed and 
never called again (like O.bodies[1].state.displ()). To be able to plot the 
data, first you need to coleect the data during simulation:

#############
from yade import plot # put such import at the beginning of the file

...

O.engines = [
   ...
   PyRunner(iterPeriod=10,command='plotAddData()'),
]

...

def computeSurfaceDisplacement():
   vertices = []
   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
      vertices.extend(vs)
   maxZ = max(v[2] for v in vertices) # you would need something much more 
sophisticated, just to give you an idea
   return maxZ
##

def plotAddData():
   sd = computeSurfaceDisplacement()
   plot.addData(
      i = O.iter,
      tDspl = O.bodies[1].state.displ(),
      fLeft = sum(O.forces.f(id)[2] for id in (2,3)),
      surfDspl = sd,
   )

plot.plots = {'i':'surfDspl', 'i ':'fLeft', 'i  ':'tDspl'}
##############

for proper surfaceDisplacement, you would probably need some record of 
"initial" surface after gravity deposition. You can do it in checker function:
#############
def checker():
   if O.iter == nGravityDeposition:
      recordInitialSurface()
   ...

def recordInitialSurface():
   global initSurf
   ... # some code here to "save" what the surface is
#############

cheers
Jan

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