Réglages des solveurs non-linéaires =================================== Choix de la méthode ------------------- Il existe trois grandes catégories de solveurs non-linéaires accessibles: * la méthode de Newton (et ses variantes) ; * les solveurs non-linéaires appelés `SNES `_ (Scalable Nonlinear Equations Solvers) de la librairie `PETSC `_ ; * le solveur ``RASPEN`` (Restricted Additive Schwarz Preconditioned Exact Newton) qui est fondé sur une approche de décomposition de domaines non-linéaires. Le solveur est sélectionné par le mot-clef METHODE. Méthode de Newton et ses variantes ---------------------------------- Quand METHODE="NEWTON", on utilise l'algorithme de Newton-Raphson pour résoudre le problème (voir [:ref:`R5.03.01 `]). C'est le mot-clef facteur NEWTON (une seule occurrence) qui permet de régler les différents paramètres. La phase de prédiction (Cf. [:ref:`R5.03.01 `]) a pour but de calculer une estimation du champ de déplacements afin de permettre à la méthode de Newton de converger plus rapidement. Losque le mot clé est absent, c'est la matrice tangente en vitesse (option RIGI_MECA_TANG) qui est utilisée si l'on a choisi pour la méthode de Newton une PREDICTION='TANGENTE', et c'est la matrice élastique (option RIGI_MECA) qui est utilisée si on a choisi PREDICTION='ELASTIQUE'. Le mot-clef REAC_INCR=mf permet de contrôler la fréquence de réactualisation de la matrice par rapport aux pas de temps. Remarques * Si la matrice utilisée en prédiction correspond au calcul élastique, elle n'est évaluée qu'une fois à l'instant initial, en début d'algorithme, sauf si les caractéristiques élastiques dépendent du temps ou d'une variable de commande comme la température qui dépend du temps * Cette matrice "élastique" est calculée en utilisant le module d'Young donné sous le mot clé ELAS de l'opérateur [:ref:`U4.43.01 `], et non pas la pente à l'origine de la courbe de traction donnée sous le mot clé TRACTION (et qui sert, elle, dans l'expression des relations de comportement VMIS_ISOT_TRAC, VMIS_ECMI_TRAC et VISC_ISOT_TRAC) La matrice utilisée pour les itérations globales de la méthode est la matrice tangente (consistante) [:ref:`R5.03.01 `] si MATRICE='TANGENTE' ou la matrice élastique si MATRICE='ELASTIQUE'. Le mot-clef REAC_ITER=it permet de contrôler la fréquence de réactualisation de la matrice par rapport aux itérations de Newton. Donc à la première itération de Newton, on ne réassemble la matrice tangente que si it vaut 1: sinon on garde la matrice utilisée dans la phase de prédiction. Par convention si it vaut 0 la matrice n'est pas réévaluée durant tout le pas de temps. Méthode ``SNES`` --------------- Quand METHODE="SNES", on fait appel au solveur non-linéaire `SNES `_ de la librairie `PETSC `_. Il s'agit d'une implantation très générique de nombreux solveurs différents allant de la méthode de Newton classique, à la méthode BFGS ou la méthode de Picard ainsi que toutes les combinaisons possibles de ces dernières (voir [bib1]_). Le paramétrage se fait par une liste d'options transmises sous forme de chaines de caractères par le mot-clé OPTION_PETSC du mot-clé facteur SOLVEUR (voir [:ref:`U4.50.01 `]). Son usage est réservé aux utilisateurs avancés. Méthode ``RASPEN`` ----------------- La méthode ``RASPEN`` est fondée sur une méthode de décomposition de domaine non-linéaire. Elle est uniquement utilisable dans le contexte HPC. Elle s'appuie sur 2 niveaux de solveurs non-linéaires : * un niveau local, où un problème non-linéaire est résolu sur chaque sous-domaine, sans communication avec ses voisins et donc de manière parallèle et asynchrone ; * un niveau global, qui exploite les résolutions locales précédentes pour faciliter la résolution du problème considéré. Comme pour la méthode ``SNES``, le paramétrage se fait par une liste d'options transmises sous forme de chaines de caractères par le mot-clé OPTION_PETSC du mot-clé facteur SOLVEUR. Les options qui concernent le solveur local sont préfixées par ``lsnes_`` tandis que les options qui concernent le solveur global sont préfixées par ``gsnes_``. On peut commodemment définir ces options comme suit : .. code-block:: python myOptions = ( # local snes "-prefix_push lsnes_ " + "-snes_monitor -snes_linesearch_type basic -snes_rtol 1.e-8 -snes_atol 1.e-50 -snes_max_it 5 " + "-ksp_type preonly -pc_type lu -pc_factor_mat_solver_type mumps " + "-prefix_pop " # global snes + "-prefix_push gsnes_ " + "-snes_linesearch_type basic -ksp_monitor -ksp_rtol 1.e-7 -ksp_atol 1.e-50 -snes_max_it 20 " + "-prefix_pop " ) La première ligne exprime le fait que l'on va paramétrer le solveur non-linéaire local à chaque sous-domaine appelé "lsnes" ("l" pour local, "snes" pour Scalable Nonlinear Equations Solvers). Ensuite, on exprime que l'on veut monitorer le solveur non linéaire local qui est par défaut la méthode de Newton ; on précise que la recherche linéaire n'est pas utilisée (basic signifie que l'on utilise un pas de 1.) et on donne les critères de convergence relatif et absolu ainsi que le nombre maximal d'itérations. Ensuite on exprime que l'on souhaite utiliser le solveur MUMPS pour résoudre les problèmes linéarisés. On fait ensuite de même pour le solveur non-linéaire global appelé "gsnes". Pour toute précision, le lecteur est renvoyé vers [bib2]_. Son usage est réservé aux utilisateurs avancés. Recherche linéaire ------------------ La recherche linéaire peut permettre d'améliorer la convergence de la méthode de Newton (Cf.[R5.03.01] pour plus de détails). Remarque: Il est déconseillé d'utiliser la recherche linéaire avec les déformations GROT_GDEP, pour les modélisations COQUE_3D et en présence de contact. Ce mot-clef permet de choisir la méthode de recherche linéaire, c'est-à-dire l'algorithme de recherche du zéro de la fonctionnelle (voir [:ref:`R5.03.01 `]). La méthode est une méthode sécante unidimensionnelle. Les paramètres ITER_LINE_MAXI=itelin et RESI_LINE_RELA=reslin sont les paramètres de la recherche linéaire. On donne le nombre d'itérations maximum itelin à effectuer et la précision reslin à atteindre pour réaliser la convergence de la recherche linéaire. Les mots-clés RHO_MIN, RHO_MAX et RHO_EXCL fixent l'intervalle :math:`I` dans lequel on calcule le coefficient :math:`\rho`: de la recherche linéaire, sous la forme .. math:: I=[\rho_{min},\rho_{max}]-[-\rho_{exc},\rho_{exc}]