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

    Status: Needs information => Open

JOHN gave more information on the question:
Thank you for the reply,
the problem is that it doesnt output anything
i changed the radius to 
                
sp=pack.randomDensePack(pack.inAlignedBox((-10,40,3),20,50,10)),spheresInCell=1000,radius=.5,memoizeDb='/tmp/triaxPackCache.sqlite')

and now i get the much more informative

Traceback (most recent call last):
  File "calltest.py", line 8, in <module>
    run()
  File "/home/john/Desktop/yade/DONE/test.py", line 44, in run
    for c,r in sp:
TypeError: 'Body' object is not iterable


(+the rest of the warnigns)


my full code is


import sys
import os

os.system("ln -s /usr/bin/yade yadeimport.py")
from yadeimport import yade

import gts
from yadeimport import *
from yade import ymport
from yade import qt
import math
def printing():
        for b in O.bodies:
                if isinstance(b.shape,Sphere):
                        print b.id,b.state.pos[0],b.state.pos[1],b.state.pos[2]


def run():
                
                
                
                facets = ymport.stl('maze4lid.stl')
                rod1 = O.bodies.append(facets)
                

                # converts facets to gts (see the other question)
                s = gts.Surface()
                for facet in facets:
                   vs = [facet.state.pos + facet.state.ori*v for v in 
facet.shape.vertices]
                   vs = [gts.Vertex(v[0],v[1],v[2]) for v in vs]
                   es = [gts.Edge(vs[i],vs[j]) for i,j in ((0,1),(1,2),(2,0))]
                   f = gts.Face(es[0],es[1],es[2])
                   s.add(f)
                print s.is_closed()
                threshold = 1e-3
                s.cleanup(threshold)
                print s.is_closed()
                assert s.is_closed()
                a=(0,-9.81,0)
                # use gts to filter spheres
                pred = inGtsSurface(s)
                
sp=pack.randomDensePack(pack.inAlignedBox((-10,40,3),(20,50,10)),spheresInCell=1000,radius=.5,memoizeDb='/tmp/triaxPackCache.sqlite')
                # remove spheres completely inside walls
                for c,r in sp:
                   if pred(c,0):
                      continue
                   O.bodies.append(sphere(c,r))

                # remove spheres partially inside walls
                O.dt = 0
                O.step() # interactions are created afterwards
                toErase = set()
                for i in O.interactions:
                   b1,b2 = [O.bodies[i] for i in (i.id1,i.id2)]
                   if any(isinstance(b.shape,Facet) for b in (b1,b2)): # if 
facet is involved, delete
                      toErase.add(b1)
                      toErase.add(b2)
                toErase = [b for b in toErase if isinstance(b.shape,Sphere)] # 
delete just spheres
                for b in toErase: # delete the spheres
                   O.bodies.erase(b.id)
                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,-9.81,0),damping=0.4, 
label='newtonInt'),
                  # PyRunner(iterPeriod=5,command='printing()'),
                   
VTKRecorder(fileName='/home/john/Desktop/yade/DONE/vis/3d-vtk-',recorders=['spheres'],iterPeriod=100),
                   PyRunner(iterPeriod=1,command='gravity(a)'),
                   PyRunner(iterPeriod=1,command='checkAndDelete()'),


                ]
                O.dt=.8*PWaveTimeStep()
                O.step()
                



def irun(num):


        
                O.run(num,1)
                print O.time
                #printing()

def strategy():
                a=(9.81,0,0)
                return a
def gravector(a):
        b=a
        


def gravity(a):
                        
                        newtonInt.gravity = a



def checkAndDelete():
           for b in O.bodies:
                if isinstance(b.shape,Sphere):
                         x,y,z = b.state.pos
                         if  y<-90: # modify this condition to your needs
                                 O.bodies.erase(b.id)



and is called via a python script


import sys
import os
from test import *
from yadeimport import *


a=(9.81,0,0)
run()
irun(1000)
a=(0,-9.81,0)
irun(3000)

(which worked untill the randomdensepack addition)

Cheers 
John

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