← Back to team overview

yade-users team mailing list archive

Re: [Question #682290]: the correct use of collider.avoidSelfInteractionMask ?

 

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

    Status: Open => Answered

Jan Stránský proposed the following answer:
Hi guys,

sorry for coming late to the discussion.

what is "full interaction", "full no interaction" and "ful or zero
interactions"?

also, next time please try to make your script minimal and easily
understandable. E.g. here 1st, 5th, top, bottom... is ambiguous
according to view orientation..

For example:
###
# mask values, "colors"
mb,mg,mr = 0b10, 0b01, 0b11
# mask to string dict
m2c = {mb:"b", mg:"g", mr:"r"}
# testing spheres, 2 of each color
sb1 = sphere((0,0,0),1,mask=mb)
sb2 = sphere((0,0,0),1,mask=mb)
sg1 = sphere((0,0,0),1,mask=mg)
sg2 = sphere((0,0,0),1,mask=mg)
sr1 = sphere((0,0,0),1,mask=mr)
sr2 = sphere((0,0,0),1,mask=mr)
O.bodies.append((sb1,sb2,sg1,sg2,sr1,sr2))
#
collider.avoidSelfInteractionMask = 0b00
O.step()
#
idss = [(i.id1,i.id2) for i in O.interactions] # id couples for each interaction
bss = [[O.bodies[i] for i in ids] for ids in idss] # body couple of each interaction
mss = [[b.mask for b in bs] for bs in bss] # mask couple of each interaction
mss = [tuple(sorted(ms)) for ms in mss] # make the mask couple of type tuple (needs by set below). Also sort it for proper deletion of duplicates
mss = set(mss) # make the entries unique (i.e. deleting duplicates)
css = ["".join(m2c[m] for m in ms) for ms in mss] # convert mask couples to strings
css.sort() # sort the result
css = " ".join(css) # make it one string
print css # print interacting color couples
###

Please, provide your output for different avoidSelfInteractionMask
values such that we can test if your installation does wrong bit
operations or there is some misunderstanding.

For my case:
0b00: bb br gg gr rr
0b01: bb br gr
0b10: br gg gr
0b11: br gr

cheers
Jan

PS: a note
In your code, you first modify 'collider' and then in O.engines creates a new collider.
Setting avoidSelfInteractionMask works only "by luck" because avoidSelfInteractionMask is defined as static (for other values it could cause problems).
A cleaner way would be:
##
O.engines = [
   ...
   InsertionSortCollider(...,label="collider")
   ...
]
collider.avoidSelfInteractionMask = ...
##

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.