Just one question : does it means all interaction laws (even not 
distant, like dry friction) have to request deletion now?

Bruno


Václav Šmilauer a écrit :
> In last few months I had suspicious problems of bodies that obviously
> didn't interact even when physically overlapping (one going through
> another). As a result of me writing from scratch InsertionSortCollider,
> thinking that PersistentSAPCollider might be wrongly detecting contacts,
> I have the following conclusions for interactions:
>
> 1. Some colliders (jsut 2: InsertionSort and PersistentSAP, which uses
> the same algo but is slower ;-) ) only see interactions when either the
> AABB's didn't overlap in last step and now do, or the other way
> (inversion in the ordering, using the computing terminology).
>
> 2. For non-cohesive interactions (those that should exist only if there
> is overlap of bodies, therefore of AABBs), we used to delete interaction
> by saying I->isReal=false. That returns the interaction back to
> potential state, as the collider will set I->isNew=true. If there is
> again real overlap, the InterGeom and InterPhys functors will create the
> interaction again. If there is no overlap, the collider will delete the
> interaction for good at the point the AABBs don't overlap anymore.
>
> 3. For cohesive (that is, possibly distant) interactions, this doesn't
> work anymore. Suppose a constitutive law wants to delete an interaction
> when normal elongation of the contact exceeds some positive value (think
> tensile damage). If you use I->isReal=false, then the interaction falls
> to the potential state. Now: if the AABBs don't overlap at this point
> anymore, the interaction will be in the potential state possibly
> forever, since the collider will never see such interaction again, as
> the AABBs have already separated _before_ the contact was marked
> isReal=false. This slows down the computation by keeping useless
> interactions around. (PersistentSAPCollider has an extra loop over
> interactions, that detects such cases; but it slows down).
>
> 4. If I set I->isReal=false, it doens't follow that the collider will
> also set I->isNew=true, as it will not see the interaction unless AABBs
> enter/quit the overlap. I->isNew is NOT always equal to
> (bool)I->interactionPhysics or (bool)I->interactionGeometry: a once
> existing interaction, after setting I->isReal=false, will still have
> I->isNew=false. If geometry/physics functor sees such interaction, it
> will only UPDATE (not create a new) geometry and physics for the
> interactions, i.e. using values of internal variables from the
> interaction before!
>
> The solution I created is to hint the collider that an interaction is
> not needed anymoer and let it decide whether to really erase it or what
> else to do. Instead of saying I->isReal=false, you call
> interactions->requestErase(id1,id2) and the collider will, at the next
> step, look at the pair; if there is still AABB overlap, the interaction
> is kept as potential; if there is no AABB overlap anymore, it will
> delete the interaction for good. Then the list of interactions to delete
> is cleared. (this solves point 3.)
>
> Moreover, interactions->requestErase will call Interaction::reset()
> which will make sure that interactionGeometry, interactionPhysics,
> isReal, isNew, ... are reset to the initial state of an interaction that
> was never real. (this solves point 4.)
>
> (At this point, I think we are ready to remove haveDistantTransient flag
> from the colldiers.)
>
> I will try to go through the code to erradicate all occurences of
> isReal=false and such. Maybe we better get rid of isNew as well, instead
> of having to keep it in sync with (bool)I->interactionPhysics and (bool)
> I->interactionGeometry all the time?
>
> Best regards, Vaclav
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-dev
> Post to     : [email protected]
> Unsubscribe : https://launchpad.net/~yade-dev
> More help   : https://help.launchpad.net/ListHelp
>
>   


-- 
 
_______________
Chareyre Bruno
Maitre de conference

Grenoble INP
Laboratoire 3SR - bureau E145
BP 53 - 38041, Grenoble cedex 9 - France
Tél : 33 4 56 52 86 21
Fax : 33 4 76 82 70 43
________________


_______________________________________________
Mailing list: https://launchpad.net/~yade-dev
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp
_______________________________________________
yade-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/yade-dev

Reply via email to