yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #18683
Re: [Question #677402]: Count number of fragments
Question #677402 on Yade changed:
https://answers.launchpad.net/yade/+question/677402
Status: Open => Answered
Jan Stránský proposed the following answer:
Hello,
1) there was wrong indentation in your code, should be:
######################################Using functions provided by Jan#################################################
def addBodyToAggreg(body,aggreg): # auxiliary function, add body [yade.Body instance] and all its neighbors into aggreg (python set instance)
if body.id in aggreg: # do nothing if b is already in aggreg ...
return
aggreg.add(body.id) # ... otherwise add it to aggreg
intrs = body.intrs()
for i in intrs: # and add also all its neighbors ...
if not isinstance(i.phys,JCFpmPhys): # ... but only that connected with JCFpmPhys interactions
continue
if i.phys.breakOccurred: # ... but only not yet broken
continue
i2 = i.id1 if i.id2==body.id else i.id2 # choose the other body of interaction
b2 = O.bodies[i2]
addBodyToAggreg(b2,aggreg) # and add it and all its neighbors to aggreg
def aggregs(): # actual function to detect standalone aggregates
ids = set(b.id for b in O.bodies if isinstance(b.shape,Sphere)) # first make a set of all spheres ids
ret = []
while len(ids)>0: # while there are still some particles not assigned to any aggregate ...
i = ids.pop() # ... choose one random ...
b = O.bodies[i]
a = set() # ... create new aggregate (set of sphere ids)
addBodyToAggreg(b,a) # ... and add the sphere together with all its neigbors to aggregate
for bid in a: # delete all used ids from ids
ids.discard(bid)
ret.append(a)
return ret
#################
2) as the comment says, addBodyToAggreg is an auxiliary function, so
just do not call it standalone :-)
cheers
Jan
--
You received this question notification because your team yade-users is
an answer contact for Yade.