Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2019:07_05

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
commit:2019:07_05 [2019/07/05 18:24] wauteletcommit:2019:07_05 [2019/07/08 16:56] (current) – [Cas tests ajoutés/supprimés] wautelet
Line 1: Line 1:
 ===== Commit 2019-07-05 ====== ===== Commit 2019-07-05 ======
  
-Ce commit est pour pouvoir utiliser la méthode du Lagrangien Augmenté directement dans la phase de l'initial balancing (mise en rotation quasi-statique),ce qui n'était pas possible jusqu'à présent.+Ce commit est pour pouvoir utiliser la méthode du Lagrangien Augmenté directement dans la phase de l'initial balancing (mise en rotation quasi-statique), ce qui n'était pas possible jusqu'à présent. 
  
 === Augmented Lagrangian Method === === Augmented Lagrangian Method ===
Line 7: Line 7:
 L'objet AugmentedLagrangianMethod interagit avec le schéma d'intégration DynamicTimeIntegration pour la phase d'initial balancing via la fonction "forcesComputationInitialBalancing()", tout simplement. L'objet AugmentedLagrangianMethod interagit avec le schéma d'intégration DynamicTimeIntegration pour la phase d'initial balancing via la fonction "forcesComputationInitialBalancing()", tout simplement.
  
-Pour activer l'utilisation de la méthode du Lagrangien Augmenté, il suffit procéder comme dans les versions précédentes du code source. Rien n'a changé à ce niveau là.+Pour activer l'utilisation de la méthode du Lagrangien Augmenté, il suffit de procéder comme dans les versions précédentes du code source. Rien n'a changé à ce niveau là.
  
 Pour tester la nouvelle implémentation, j'ai ajouté deux cas-tests dans la batterie. Pour tester la nouvelle implémentation, j'ai ajouté deux cas-tests dans la batterie.
Line 13: Line 13:
 === Initial Balancing - Major Refactoring === === Initial Balancing - Major Refactoring ===
  
-Dans l'objet DynamicTimeIntegration, il y a une phase de calcul dite "initial balancing" pour la mise en rotation quasi-statique initiale des structures. Cette partie du code était assez nébuleuse et donc quasi peu changée au cours des différentes versions du code source. Il a fallu malheureusement mettre à plat tout ça et comprendre ce que l'on faisait exactement dans toutes ces lignes de code. En regardant les similitudes du code avec la fonction integrate() de l'objet QuasiStaticTimeIntegration, je suis parvenu à un refactoring de la fonctionnalité.   +Dans l'objet DynamicTimeIntegration, il y a une phase de calcul dite "initial balancing" pour la mise en rotation quasi-statique initiale des structures/solides. Cette partie du code était assez nébuleuse et donc quasi peu changée au cours des différentes versions du code source : j'ai du lancer pas mal de batterie sur gaston pour être sur d'avancer dans la bonne direction (avec 12 CPUs, ça prend plus ou moins 2h30) . Il a fallu malheureusement mettre à plat tout ça et comprendre ce que l'on faisait exactement dans toutes ces lignes de code. En regardant les similitudes du code avec la fonction integrate() de l'objet QuasiStaticTimeIntegration, je suis parvenu à un refactoring de la fonctionnalité existante.   
  
