Table of Contents

Commit 2017-12-15

Ce commit est pour ajouter les parcours avancées des hiérarchies de volume frontière dans le but de rapatrier mes derniers développements.

DdContactInteraction - Double Passe - Boundary Volume Hierarchy

Au lieu de passer séquentiellement chaque hiérarchie de volume frontière, d'abord celle du maître avec les points de l'esclave et puis celle de l'esclave avec les points du maître. Il peut être plus intéressant de parcourir ensemble les deux hiérarchies et répertorier l'ensemble des candidats (segment ou face) pour la recherche du contact local. Cette procédure ne se fait pas en parallèle (recherche globale), mais la recherche locale se fait bel et bien en parallèle via la routine TBB !

ScContactInteraction - Self Boundary Volume Hierarchy

Dans le cas de l'auto-contact, puisque chaque point à projeter fait partie de l'hiérarchie de volume frontière, nous avons toujours une sortie triviale, qui consiste en les courbes adjacentes ou les faces adjacentes au point. Donc sous sa forme classique, l'algorithme produit toujours une sortie puisque le point appartient toujours dans les boites imbriquées les unes dans les autres. Ainsi, il pourrait être intéressant de parcourir cette hiérarchie de volume frontière sous forme globale pour tenir compte d'un critère de courbure et d'un critère d'adjacence. Ainsi, si on a une surface plane initialement, on n'a pas de recherche de contact dès le test sur le sommet de l'hiérarchie de volume frontière (car pas de courbure dedans), et cela tant que l'on a pas la présence d'un pli (post-flambement d'un longeron). Le critère d'adjacence permet justement d'éviter des tests triviaux pour l'intersection des boites.

Tests

J'ai ajouté des tests pour la recherche globale du contact en auto-contact et en contact avec une hiérarchie de volume frontière.

Pour pouvoir utiliser cette fonctionnalité, il suffit de générer un BVHOptions et le transmettre à l'interaction de contact :

ci = Sc|DdContactInteraction(1)
option = BVHOptions()
option.setUseGlobalSearch(True|False)
ci.setBVHOptions(option) 
La recherche globale n'est pas fonctionnelle si on se trouve dans le cas d'un contact déformable-déformable en simple passe car on a qu'une seule hiérarchie de volume frontière. Dans le cas de l'auto-contact, la recherche globale est activée uniquement si on utilise une hiérarchie de volume frontière de type auto-contact (Volume Frontière + Critère de courbure + Critère d'adjacence)

Références

[1] A large deformation mortar formulation of self contact with finite sliding, Bin Yang and Tod A. Laursen

[2] A contact searching algorithm including bounding volume trees applied to finite sliding mortar formulations, Bin Yang and Tod A. Laursen

Fichiers ajoutés/supprimés

[a]:oo_meta\mtGeo\mtGeoBVHTreeTraversal.cpp
[a]:oo_meta\mtGeo\mtGeoBVHTreeTraversal.h
[a]:oo_meta\mtGeo\mtGeoSelfBVHTreeTraversal.cpp
[a]:oo_meta\mtGeo\mtGeoSelfBVHTreeTraversal.h
[a]:oo_meta\mtGeo\mtGeoTandemBVHTreeTraversal.cpp
[a]:oo_meta\mtGeo\mtGeoTandemBVHTreeTraversal.h
[r]:

Cas tests ajoutés/supprimés

[a]:oo_meta\mtContact\tests\threeBeamsRingContactTestBVHBottomUpGlobalSearch.py
[a]:oo_meta\mtContact\tests\threeBeamsRingContactTestBVHBottomUpGlobalSearch.tsc
[a]:oo_meta\mtContact\tests\threeBeamsRingContactTestBVHGlobalSearch.py
[a]:oo_meta\mtContact\tests\threeBeamsRingContactTestBVHGlobalSearch.tsc
[a]:oo_meta\mtContact\tests\threePlatesCylinderContactTestBVHBottomUpGlobalSearch.py
[a]:oo_meta\mtContact\tests\threePlatesCylinderContactTestBVHBottomUpGlobalSearch.tsc
[a]:oo_meta\mtContact\tests\threePlatesCylinderContactTestBVHGlobalSearch.py
[a]:oo_meta\mtContact\tests\threePlatesCylinderContactTestBVHGlobalSearch.tsc
[a]:oo_meta\mtContact\tests\torusCylinderContactTestBVHBottomUpGlobalSearch.py
[a]:oo_meta\mtContact\tests\torusCylinderContactTestBVHBottomUpGlobalSearch.tsc
[a]:oo_meta\mtContact\tests\torusCylinderContactTestBVHGlobalSearch.py
[a]:oo_meta\mtContact\tests\torusCylinderContactTestBVHGlobalSearch.tsc
[a]:oo_meta\mtContact\tests\twoToriContactTestBVHBottomUpGlobalSearch.py
[a]:oo_meta\mtContact\tests\twoToriContactTestBVHBottomUpGlobalSearch.tsc
[a]:oo_meta\mtContact\tests\twoToriContactTestBVHGlobalSearch.py
[a]:oo_meta\mtContact\tests\twoToriContactTestBVHGlobalSearch.tsc
[a]:oo_nda\meca0464\tests\threeRingsContactTestBVHBottomUpGlobalSearch.py
[a]:oo_nda\meca0464\tests\threeRingsContactTestBVHBottomUpGlobalSearch.tsc
[a]:oo_nda\meca0464\tests\threeRingsContactTestBVHGlobalSearch.py
[a]:oo_nda\meca0464\tests\threeRingsContactTestBVHGlobalSearch.tsc
[a]:oo_nda\meca0464\tests\threeRingsContactTestSelfBVHBottomUpGlobalSearch.py
[a]:oo_nda\meca0464\tests\threeRingsContactTestSelfBVHBottomUpGlobalSearch.tsc
[a]:oo_nda\meca0464\tests\twoRingsContactTestBVHBottomUpGlobalSearch.py
[a]:oo_nda\meca0464\tests\twoRingsContactTestBVHBottomUpGlobalSearch.tsc
[a]:oo_nda\meca0464\tests\twoRingsContactTestBVHGlobalSearch.py
[a]:oo_nda\meca0464\tests\twoRingsContactTestBVHGlobalSearch.tsc
[r]:

gaëtan 2017/12/15 12:00