Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2017:08_10

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
commit:2017:08_10 [2017/08/10 15:53] – [Divers] wauteletcommit:2017:08_10 [2017/08/11 16:41] wautelet
Line 1: Line 1:
-===== Commit 2017-06-07 ======+===== Commit 2017-08-11 ======
  
 Ce commit est pour améliorer quelques routines liées au contact et pour mettre progressivement mes développements sur la version courante. Ce commit est pour améliorer quelques routines liées au contact et pour mettre progressivement mes développements sur la version courante.
  
-===== Bicubic Coons =====+===== Méthode d'augmentations alternatives =====
  
-J'ai ajouté la possibilité de faire des patch de Coons avec une continuité du type C1 (c'est-à-dire la continuité des tangentes d'un patch de Coons à un autre). Si nous avons une discontinuité des tangentes au niveau de la frontière du patch de Coonsnous avons aussi une discontinuité dans la définition de la normale. Du point de vue du contactcette discontinuité peut freiner voir même empêcher la convergence du Newton Raphson lors de la résolution de l'équilibre mécaniqueLa forme implémentée des patch de Coons bi-cubique (Polynôme d'Hermitte) est la version Ferguson ([[https://www.math.hmc.edu/~gu/math142/mellon/Application_to_CAGD/Surface_Construction_Schem.html|Ferguson Patch]]).+Suite à mes derniers développements sur le Lagrangien Augmenté, j'ai proposé des méthodes d'augmentations alternatives (NesterovExtrapolationBarzilai Borwein) pour accélérer la convergence du schéma classique d'UzawaPour plus d'informations sur les schémas implémentés, je vous renvoie à ma présentation disponible sur orbi (http://hdl.handle.net/2268/212964).
  
-Si nous avons une surface plane constituée de patch de Coons, nous avons d'office une continuité des tangentes au niveau des frontières d'un patch à un autre. Lors que la surface n'est plus planeil faut certaines conditions pour que les tangentes soient continues, ce qui n'est toujours aisé à remplir ! +Pour pouvoir utiliser les nouveaux schémas d'augmentation avec Metaforje vous indique les différents commandes : 
- +
-Voici les commandes pour instancier un patch bicubique de Coons +
  
 <code> <code>
-    surfaceset geometry.getSurfaceSet() +parameters['extrapolationMethod'ALM_NESTREROV_EXTRAPOLATION #ALM_BARZILAIBORWEIN_EXTRAPOLATION|ALM_NESTREROV_EXTRAPOLATION|ALM_CLASSICAL_EXTRAPOLATION 
-    surfaceset.add(BicubicCoons(1, wireset(1)))+augLagAugmentation = AugLagExtrapolationAugmentation(alm
 +augLagAugmentation.setExtrapolationMethod(parameters['extrapolationMethod'])
 </code> </code>
  
-Dans le cas de la boite carrévoici les différences que nous observons pour une pénalité de 1E5 N/mm³ :+Parmi ces schémascelui qui semble le plus efficace à l'heure actuelle est le schéma de Nesterov. 
  
-<code> +===== Robustesse des projections =====
-Version avec patch de Coons bicubique : +
  
-User CPU : 1h6m52.28s +=== Critère de divergence des itérations === 
-Real CPU : 19m52.39s+ 
 +Afin d'éviter de calculer des projections inutilement (résidu stagne ou résidu oscille ...), j'ai ajouté un critère de divergence des itérations comme celui utilisé dans les itérations mécaniques.  
 + 
 +=== Critère de convergence === 
 + 
 +J'ai constaté que le terme de droite dans les critères normés sur les angles étaient trop stricts lorsque le résidu était faible ou les normes de tangentes étaient trop faibles. J'ai ajouté tout simplement une opération maximale entre la valeur 1.0 et la valeur actuelle de la norme pour passer automatiquement d'une norme relative à une norme absolue. 
 + 
 +=== Inexact Line Search === 
 + 
 +J'ai constaté que l’exécution du Line Search inexacte renvoie une valeur du pas proche de zéro (ou même zéro) suite à des erreurs d'arrondi. J'ai ajouté dès lors des exceptions que l'on lance pour les cas pathologiques et l'on récupère et l'on traite dans le calcul itératif de projection. Dans ce cas, on prend une valeur du pas non nulle pour continuer le calcul itératif de la projection. 
 + 
 +=== Interface des tolérances In/Out pour les outils de contact === 
 + 
 +Après avoir lancé une série de test sur le cluster sur la squareBox et sur le sRail, j'ai été assez surpris de mes résultats sur la sensibilité aux coefficients de pénalité. En affichant les zones potentiellement en contact, j'ai constaté que des projections à priori valides n'étaient pas du tout valables ! Si il y a un problème dans l'opération de projection, les forces de contact seront complètement faussées et de là l'intégration temporelle aussi 
    
-[TSC-STP]                         Number of steps : 1696 +Clairement là, il y a un problème suite à l'absence d'une épaisseur (artificielle) des courbes entre deux facesPuisque nous résolvons notre calcul de projection à une tolérance près, il est fort probable, si la projection doit être sur la courbe entre les deux faces, que l'on ne trouve pas de projection suite au fait que nous sommes à chaque fois du côté extérieur de la face lors du calcul de la projection. En ajoutant une tolérance Out non nulle, le problème est en effet résolu puisque nous trouvons bel et bien une projection dans ce cas-là. Cette problématique est bel et bien connue des logiciels de CAO (notamment Parasolid)
-[TSC-ITE]              Number of mechiterations : 5607 + 
-[TSC-INW]                         Internal energy : 4856.52 +{{:commit:2017:notoleranceout0000.png?800|}} 
-[TSC-EXW]                 Work of external forces : 467297 +{{:commit:2017:toleranceout0000.png?800|}} 
-[TSC-CPU]                           User CPU Time 4012.28 + 
-[TSC-REA]                           Real CPU Time 1192.39 +Il reste malheureusement à choisir la valeur de cette tolérance par cas-test ou pour tous les cas tests (1E-6?)Il faut savoir que les tests du type SurroundednessTest2D ou SurroundednessTest3D utilise une tolérance de 1E-6 pour le IN et OUT.
-[TSC-KER]                         Kernel CPU Time 82.8281 +
-[TSC-MEM]                        Peak Memory [Kb] 368400 +
-[TSC-EXT]               AbsMax of gTmax_-_ciPunch 0.000662198 +
-[TSC-EXT]                 AbsMax of gTmax_-_ciDie 0.00147749 +
-[TSC-EXT]              AbsMax of gTmax_-_ciHolder : 0.000255104 +
-[TSC-EXT]               AbsMax of gNMax_-_ciPunch : 0.00075458 +
-[TSC-EXT]                 AbsMax of gNMax_-_ciDie : -0.00156713 +
-[TSC-EXT]              AbsMax of gNMax_-_ciHolder : 0.00110586 +
-</code>+
  
 <code> <code>
-Version avec patch de Coons :  +skinsetPunchTool = ContactTool(skinsetPunch) 
-  +skinsetPunchTool.setOuterTolerance(parameters['outerTolerance']) 
-User CPU : 1h10m25.63s +skinsetPunchTool.setInnerTolerance(parameters['innerTolerance'])
-Real CPU : 21m6.52s +
-  +
-[TSC-STP                        Number of steps : 1766 +
-[TSC-ITE]              Number of mechiterations : 5867 +
-[TSC-INW                        Internal energy : 4880.2 +
-[TSC-EXW]                 Work of external forces : 467820 +
-[TSC-CPU]                           User CPU Time : 4225.63 +
-[TSC-REA]                           Real CPU Time : 1266.52 +
-[TSC-KER]                         Kernel CPU Time : 68.7188 +
-[TSC-MEM]                        Peak Memory [Kb] : 308420 +
-[TSC-EXT]               AbsMax of gTmax_-_ciPunch : 0.000666918 +
-[TSC-EXT]                 AbsMax of gTmax_-_ciDie : 0.00138641 +
-[TSC-EXT]              AbsMax of gTmax_-_ciHolder : 0.000279426 +
-[TSC-EXT]               AbsMax of gNMax_-_ciPunch : 0.000757402 +
-[TSC-EXT]                 AbsMax of gNMax_-_ciDie : -0.00156178 +
-[TSC-EXT]              AbsMax of gNMax_-_ciHolder : 0.00114145+
 </code> </code>
  
-Pour montrer la discontinuité de la normale aux interfaces entre les patchs de Coons, il suffit d'afficher les territoires de contact de type "Corner Edges".+=== Projection Informations ===
  
-Version avec patch de Coons +Finalement, j'ai ajouté la possibilité de faire des statistiques sur les projections sur une courbe ou une surface (un peu comme les EAS) :
  
-{{:commit:2017:coonspatch0000.png?600|}}+<code> 
 +skinsetPunchTool = ContactTool(skinsetPunch) 
 +skinsetPunchTool.setProjectionInfoVerbose(True) 
 +</code>
  
-Version avec patch de Coons bicubique+Ce qui donne par exemple pour le cas de la squareBox (Première détection de contact) : 
  
 +<code>
 +Projection Infos: 2897/3924 effective projections and 25/3924 failed projections 
 +(average nbNRIt = 3.59372; average nbLSIt = 2.74042; average effective nbLSIt = 2.6236)
 +</code>
  
-{{:commit:2017:bicubiccoons0000.png?600|}} 
  
  
-===== Correction Patch de Coons ===== 
  
-Par la même occasion, j'ai corrigé une erreur dans les dérivées des tangentes pour les patchs de Coons. Elles sont utilisées pour la matrice de raideur analytique de contact avec les termes géométriques !+  
  
 ===== Divers ===== ===== Divers =====
  
 === Visualisation === === Visualisation ===
 +
 +J'ai corrigé quelques bugs : 
 +
 +  * Affichage des territoires de contact pour l'auto contact !
 +  * Ajout d'un test sur la présence d'éléments dans les interactions pour récupérer les champs scalaires/vectoriels possibles à afficher.
  
 === Cas test === === Cas test ===
Line 92: Line 89:
  
 <code> <code>
-[a]:mtGeo\mtGeoBicubicCoons.cpp +[a]:mtGeo/mtGeoProjectionInfo.cpp 
-[a]:mtGeo\mtGeoBicubicCoons.h+[a]:mtGeo/mtGeoProjectionInfo.h 
 +[a]:mtGeo/mtGeoWithProjectionInfo.cpp 
 +[a]:mtGeo/mtGeoWithProjectionInfo.h 
 +[a]:mtContact/src/AugLagExtrapolationMethod.cpp 
 +[a]:mtContact/src/AugLagExtrapolationMethod.h
 [r]: [r]:
 </code> </code>
Line 100: Line 101:
  
 <code> <code>
-[a]:apps\qs\contactBicubicCoons.py+[a]:
 [r]: [r]:
 </code> </code>
  
- --- //[[gwautelet@ulg.ac.be|gaëtan]] 2017/08/10 21:59//+ --- //[[gwautelet@ulg.ac.be|gaëtan]] 2017/08/11 21:59//
  
commit/2017/08_10.txt · Last modified: 2017/08/11 16:43 by wautelet

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki