← Back to team overview

yade-users team mailing list archive

Re: interaction radius for spheres

 

> The problem is that the users will have to remember to modify the factor 
> simultaneaously in both classes...
>   
Yes, but I don't see another way. They are different engines.
> Also, note that in some cases (in mine in fact :)), 
> InteractingSphere2InteractingSphere4SpheresContactGeometry::interactionDetectionFactor 
> will be more than one while Body2AABB::interactionDetectionFactor will 
> be 1. The typical situation for that is a cohesive contact, which will 
> break in tension in a "distant" situation, but will be created ONLY IF 
> there is a real (not-distant) contact at the beggining.
>   
You can set PersistentSAPCollider::haveDistantTransient=True and it will
not delete interaction even if there is gap between spheres (your
constitutive law is responsible to delete the interaction, if wanted).
If I get it right, setting >1 for *2*4*Geometry and having regular AABBs
will make the behaviour non-isotropic, since in diagonal directions
spheres will be collided earlier (as soon as dist<(sqrt(2)*(r1+r2))),
while in the axial directions, that will happen at dist<(r1+r2). Unless
you handle that specially in *2*4*Geometry, you will have more diagonal
contacts being created and they will be distant.

In my case, I will set those sphere factors to >1 for first few
iterations, so that cohesive contacts are create between particles that
are initially close together (i.e. that are "structural", not just
coming together during simulation) and then, I reset those to 1 and
create non-cohesive contacts.

The interaction of engines is getting complicated, I will (perhaps) try
to document that. We should say for good who is responsible for deleting
contacts (I think constitutive law, not the collider) and rename the
isReal flag to seomthing more meaningful (like isPenetrating).  Would
you agree with that? (Luckily, persistentInteractions will die soon.)

Janek, is there a guarantee that I can do

 for(InteractionContainer I=ic->begin(); I!=ic->end(); ++I){
    /*...*/
    ic->erase((*I)->getId1(),(*I)->getId2())
 }

without invalidating the iterator I (and crashing or whatever)?
(Currently I push interactions to be deleted into a
std::list<pair<bodyId_t,bodyId_t>> and then iterate over that, once the
loop over interactions is finished.)

Vaclav
_______________________________________________
Yade-users mailing list
Yade-users@xxxxxxxxxxxxxxxx
https://lists.berlios.de/mailman/listinfo/yade-users



Follow ups

References