-Notamment, le fait d'avoir nettoyé et clarifié les étapes de calcul (en comparant avec l'objet QuasiStaticTimeIntegration), j'ai pu mettre en évidence un bug dans le cas où on combine l'initial balancing et une méthode de newton modifiée. Pour illustrer mes propos voici les étapes de calcul dans la nouvelle version du code source et l'ancienne version du code source pour le cas-test +Notamment, le fait d'avoir nettoyé et clarifié les étapes de calcul (en comparant avec l'objet QuasiStaticTimeIntegration), j'ai pu mettre en évidence un bug dans le cas où on combine l'initial balancing et une méthode de Newton modifiée. Pour illustrer mes propos voici les étapes de calcul dans la nouvelle version du code source et l'ancienne version du code source pour le cas-test apps.bIe.aube2_VACONSISTANT :
  
-Par la même occasion, j'ai éliminé les multiples appels inutiles à des fonctions du style beginStep(), etc... pour simplifier la structure du coderassemblé différentes fonctions dans une nouvelle fonction et ajouter des commentaires pour expliquer les différentes phases du calcul. +  * Ancienne Version 
 +<code> 
 + *** STEP 1: t= 0 - dt= 0 - CPU= 0.72s/9.24s 
 +  
 +Initial Balancing  
 +Rotation factor = 1; increment = 1 
 +Rebuild Connexion... 
 +mechanical iteration  0 : Rmean =   1.000000e+00 Rmax =   7.098873e+03 
 +Update stiffness due to Connection rebuild 
 +cpuRatio = 1 reactualisation = 1 iterationIsRefused = 0 
 +Non Symmetric Skyline matrix profile: 
 +  System dimension = 1428 
 +  Dense system size = 2.03918e+06 
 +  Lower/Upper skyline size = 70014 / 70014 
 +  Ratio (Skyline/Dense) = 6.86686 % 
 +  Mean / Max high of skylines = 47 / 92 
 +mechanical iteration  1 : Rmean =   1.197892e-02 Rmax =   5.230707e+02 
 +Update stiffness due to Connection rebuild 
 +cpuRatio = 2 reactualisation = 1 iterationIsRefused = 0 
 +mechanical iteration  2 : Rmean =   2.934683e-05 Rmax =   1.085367e+00 
 +Update stiffness due to Connection rebuild 
 +cpuRatio = 2 reactualisation = 1 iterationIsRefused = 0 
 +mechanical iteration  3 : Rmean =   1.399336e-09 Rmax =   7.797385e-05 
 +Update stiffness due to Connection rebuild 
 +cpuRatio = 2 reactualisation = 1 iterationIsRefused = 0 
 +Saving BZOutArchive (version=22) ... 
 +Initialising mechanical IterationManager 
 +initialising IeShiftManager  
 +</code> 
 + 
 +  * Nouvelle Version 
 +<code> 
 + *** STEP 1: t= 0 - dt= 0 - CPU= 0.88s/2.92s 
 +  
 +  
 + Start Initial Balancing Phase  
 +  
 +  
 + *** INITIAL BALANCING SUBSTEP  1: Rotation factor = 1 - rotation increment = 1 
 +  
 +Rebuild Connexion... 
 +mechanical iteration  0 : Rmean =   1.000000e+00 Rmax =   7.098873e+03 
 +Update stiffness due to Connection rebuild 
 +cpuRatio = 1 reactualisation = 1 iterationIsRefused = 0 
 +Non Symmetric Skyline matrix profile: 
 +  System dimension = 1428 
 +  Dense system size = 2.03918e+06 
 +  Lower/Upper skyline size = 70014 / 70014 
 +  Ratio (Skyline/Dense) = 6.86686 % 
 +  Mean / Max high of skylines = 47 / 92 
 +mechanical iteration  1 : Rmean =   1.197892e-02 Rmax =   5.230707e+02 
 +cpuRatio = 2 reactualisation = 0 iterationIsRefused = 0 
 +mechanical iteration  2 : Rmean =   9.244310e-04 Rmax =   3.782266e+01 
 +cpuRatio = 4 reactualisation = 0 iterationIsRefused = 0 
 +mechanical iteration  3 : Rmean =   1.658983e-04 Rmax =   7.679050e+00 
 +cpuRatio = 4 reactualisation = 0 iterationIsRefused = 0 
 +mechanical iteration  4 : Rmean =   5.144544e-05 Rmax =   2.220752e+00 
 +cpuRatio = 4 reactualisation = 1 iterationIsRefused = 0 
 +mechanical iteration  5 : Rmean =   3.687059e-09 Rmax =   1.552366e-04 
 +cpuRatio = 4 reactualisation = 1 iterationIsRefused = 0 
 +  
 + End Initial Balancing Phase  
 +  
 +Saving BZOutArchive (version=22) ... 
 +Initialising mechanical IterationManager 
 +initialising IeShiftManager  
 +</code> 
 + 
 +Dans la version précédente, on forçait toujours la mise à jour de la matrice de raideur tangente après la première itération, alors que l'algorithme du Newton Raphson modifié ne l'exige pas vu que le résidu du Newton Raphson diminue suffisamment dans les itérations suivantes. 
 + 
 +Par la même occasion, j'ai éliminé les multiples appels inutiles à des fonctions du style beginStep(), etc... pour simplifier la structure du code. J'ai aussi rassemblé différentes fonctions dans une nouvelle fonction et ajouter des commentaires pour expliquer les différentes phases du calcul. 
  
-Au niveau de la visualisation, il est désormais possible d'interagir les différentes phases de l'initial balancing via le widget "TimeIntegrationInteractor".+Au niveau de la visualisation, il est désormais possible d'interagir avec les différentes phases de l'initial balancing via le widget "TimeIntegrationInteractor".
  
 Finalement, j'ai ajouté la mise à jour des chargements nodaux imposés via un LoadingSet, des positions des outils en force driven, des degrés de liberté liés via la fonctionnalité EqualityDofConstraint dans la phase d'initial balancing.     Finalement, j'ai ajouté la mise à jour des chargements nodaux imposés via un LoadingSet, des positions des outils en force driven, des degrés de liberté liés via la fonctionnalité EqualityDofConstraint dans la phase d'initial balancing.    
Line 37: Line 107:
  
 <code> <code>
-[a]:+[a]:apps\contactMec\initialBalancingAube2to3Moyeu2DAnaAlm.py 
 +[a]:apps\contactMec\initialBalancingAube2to3Moyeu3DAnaAlm.py 
 +[a]:apps\contactMec\initialBalancingAube2to3Moyeu2DAnaAlm.tsc 
 +[a]:apps\contactMec\initialBalancingAube2to3Moyeu3DAnaAlm.tsc
 [r]: [r]:
 </code> </code>
commit/2019/07_05.1562343859.txt.gz · Last modified: 2019/07/05 18:24 by wautelet

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki