This is an old revision of the document!
−Table of Contents
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).
Augmented Lagrangian Method
L'objet Augmented Lagrangian Method interagit avec le schéma d'intégration DynamicTimeIntegration pour la phase d'initial balancing via la fonction “forcesComputationInitialBalancing()”, tout simplement.
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é.
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
Par la même occasion, j'ai éliminé les multiples appels inutiles à des fonctions du style beginStep(), etc… pour simplifier la structure du code, 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”.
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]: [r]:
— gaëtan 2019/07/05 22:30