commit:2018:03_09
Table of Contents
Commit - LPx - 09 Mars 2018
BoundingBoxes
BoundingBoxes
- Suite à la parallélisation du contact, le calcul et la mise à jour des bounding-boxes pour le contact suivaient 2 schémas différents selon que l'on était en parallèle (via un pré-calcul explicite) ou pas (avec un flag invalidé en amont et le calcul unique de chaque BBox au besoin)
- au delà de devoir gérer 2 schéma d'intégration selon le parallélisme, chaque méthodes avaient son inconvénient :
- Le pré-calcul des BBox (pour les calculs parallèles) pouvait amener à calculer plusieurs fois le même outil (si il participait à plusieurs interactions de contact)
- l'invalidation des BBox et le calcul au besoin nécessiterait un mutex au moment du calcul de la BBox, ce qui n'est pas optimal du tout
- Le choix s'est posé sur un mix des 2 méthodes :
- les BBox conservent leurs flags de validité (pour ne calculer que 1 seule fois chaque BBox)
- les BBox sont explicitement invalidées à chaque pas de temps (RDContactInteraction) ou chaque iteration (DDContactInteraction)
- le calcul des BBox est explicitement appelé hors boucle parallèle (nb : pour les outils facetisés, les boucles sur les facettes pourraient être rendues parallèles) et une seule fois par objet grace au flax de validité
- Dans la mesure des possibilités, chaque objet sur lequel on calcule une bbox conserve celle-ci (quitte à légèrement augmenter la mémoire) et on essaye de ne plus “rediriger” des bbox
- Attention, il reste un soucis sur les QuadSide dont les BBoxes sont calculées sur base des 4 points, et le projectionOperator est le SurfaceOperator générique (d'où la copie de la BBox QuadSide vers la surface sous-jascente)
- Attention2 : les BBoxes sont aussi utilisées dans le remaillage (mais de manière moins claire) à travers les fonctions “insideForConvexe”, “preCompute2BoundingBox”,…
- Attention 3 : l'interaction entre BBox et les méthodes d'arbre WithBoundaryVolume ne me semblent pas nécessairement très claire (⇒ si vous observez un soucis, n'hésitez pas)
- To Be Continued : Un certain nombre d'opérations géométrique m'ont interpellé en tombant dessus et une grosse remise à plat serait bénéfique à la lisibilité du code. Des refactoring à prévoir serait :
- d'implémenter des opérateurs de projection optimisé pour les faces maillées (QuadSide)
- supprimer la couche “ProjectionOperator” en créant un “ProjectionData” reprenant les paramètres de projection et en déplacant les fonctions de projection dans les classes géométriques
- …
Divers :
- Remeshing :
- Ajout d'un TestSuiteChecker TSC-STP reprenant le nombre de remaillage
Fichiers ajoutés/supprimés :
Added : Deleted : M :
Tests ajoutés/supprimés
Adding: Deleted : Moved :
— Luc Papeleux 2018/03/09
commit/2018/03_09.txt · Last modified: 2018/03/09 16:04 by papeleux