Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


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.

Augmented Lagrangian Method

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 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.

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/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 apps.bIe.aube2_VACONSISTANT :

  • Ancienne Version
 *** 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 
  • Nouvelle Version
 *** 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 

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 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.

Structural Line Search - Refactoring

Le line search était implémenté dans TimeIntegration ⇒ iterationResolution() et aussi dans DynamicTimeIntegration ⇒ initialBalancing(), ce qui rend difficile la maintenance. J'ai déplacé l'entièreté des lignes de code dans IterationManager dans la fonction “void execute(TimeIntegration &ti, bool &rester, bool &forcesAreComputed, Field const *dofType);”. L'algorithme du Line Search interagit avec le schéma d'intégration via les fonctions “computeForcesLineSearch()” et “updateDofsLineSearch()”. Normalement, rien n'a changé au niveau du fonctionnement de l'algorithme.

Fichiers ajoutés/supprimés

[a]:
[r]:

Cas tests ajoutés/supprimés

[a]:apps\contactMec\initialBalancingAube2to3Moyeu2DAnaAlm.py
[a]:apps\contactMec\initialBalancingAube2to3Moyeu3DAnaAlm.py
[a]:apps\contactMec\initialBalancingAube2to3Moyeu2DAnaAlm.tsc
[a]:apps\contactMec\initialBalancingAube2to3Moyeu3DAnaAlm.tsc
[r]:

gaëtan 2019/07/05 22:30

commit/2019/07_05.txt · Last modified: 2019/07/08 16:56 by wautelet