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 (ce sont ce que l'on appelle des itérations rejetées !).

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 dû 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 lors du calcul de la correction des positions.

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

La différence entre les deux méthodes précitées réside dans la détermination du paramètre residualDecreaseFactor et maxNbOfModifiedNRIterations. Le premier paramètre définit la valeur maximale autorisée de décroissance entre deux résidus successifs sans mise à jour de la matrice de raideur tangente. Si le résidu ne décroit pas suffisamment, nous décidons de mettre à jour la matrice de raideur tangente (valeur typique est comprise entre 0.1 et 0.9). Le second paramètre permet de définir le nombre maximale d'itérations successives faites avec la même matrice de raideur tangente. Même si le résidu décroit suffisamment au cours des itérations sans mise à jour de la matrice de raideur tangente, nous déclarons qu'au delà de x itérations successives (sur le step courant), nous devons mettre à jour la matrice de raideur tangente. (valeur typique est comprise entre 2 et 5). Le choix de ces deux paramètres sont loin d'être trivial et dépend clairement de l'application.

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 Real (important pour les cas-test lancés en parallèle !) 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é et doit être une valeur comprise entre 2 et 9. Cette variante permet une automatisation du choix des paramètres précédents.

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 (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, en réalité, c'est juste après l'évaluation du résidu), puisqu'il y a déjà une méthode sélectionnée, nous exécuterons cette méthode et une fois exécutée, on va détruire cette méthode. Si nous n'avons pas de méthode pré-établie, la méthode par défaut sera ResidualStiffnessUpdateMethod. 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. Celà reste de petit objet et dès lors leur destruction et leur construction n'affecte pas de manière significative le temps CPU total et cela permet une plus grande flexibilité pour traiter les cas particuliers.

Récapitulatif

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

Je vous recommande d'utiliser ces méthodes, une fois que vous avez une application qui tourne correctement ! Il n'est pas toujours garanti que l'on gagne en temps CPU au final quelque soit le maillage et quelque soit le chemin emprunté par l'intégration temporelle (Pas de temps adaptatif).

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.

tscm = NbOfMechAugLagNRIterationsTimeStepComputationMethod(metafor)
tscm.setEquivalentIteMethod(ALM_TSCM_AUGLAG)
tsm.setTimeStepComputationMethod(tscm)

Mise à jour de la matrice de raideur tangente

aa

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.1493137647.txt.gz · Last modified: 2017/04/25 18:27 by wautelet

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki