===== Commit 2016-09-26 ======
Ce commit est pour le calcul du frottement avec les matrices de contact de Parasolid et l'amélioration de la visualisation de ce type de matrice.
==== Visualisation ====
J'ai ajouté les fonctionnalités suivantes pour la PSkin :
* Show/Hide + UserNo visible dans l'onglet show/hide.
* FeatureEdge/Grid + (Grid Resolution)
* Show local coordinate system (normal + tangents)
Il reste à adapter la visualisation pour visualiser les territoires de contact pour tuner la profondeur de contact !
==== Parasolid - Frottement ====
Il est possible de faire du contact avec frottement désormais avec des géométries issues de Parasolid.
J'ai également complété l'interface de la PSkin pour pouvoir calculer la matrice de raideur tangente full analytique (terme géométrique en plus). Cependant, il semble qu'il y ait toujours un soucis de signe "-" quelque part dans la version actuelle si on a une PSkin avec des faces d'orientation différentes : dans le tubeV1, deux faces possèdent des normales d'orientation opposées par rapport à la PSkin, tandis que dans le tubeV2, toutes les normales sont dans le bon sens.
==== Projection de contact ====
Afin de rendre l'opérateur initiale plus performant, j'ai ajouté les caractéristiques suivantes :
* Test de la boite;
* Test sur le gap maximum autorisé en valeur absolue;
* Test sur le segment sur lequel on avait une projection valide;
N'oubliez pas que si la profondeur de contact est négatif (par défaut !), ces tests là sont purement désactivés.
Il y a encore du boulot pour optimiser le temps CPU de la partie contact avec Parasolid.
Le traditionel RTFM reste d'actualité pour l'utilisation de Parasolid, mais il ne faut pas croire sur parole le contenu de la documentation. Par exemple, la fonction PK_SURF_parameterise_vector n'est pas équilvalente à PK_GEOM_range_vector alors qu'il est indiqué dans Parasolid : the curve and surface parameter values returned will be the same as would be returned by the parameterisation functions PK_CURVE_parameterise_vector and PK_SURF_parameterise_vector. Plusieurs fois, nous avons des problèmes d'erreur en run time où Parasolid indiquait l'erreur 915 not_on_surface
==== Performance ====
Les performances dépendent fortement du cas test mais j'ai utilisé le procédé d'hydroformage (tube T : 4 x 80 x 120) pour faire les comparatifs entre la version en série optimisée Parasolid et la version en série précédente Parasolid. Le solveur linéaire est le DSSSolver.
{{ :commit:cpuparasolidreference.png?900 |}}
{{ :commit:cpuparasolidoptimisation.png?900 |}}
En lisant la documentation Parasolid, les fonctions principales appelées pour calculer les distances d'un point par rapport à une surface, ne peuvent pas être appelées en même temps par plusieurs threads différents (Il existe un mécanisme interne à Parasolid qui contrôle son accès par thread (lock/unlock) et qui évite de corrompre son état si cette routine ne permet pas la parallélisation !).
===== Fichiers ajoutés/supprimés ======
[a]:mtParasolid/drawables/PSkinDataSet.cpp
[a]:mtParasolid/drawables/PSkinDataSet.h
[r]:
===== Cas tests ajoutés/supprimés ======
[a]:mtParasolid/tests/tubeV1Friction.py
[a]:mtParasolid/tests/tubeV2.py
[a]:mtParasolid/tests/tubeV2Friction.py
[a]:mtParasolid/tests/tubeV2.xmt_txt
[a]:mtParasolid/tests/cubeblockFriction.py
[a]:mtParasolid/tests/cubecylFriction.py
[a]:mtParasolid/tests/cubesphereFriction.py
[rename]: mtParasolid/tests/tube.py => mtParasolid/tests/tubeV1.py
[rename]: mtParasolid/tests/tube.xmt_txt => mtParasolid/tests/tubeV1.xmt_txt
--- //[[gwautelet@ulg.ac.be|gaëtan]] 2016/10/01 16:00//