Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2017:04_22

This is an old revision of the document!


Commit 2017-04-22

Ce commit est pour améliorer quelques routines liées au contact et pour mettre progressivement mes développements sur la version courante.

Modified Newton Raphson

J'ai refait un petit nettoyage pour l'interface des méthodes de mise à jour de la matrice de raideur tangente.

Contexte

L'idée principale de la méthode est de pouvoir conserver la matrice de raideur tangente au cours des itérations Newton-Raphson pour la résolution de l'équilibre. Ainsi, étant donné que l'assemblage de la matrice de raideur peut être relativement couteux dans certains cas de figure, nous pouvons gagner du temps CPU en conservant la même matrice de raideur. Cependant, la vitesse de convergence de la méthode de Newton-Raphson modifiée devient linéaire (voir superlinéaire sous certaines conditions) au lieu de quadratique lorsque nous mettons à jour la matrice de raideur à chaque itération. Le fait de conserver la matrice de raideur peut dès lors donner lieu à une décroissance relativement lente du résidu lors des itérations, voir même pire, donner lieu à une croissance du résidu lors des itérations. Dans ce dernier cas de figure, nous rejetons l'itération et nous repartons de l'itération précédente où nous recalculons la matrice de raideur tangente.

Auparavant, nous pouvons choisir cette méthode via l'option setNbOfIterationsForStiffUpdate() et l'option setCpuDependency() pour les itérations mécaniques/thermiques. Cette méthode existe toujours sous la dénomination StiffnessUpdateCriterion. Cependant, maintenant ces options sont directement à définir dans l'objet StiffnessUpdateCriterion et non IterationManager. Par conséquent, j'ai du adapter l'interface des différents cas tests qui utilisent cette méthode dans la batterie.

Méthode interfacée

Après un petit refactoring, pour ne pas changer, j'ai scindé en deux les méthodes de Newton Raphson Modifiée : CpuModifiedNRStiffnessUpdateCriterion et PeriodicModifiedNRStiffnessUpdateCriterion. Évidemment, la méthode par défaut est NRStiffnessUpdateCriterion. Toutes ces méthodes dérivent de StiffnessUpdateCriterionBase et ont pour but de décider si nous devons mettre à jour la matrice de raideur tangente.

Stratégie de la méthode de Newton Raphson Modifiée

La différence entre les deux méthodes réside dans la détermination du paramètre residualDecreaseFactor et maxNbOfModifiedNRIterations. Dans le cas de la méthode PeriodicModifiedNRStiffnessUpdateCriterion, nous les choisissons tous les deux de manière indépendante. Dans le cas de la méthode CpuModifiedNRStiffnessUpdateCriterion, ces deux paramètres sont déterminés à partir du rapport du temps CPU entre une itération avec mise à jour de la matrice de raideur tangente et une itération sans mise à jour de la matrice de raideur tangente. Ce rapport est bornée entre une valeur comprise entre 2 et 9.

Finalement, lors de l'intégration temporelle, il existe d'autres situations qui nécessitent un traitement particulier dans le cas la méthode de Newton Raphson modifiée. Le premier cas de figure est la mise à jour des connectivités (Stage, Contact défo-défo, Rupture) pour toutes les itérations et le second cas de figure est le variation du pas de temps pour la première itération (première correction du résidu). Au lieu d'avoir un énorme if/else if et des valeurs booléennes (du style connectionHasBeenRebuiltFlag ⇒ problème de synchronisation - remise à zéro), j'ai opté pour une structure avec des objets (Strategy Pattern). Ainsi, une étape du type beginStep dans l'intégration temporelle va informer le ModifiedNRStiffnessUpdateCriterion que la méthode implémentée pour mettre à jour la matrice de raideur doit être BeginStepStiffnessUpdateMethod. Ainsi, lors de l'étape de décision de mise à jour du pas de temps (qui n'est pas du tout au même moment), puisqu'il y a déjà une méthode, nous exécuterons cette méthode et une fois exécutée, on va détruire cette méthode. A chaque évènement particulier dans l'intégration temporelle ou la résolution de l'équilibre, nous pouvons y associer une méthode de mise à jour de la matrice de raideur tangente.

Récapitulatif

Voici les méthodes disponibles et les options associées.

Lagrangien Augmenté

Mise à jour du pas de temps

J'ai ajouté une méthode pour calculer le pas de temps, qui se base à la fois sur le nombre d'augmentation et sur les nombre d'itérations en moyenne sur chaque résolution de l'équilibre suite à une augmentation. Elle permet ainsi l'estimation du nouveau pas de temps sur base du nombre d'augmentation si on fait peu d'augmentations ou du nombre d'itérations en moyenne sur chaque résolution de l'équilibre suite à une augmentation, si on fait beaucoup d'augmentations.

Formulation AIC

J'ai ajouté la contribution de la variation de l'aire nodale pour le calcul de la matrice de raideur tangente en 3D dans le cas du contact déformable-déformable.

Fichiers ajoutés/supprimés

[a]:
[r]:

Cas tests ajoutés/supprimés

[a]:
[r]:

gaëtan 2017/04/22 22:37

commit/2017/04_22.1493136392.txt.gz · Last modified: 2017/04/25 18:06 by wautelet

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki