1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2% File : behaviours.tex 3% Author : th202608@pleiades068.intra.cea.fr 4% Date : 15 oct. 2012 5% Directory : /home/th202608/codes/tfel/tests/Broyden/ 6%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 7 8% \documentclass[rectoverso,pleiades,pstricks,leqno,anti]{note_technique_2010} 9\documentclass[rectoverso,pleiades,pstricks,leqno,anti,projet]{note_technique_2010} 10 11% \usepackage{draftcopy} 12% \draftcopySetGrey{0.8} 13% \draftcopyName{Version provisoire}{80} 14 15\usepackage[dvips]{graphicx} 16\usepackage[dvips,breaklinks]{hyperref} 17 18\usepackage{mathematiques} 19\usepackage{mecanique} 20\usepackage{couleurs} 21\usepackage{presentation} 22 23\usepackage{pst-plot} 24\usepackage{array} 25\usepackage{subfigure} 26\usepackage{relsize} 27\usepackage{multind} 28 29% one column index 30\makeatletter 31\def\printindex#1#2{\section*{#2} 32\addcontentsline{toc}{section}{#2} 33\@input{#1.ind}} 34\makeatother 35 36\usepackage[frenchb]{babel} 37 38\newcommand{\pleiades}{\texttt{pleiades}} 39\newcommand{\TFEL}{\texttt{tfel}} 40\newcommand{\mfront}{\texttt{mfront}} 41\newcommand{\mtest}{\texttt{mtest}} 42\newcommand{\alcyone}{\texttt{alcyone}} 43\newcommand{\germinal}{\texttt{germinal}} 44\newcommand{\licos}{\texttt{licos}} 45\newcommand{\celaeno}{\texttt{celaeno}} 46\newcommand{\mfm}{\texttt{MFront\-Materials}} 47\newcommand{\cyrano}{\texttt{cyrano}} 48\newcommand{\galileo}{\texttt{galileo}} 49\newcommand{\castem}{\texttt{Cast3M}} 50\newcommand{\gibiane}{\texttt{gibiane}} 51\newcommand{\tmfft}{\texttt{TMFFT}} 52\newcommand{\aster}{\href{http://www.code-aster.org/}{\texttt{Aster}}} 53\newcommand{\pycastem}{\texttt{pyCast3M}} 54\newcommand{\umat}{\texttt{umat}} 55\newcommand{\sirius}{\texttt{sirius}} 56\newcommand{\fortran}{\texttt{fortran}} 57 58\newcommand{\cmake}{\href{http://www.cmake.org/}{\texttt{cmake}}} 59\newcommand{\autotools}{\href{http://fr.wikipedia.org/wiki/Autotools}{\texttt{autotools}}} 60\newcommand{\python}{\href{http://python.org}{\texttt{python}}} 61\newcommand{\gnuplot}{\href{http://www.gnuplot.info}{\texttt{gnuplot}}} 62\newcommand{\latex}{\href{http://www.latex-project.org}{\LaTeX2e{}}} 63\newcommand{\make}{\href{http://www.gnu.org/software/make/}{\texttt{make}}} 64\newcommand{\doxygen}{\href{http://www.stack.nl/~dimitri/doxygen/}{\texttt{doxygen}}} 65\newcommand{\valgrind}{\href{http://www.valgrind.org/}{\texttt{valgrind}}} 66 67\newcommand{\mkey}[1]{\index{bmkeys}{#1@\symbol{64}#1}{\texttt{@#1}}} 68\newcommand{\mkeyb}[2]{\index{bmkeys}{#1@\symbol{64}#1}{\texttt{@#2}}} 69 70\newcommand{\header}[1]{\index{bheaders}{#1}{\texttt{#1}}} 71\newcommand{\headerb}[2]{\index{bheaders}{#1}{\texttt{#2}}} 72 73\newcommand{\tfel}[1]{\index{btfel}{#1}{\texttt{#1}}} 74\newcommand{\tfelb}[2]{\index{btfel}{#1}{\texttt{#2}}} 75 76%\newcommand{\env}[1]{\index{benv}{#1}{\texttt{#1}}} 77%\newcommand{\envb}[2]{\index{benv}{#1}{\texttt{#2}}} 78 79\newcommand{\moption}[1]{\texttt{-{}-#1}} 80 81\newcommand{\bigO}[1]{\ensuremath{\mathop{}\mathopen{}O\mathopen{}\left(#1\right)}} 82 83%c from texinfo.tex 84\def\ifmonospace{\ifdim\fontdimen3\font=0pt } 85 86%c C plus plus 87\def\cpp{% 88\ifmonospace% 89 C++% 90\else% 91 C\kern-.1667em\raise.30ex\hbox{\smaller{++}}% 92\fi% 93\spacefactor1000 } 94 95\newcommand{\varcpp}[1]{\texttt{#1}} 96 97\newcommand{\sigmaH}{\ensuremath{\sigma_{H}}} 98 99\newcommand{\nbzrc}{$NbZrC$} 100\newcommand{\upuc}{$\paren{U,Pu}C$} 101\newcommand{\sic}{$SiC$} 102 103\newcommand{\cea}{CEA} 104\newcommand{\windows}{\href{http://www.microsoft.com/france/windows/default.mspx}{\texttt{Windows}}} 105\newcommand{\unix}{\href{http://www.kernel.org/}{\texttt{unix}}} 106\newcommand{\msys}{\href{http://www.mingw.org/wiki/MSYS}{\texttt{msys}}} 107\newcommand{\cygwin}{\href{http://www.cygwin.com/}{\texttt{cygwin}}} 108\newcommand{\linux}{\href{http://www.kernel.org/}{\texttt{linux}}} 109\newcommand{\debian}{\href{http://www.debian.org/}{\texttt{Debian}}} 110\newcommand{\ubuntu}{\href{http://www.ubuntu.com}{\texttt{Ubuntu}}} 111\newcommand{\redhat}{\href{http://www.redhat.com}{\texttt{Red Hat}}} 112\newcommand{\mandriva}{\href{http://www.mandriva.com}{\texttt{Mandriva}}} 113\newcommand{\excel}{\href{http://www.microsoft.com/france/office/2007/programs/excel/overview.mspx}{\texttt{Microsoft Office Excel}}} 114 115\newcommand{\debutpas}[1]{\ensuremath{\left.#1\right|_{t}}} 116\newcommand{\milieupas}[1]{\ensuremath{\left.#1\right|_{t+\theta\, \Delta\, t}}} 117\newcommand{\finpas}[1]{\ensuremath{\left.#1\right|_{t+\Delta\, t}}} 118\newcommand{\demipas}[1]{\ensuremath{\left.#1\right|_{t+\frac{\Delta\, t}{2}}}} 119 120\newcommand{\uod}{\ensuremath{UO_{2}}} 121 122\newcommand{\code}[1]{ 123 \psframebox[linecolor=ceaorange,shadow=true,blur=true]{ 124 \begin{minipage}[htbp]{1.0\linewidth} 125 \ttfamily\small#1 126 \end{minipage} 127 } 128} 129 130\newcommand{\bash}[1]{ 131 \begin{center} 132 \begin{minipage}{0.8\linewidth} 133 \footnotesize{} 134 \texttt{\$#1} 135 \end{minipage} 136 \end{center} 137} 138 139\input{LSC} 140 141\auteurs{T.~Helfer, É. Castelier, V.~Blanc, J.~Julien} 142\redacteur{T.~Helfer} 143\verificateur{J.-M.~Proix} 144\approbateur{R.~Masson} 145\emetteur{E.~Touron} 146 147\titre{Le générateur de code \mfront{}~: écriture de lois de 148 comportement mécanique} 149 150\date{Décembre 2013} 151\numero{13-020} 152\indice{0} 153\dateversion{12/2013} 154\numeroaffaire{A-SICOM-A1-01} 155\domaine{DEN/DISN/SIMU} 156\accords{tripartite} 157\clients{AREVA - EDF} 158\programmerecherche{SICOM} 159\classification{DO} 160\motsclefs{ 161 \mfront{} - \pleiades{} 162} 163 164% \codebarre{images/code_barre} 165\diffusionexterne{ 166{EDF/R\&D} & O. Marchand & 1 & Diffusion par\\ 167{EDF/R\&D} & P. Vasseur & 1 & courriel \\ 168{EDF/R\&D/AMA} & É. Lorentz & 1 & \\ 169 & C. Durand & 1 & \\ 170{EDF/R\&D/AMA/T64} & T. de Soza & 1 & \\ 171 & J. Delmas & 1 & \\ 172 & J.M. Proix & 1 & \\ 173 & F. Hammon & 1 & \\ 174 & N. Sellenet & 1 & \\ 175{EDF/R\&D/MMC} & P. Ollar & 1 & \\ 176{EDF/R\&D/MMC/MAESTRO} & N. Rupin & 1 & \\ 177 & F. Latourte & 1 & \\ 178{EDF/R\&D/MMC/CPM} & N. Prompt & 1 & \\ 179 & N. Barnel & 1 & \\ 180{EDF/R\&D/MMC/CPM} & G. Thouvenin & 1 & \\ 181 & F. Douchin & 1 & \\ 182 & R. Largenton & 1 & \\ 183 & C. Petry & 1 & \\ 184EDF/SEPTEN & N. Waeckel & 1 & \\ 185 & C. Chauliac & 1 & \\ 186 & H. Billat & 1 & \\ 187 & C. Bernaudat & 1 & \\ 188AREVA NP/LA DEFENSE & L. Catalani & 1 & \\ 189 & L. Brunel & 1 & \\ 190AREVA NP/LYON & P. Melin & 1 & \\ 191 & V. Bessiron & 1 & \\ 192 & C. Garnier & 1 & \\ 193 & V. Garat & 1 & \\ 194 & F. Arnoux & 1 & 195} 196\CoupeListeDiffusion{} 197\diffusioninterne{ 198 DEN/DISN/SIMU & J.P. Deffain & 1 & Diffusion par\\ 199 & D. Caruge & 1 & courriel \\ 200 DEN/DM2S/SEMT & X. Averty & 1 & \\ 201 DEN/DM2S/SEMT/LM2S & J.L. Fayard & 1 & \\ 202 & P. Verpeaux & 1 & \\ 203 & A. Millard & 1 & \\ 204 & S. Pascal & 1 & \\ 205 & O. Fandeur & 1 & \\ 206 DEN/DMN & P. Yvon & 1 & \\ 207 & J.L. Seran & 1 & \\ 208 & F. Dalle & 1 & \\ 209 DEN/DMN/SRMA & P. Chapelot & 1 & \\ 210 & S. Carassou & 1 & \\ 211 & B. Marini & 1 & \\ 212 DEN/DMN/SRMA/LC2M & L. Nicolas & 1 & \\ 213 & J. Garnier & 1 & \\ 214 & S. Vincent & 1 & \\ 215 & L. Vincent & 1 & \\ 216 & L. Gelebart & 1 & \\ 217 & M. Sauzay & 1 & \\ 218 & L. Dupuy & 1 & \\ 219 & P. Forget & 1 & \\ 220 & A. Hellouin de Menibus & 1 & \\ 221 & M. Le Saux & 1 & \\ 222 & C. Robertson & 1 & \\ 223 DEN/DMN/SRMA/LA2M & J.-L. Bechade & 1 & \\ 224 DEN/DMN/SRMA/LTMEX & L. Chaffron & 1 & \\ 225 & D. Sornin & 1 & \\ 226 DEN/DMN/SEMI & C. Poussard & 1 & \\ 227 & B. Tanguy & 1 & \\ 228 DEN/DMN/SEMI/LCMI & V. Vandenberghe & 1 & \\ 229 & A. Courcelle & 1 & \\ 230 & F. Hure & 1 & \\ 231 & D. Leboulch & 1 & \\ 232 & Q. Auzoux & 1 & \\ 233 & Y. Robert & 1 & \\ 234 DEN/DER/SESI/LE2S & P. Lamagnère & 1 & \\ 235 & D. Gentet & 1 & \\ 236 & Y. Lejeail & 1 & \\ 237 & & & \\ 238 DEN/DEC & P. Brossard & & Document disponible\\ 239 DEN/DEC/PROJETS & P. Obry & & sur intradec\\ 240 DEN/DEC/SESC & E. Touron & & \\ 241 & M. Casella & & \\ 242 & M. Agard & & \\ 243 DEN/DEC/SESC/LIPA & C. Nonon-Solaro & & \\ 244 & C. Bassi & & \\ 245 & O. Bremond & & \\ 246 DEN/DEC/SESC/LLCC & V. Basini & & \\ 247 & J.-M. Escleine & & \\ 248 DEN/DEC/SESC/LC2I & D. Plancq & & \\ 249 & S. Bejaoui & & \\ 250 & V. Blanc & & \\ 251 & T. Beck & & \\ 252 & F. Biscarrat & & \\ 253 & D. Lorenzo & & \\ 254 & I. Guénot-Delahaie & & \\ 255 & P. Masoni & & \\ 256 & B. Valentin & & \\ 257 & M. Zabiego & & \\ 258 DEN/DEC/SESC/LSC & R. Masson & & \\ 259 & B. Michel & & \\ 260 & M. Pelletier & & \\ 261 & M. Lainet & & \\ 262 & V. Bouineau & & \\ 263 & V. Marelle & & \\ 264 & T. Helfer & & \\ 265 266} 267 268% \signatures{-0.}{-39.2}{0.12}{images/signatures.eps} 269 270\stylebib{@abs_top_srcdir@/docs/tex/texmf/bibtex/fr-insa} 271\fichierbib{@abs_top_srcdir@/docs/tex/texmf/bibtex/bibliographie} 272 273\resumecea{ 274 L'une des missions de la plate-forme \pleiades{} est de capitaliser 275 les connaissances matériau utilisées pour la simulation des éléments 276 combustibles et absorbants. 277 278 Cette note s'intéresse aux lois de comportement mécanique et plus 279 particulièrement à leur écriture à l'aide du générateur de code 280 \mfront{}. Elle complète la présentation générale de \mfront{} qui 281 traite des propriétés matériau et des modèles 282 physico-chimiques~\cite{helfer_generateur_2013-1}. Dans le cadre de 283 la plate-forme \pleiades{}, ces lois de comportement peuvent être 284 stockées dans la base de données \sirius{}. 285 286 La variété des phénomènes traités fait que \mfront{} propose 287 différentes façons d'écrire des lois de comportement mécaniques. 288 289 Certaines sont spécifiques à des lois de comportement qui sont 290 d'usage courant et pour lesquelles des algorithmes d'intégration 291 performants existent (plasticité et viscoplasticité isotropes 292 notamment). 293 294 Pour les lois les plus complexes, \mfront{} permet d'utiliser 295 des méthodes de \nom{Runge-Kutta} ou des méthodes implicites. 296 297 % Les différents tests menés avec les codes aux éléments finis 298 % \castem{} et \aster{} montrent que les lois de comportement générées 299 % sont numériquement très 300 % efficaces~\cite{michel_etude_2009,helfer_bilan_2011,proix_integration_2013,olagnon_analysis_2013}. 301 % Il s'agit d'un outil mature, qui se veut de qualité industrielle et 302 % qui intéresse fortement différents départements du 303 % \cea{}~\cite{helfer_presentation_2011,darrigo_notice_2012} ainsi que ses 304 % partenaires, Areva~\cite{olagnon_analysis_2013} et 305 % ÉDF~\cite{proix_integration_2013}. Cet intérêt confirme la crédibilité et 306 % la rigueur de la gestion des connaissances matériau au sein de la 307 % plate-forme. Le partage de cet outil ouvre des perspectives variées 308 % et enrichissantes de co-développement et de mutualisation. 309 310} 311 312%\makeindex{env} 313\makeindex{btfel} 314\makeindex{bheaders} 315\makeindex{bmkeys} 316 317\begin{document} 318 319\clearpage 320\newpage 321\section{Introduction} 322 323Ce document décrit comment écrire des lois de comportement mécanique 324avec le générateur de code \mfront{}. \mfront{} vise à garantir une 325gestion pérenne, robuste, efficace et évolutive des connaissances 326matériau dans la plate-forme 327\pleiades{}~\cite{michel_etude_2009,helfer_bilan_2011}. Il permet 328également à des utilisateurs non développeurs d'écrire leurs propres 329connaissances matériau~\cite{helfer_ajout_2010}. Cette note intègre 330des éléments d'une note antérieure décrivant un algorithme numérique 331particulier~\cite{blanc_integration_2011}. 332 333Elle complète la présentation générale de 334\mfront{}~\cite{helfer_generateur_2013-1}. Deux autres notes 335traitent\footnote{Citons également qu'un guide de référence de la 336 librairie \TFEL{} est également en cours de rédaction. Cette note 337 étant assez ambitieuse, sa rédaction s'étalera dans le temps. Elle 338 est cependant disponible en version projet dans les sources de la 339 librairie. Elle contient en particulier le guide d'installation de 340 la librairie.}~: 341\begin{itemize} 342\item de l'interface {\tt umat} utilisée par le codes aux éléments 343 finis \castem{}~\cite{helfer_interface_2013}~; 344\item de l'interface utilisée par le codes aux éléments finis 345 \aster{}~\cite{helfer_interface_2013-1}~; 346\end{itemize} 347Ces notes sont intégrées à la gestion de configuration de \TFEL{} et 348évoluent continûment avec les développements de \TFEL{}\footnote{ La 349 version la plus à jour est obtenue dans le répertoire de compilation 350 des sources par la commande~: 351\begin{center} 352 {\tt make doc-pdf} 353\end{center}}. Le présent document a été généré à partir de la 354révision @TFEL_SVN_REVISION@. 355 356La lecture de ce document suppose que le lecteur est déjà familier de 357\mfront{}. A minima, la lecture de la présentation générale de 358\mfront{} semble nécessaire~\cite{helfer_generateur_2013-1}. 359 360\paragraph{De multiples phénomènes} Les matériaux solides réagissent 361aux sollicitations mécaniques par différents phénomènes~: élasticité, 362viscoplasticité, plasticité, endommagement. Nous renvoyons aux 363ouvrages classiques pour la description physique de ces 364phénomènes~\cite{francois_comportement_1995,chaboche_mecanique_2009,besson_mecanique_2001}. 365 366\paragraph{Rôle de la loi de comportement} Nous décrivons en 367annexe~\ref{sec:mfront:mechanical_equilibrium} un algorithme simplifié 368de recherche de l'équilibre mécanique statique non-linéaire qui 369précise la place de la loi de comportement mécanique. Le lecteur 370intéressé pourra se reporter aux documentations des codes éléments 371finis pour une description plus 372précise~\cite{pascal_notice_2005,abbas_algorithme_2013,besson_mecanique_2001}. 373 374En résumé, connaissant l'état mécanique du matériau à un instant 375\(t\), les lois de comportement doivent, en réponse à un incrément de 376sollicitation mécanique représentée par un incrément de déformations 377totales \(\Delta\,\tepsilonto\), fournir, en chaque point 378d'intégration~: 379\begin{itemize} 380\item l'évolution microstructurelle du matériau, décrit par un 381 ensemble de variables internes \(y_{i}\) sur le pas de temps 382 \(\Delta\, t\)~; 383\item la valeur de la contrainte en fin de pas de temps (ou de manière 384 équivalente l'incrément de contraintes \(\Delta\,\tsigma\)). 385\end{itemize} 386 387Si l'algorithme de recherche de l'équilibre mécanique le nécessite, la 388loi de comportement peut également fournir~: 389\begin{itemize} 390\item la matrice tangente cohérente 391 \(\deriv{\Delta\tsigma}{\Delta\tepsilonto}\) ou une estimation de 392 celle-ci. 393\item une matrice de prédiction en début de pas de temps permettant de 394 fournir une première estimation de la solution en fin de pas de 395 temps, avant de débuter la résolution. 396\end{itemize} 397 398Dans certains cas, les lois de comportement peuvent également donner 399des indications sur la qualité de la discrétisation temporelle du 400problème~\cite{proix_etude_2011}. 401 402\subsection{Analyseurs disponibles} 403 404L'écriture de lois de comportement nécessite de prendre à la fois en 405compte les mécanismes physiques décrits (certains algorithmes sont 406plus adaptés à certains phénomènes) et des besoins des codes éléments 407finis (matrice tangente cohérente). La variété des situations 408rencontrées en pratique expliquent la variété des analyseurs proposés 409par \mfront{}, qui sont actuellement au nombre de \(8\)\footnote{La 410 notion d'analyseur est décrite plus en détails dans la première 411 partie de la documentation de 412 \mfront~\cite{helfer_generateur_2013-1}.}. La description de ces 413analyseurs est l'objet de ce document. 414 415Plusieurs analyseurs dédiés aux lois de comportement sont 416actuellement disponibles~: 417\begin{itemize} 418\item l'analyseur \texttt{DefaultParser} qui permet de traiter 419 tous types de lois de comportements~; 420\item l'analyseur \texttt{IsotropicMisesCreep} qui gère 421 exclusivement les lois de comportement mécanique viscoplastique 422 incompressible sans écrouissage des matériaux isotropes~; 423\item l'analyseur \texttt{IsotropicStrainHardeningMisesCreep} qui gère 424 exclusivement les lois de comportement mécanique viscoplastique 425 incompressible avec écrouissage des matériaux isotropes~; 426\item l'analyseur \texttt{IsotropicPlasticMisesFlow} qui gère 427 exclusivement les lois de comportement mécanique plastique 428 incompressible des matériaux isotropes~; 429\item l'analyseur \texttt{MultipleIsotropicMisesFlows} qui gère 430 une combinaison arbitraire d'écoulements des trois types précédents. 431 Les différents écoulements sont supposés non couplés~; 432\item les analyseurs \texttt{Implicit} et \texttt{ImplicitII} qui 433 simplifient la résolution d'une loi de comportement mécanique 434 quelconque à l'aide d'une intégration implicite. 435\end{itemize} 436 437Ces différents analyseurs sont décrits dans les sections suivantes. 438 439\subsection{Plan de la note} 440 441La section~\ref{mfront:behaviours:gen} décrit des généralités sur les 442lois de comportements mécaniques et introduit certaines notions 443nécessaires à la suite. 444 445Les analyseurs \texttt{Isotropic\-Mises\-Creep}, 446\texttt{IsotropicStrainHardening\-Mises\-Creep}, 447\texttt{Isotropic\-Plastic\-Mises\-Flow} et 448\texttt{Multiple\-Isotropic\-Mises\-Flows} sont très proches et sont 449décrits en section~\ref{sec:mfront:isotropic:analyser}. 450 451Les analyseurs \texttt{DefaultParser}, \texttt{RungeKutta} et 452\texttt{Implicit} sont dits {\em génériques} car ils permettent de 453traiter n'importe quelle loi de comportement. Ils sont respectivement 454décrits dans les sections~\ref{sec:defaultparser}, \ref{sec:RK} 455et~\ref{sec:Implicite}. 456 457\clearpage 458\newpage 459\section{Généralités} 460\label{mfront:behaviours:gen} 461 462Nous abordons dans cette section des points qui sont utiles pour la 463lecture de la suite. Nous commençons par préciser les définitions 464utilisées dans la suite. Nous donnons ensuite quelques conseils sur le 465choix de l'analyseur à utiliser. Nous traitons quelques points qui 466sont indépendants de l'analyseur utilisé. Enfin, nous précisons le 467rôle des interfaces aux lois de comportement. 468 469\subsection{Quelques définitions} 470 471Les lois de comportement peuvent être complexes. Pour les décrire, il 472nous faut introduire quelques définitions. 473 474\paragraph{Propriétés matériau} Afin de pouvoir adapter des lois de 475comportements à différents matériaux, celles-ci peuvent utiliser des 476propriétés matériau, qui sont définies, dans \mfront{}, comme des 477fonctions des valeurs actuelles des variables d'état du 478matériau~\cite{helfer_generateur_2013-1}. 479 480Les lois de comportement mécaniques peuvent~: 481\begin{itemize} 482\item demander à ce qu'un certain nombre de propriétés matériau leur 483 soient fournies par le code appelant~\footnote{Voir le mot clé 484 \mkey{MaterialProperty}.}. Dans certains cas, le code \castem{} 485 notamment~\cite{helfer_interface_2013}, le code appelant impose que la 486 loi de comportement utilise des propriétés matériau prédéfinies. 487\item utiliser des lois définies dans des fichiers \mfront{} 488 dédiés~\footnote{Voir le mot clé \mkey{MaterialLaw}.}. 489\end{itemize} 490 491\paragraph{Les variables internes} Les variables internes décrivent 492l'état mécanique local du matériau. 493 494Pour \mfront{}, les variables internes peuvent être soit des {\em 495 scalaires} soit des {\em tenseurs} d'ordre \(2\) symétriques. 496 497Certains analyseurs, dédiés à des lois de comportement spécifiques, ne 498permettent pas de déclarer de nouvelles variables internes. 499 500\paragraph{Les variables internes auxiliaires} Les variables internes 501auxiliaires désignent des variables internes qui ne sont pas nécessaires 502pour l'intégration de la loi de comportement. Ces variables ont des 503utilités diverses~: 504\begin{itemize} 505 \item elles peuvent désigner des variables qui peuvent être éliminées 506 de l'intégration~; 507 \item des variables uniquement destinées aux posttraitements. 508\end{itemize} 509 510Les variables internes auxiliaires sont mises à jour après 511l'intégration des variables internes. Elles peuvent être soit des {\em 512 scalaires} soit des {\em tenseurs}. 513 514\paragraph{Les variables externes} Les variables externes 515désignent des variables dont l'évolution est donnée par ailleurs et 516connue sur le pas de temps. Ces variables peuvent ou être des variables 517d'état du matériau ou des paramètres externes (flux de neutrons, 518fluence, densité de fissions). 519 520Parmi les variables externes, nous pouvons citer la température, la 521déformation totale du matériau (qui représente la sollicitation locale 522et dont la valeur est donnée par la résolution de l'équilibre global du 523matériau). Ces deux variables sont traitées de manière particulière par 524\mfront{} et déclarées automatiquement. 525 526\paragraph{Les variables locales} Les variables locales permettent 527généralement de calculer des variables avant de débuter l'intégration 528afin d'éviter des calculs superflus. 529 530Une utilisation typique de variable locale est de calculer avant 531l'intégration des termes de type \nom{Arrhenius} (termes de la forme 532\(\exp\paren{-\Frac{Q}{R\,T}}\)) afin de ne pas les réévaluer au cours 533des itérations. Ces termes sont souvent évalués en milieu de pas de 534temps, ce qui est cohérent avec une intégration par une 535\(\theta\)-méthode, et une approximation généralement suffisante pour 536les autres méthodes d'intégration. 537 538Il n'y a pas de limite sur le type des variables locales. 539 540La directive \mkey{InitLocalVariables}\footnote{La directive 541 \mkey{InitLocalVars} est synonyme de la directive 542 \mkey{InitLocalVariables}.} permet d'initialiser ces variables 543locales. 544 545\paragraph{Tableaux de variables internes, de propriétés matériau et 546 de variables externes} Afin de pouvoir regrouper des équations dont 547le {\em formalisme} était similaire, nous avons introduit la 548possibilité de définir des tableaux de variables internes, de 549propriétés matériaux et de variables externes. Il faut noter que la 550taille de ces tableaux, c'est à dire le nombre de variables internes, 551de propriétés matériau et/ou de variables externes est fixés \og~en 552dur~\fg{} dans le fichier d'entrée. 553 554Il est alors possible d'écrire des boucles sur les variables internes 555constituant le tableau pour condenser l'écriture des lois. 556 557La possibilité d'utiliser des tableaux de variables internes est 558particulièrement utile en homogénéisation. Les lois de comportement 559homogénéisées peuvent avoir un grand nombre de variables internes qui 560partagent des lois d'évolutions similaires. Un exemple de cela est 561donné par les lois issues de l'homogénéisation de poly-cristaux qui 562peuvent conduire à plusieurs milliers de variables 563internes~\cite{proix_comportements_2013-1}. Grâce aux tableaux de variables 564internes, l'implantation de ce type de lois peut être très courte (une 565centaine de lignes). 566 567\subsection{Conseils sur le choix de l'analyseur à utiliser} 568 569Pour pouvoir traiter tous les types de lois de comportement, 570différents analyseurs sont disponibles. Les analyseurs propres à des 571formes de lois de comportement sont dits spécifiques. Par opposition, 572les autres sont dits génériques. 573 574Nous pouvons donner quelques conseils généraux sur le choix de 575l'analyseur à utiliser~: 576\begin{itemize} 577\item si un intégrateur spécifique existe, il vaut mieux l'utiliser~: 578 il utilise un algorithme optimisé et robuste et le nombre 579 d'informations à fournir est réduit. 580\item si l'on doit recourir à un intégrateur générique, il vaut mieux 581 préférer l'intégration implicite, surtout s'il s'agit de lois 582 indépendantes du temps (plasticité, endommagement)~: 583 \begin{itemize} 584 \item l'équation différentielle pour la plasticité ou 585 l'endommagement doit être remplacée par la nullité du critère en fin 586 de pas de temps~; 587 \item les temps de calculs sont souvent {\em très} avantageux~; 588 \end{itemize} 589 \item il ne faut utiliser l'analyseur \nom{Runge-Kutta} que~: 590 \begin{itemize} 591 \item si {\em vraiment rien d'autre} n'est possible (impossibilité 592 de calculer la jacobienne) 593 \item si le temps de développement est limité~; 594 \item si le temps d'intégration de la loi de comportement ne pose 595 pas de problème de performance~; 596 \item si le nombre de variables internes est très grand (loi de 597 comportement issus de l'homogénéisation de 598 poly-cristaux~\cite{proix_comportements_2013-1} notamment). 599 \end{itemize} 600\end{itemize} 601 602Insistons sur le fait que l'utilisation de l'analyseur 603\nom{Runge-Kutta} est fortement déconseillée. De nombreux 604développements ont été faits pour rendre l'utilisation des méthodes 605implicites plus simples (calcul automatique de la jacobienne par 606différentiation numérique, algorithmes de \nom{Broyden}) et si 607l'expression de la loi reste encore un peu plus complexe, les gains en 608performance valent largement l'effort supplémentaire. 609 610L'analyseur \texttt{DefaultParser} n'est utile que dans ces cas très 611particuliers, par exemple pour des lois dépendant explicitement des 612déformations (loi de \nom{Mazars} par 613exemple~\cite{hamon_modeendommagement_2013}). 614 615\subsection{Points particuliers} 616 617\subsubsection{Hypothèses de modélisation} 618 619Les lois de comportement sont implantées par des classes {\tt 620 template} paramétrée par l'hypothèse de modélisation. Ce choix 621permet de~: 622\begin{itemize} 623\item proposer une implantation optimisée et fiable de la loi de 624 comportement pour chacune des hypothèses de modélisation~; 625\item traiter les cas particuliers, les contraintes planes notamment~; 626\item de spécifier quelles sont les hypothèses valides. Par exemple, 627 les lois issues de l'homogénéisation de poly-cristaux doivent 628 nécessairement être intégrées en 629 \(3D\)~\cite{proix_comportements_2013-1} 630\end{itemize} 631 632Le fichier d'entête 633\headerb{TFEL/MaterialLaw/ModellingHypothesis.hxx}{TFEL/\-Material\-Law/\-Modelling\-Hypo\-thesis\-.hxx} 634définit une structure 635\tfelb{ModellingHypothesis}{Modelling\-Hypo\-thesis}. Dans cette 636structure, un objet de type énumération nommé 637\tfelb{ModellingHypothesis::Hypothesis}{Hypo\-thesis} définit les 638différentes hypothèses de modélisation ajourd'hui supportées~: 639\begin{itemize} 640 \item \texttt{AXISYMETRICAL\-GENERALISED\-PLANE\-STRAIN} qui désigne 641 une modélisation \(1D\) axisymétrique plan généralisée. Dans ce cas, 642 le tenseur des contraintes a \(3\) composantes et est représenté par 643 le vecteur suivant~: 644\[ 645 \tsigma = \left( 646 \begin{array}{c} 647 \sigma_{rr} \\ 648 \sigma_{zz} \\ 649 \sigma_{\theta\theta} \\ 650 \end{array} 651 \right) 652 \] 653 \item \texttt{AXI\-SYMETRICAL} qui désigne une modélisation \(2D\) 654 axisymétrique. Dans ce cas, le tenseur des contraintes a \(4\) 655 composantes et est représenté par le vecteur suivant~: 656\[ 657 \tsigma = \left( 658 \begin{array}{c} 659 \sigma_{rr} \\ 660 \sigma_{zz} \\ 661 \sigma_{\theta\theta} \\ 662 \sqrt{2}\sigma_{rz} \\ 663 \end{array} 664 \right) 665 \] 666 \item \texttt{PLANE\-STRESS}, \texttt{PLANE\-STRAIN} et 667 \texttt{GENERALISED\-PLANE\-STRAIN} qui désigne différentes 668 modélisations \(2D\) qui se distinguent par le traitement de la 669 direction axiale. Dans ces cas, le tenseur des contraintes a \(4\) 670 composantes et est représenté par le vecteur suivant~: 671\[ 672 \tsigma = \left( 673 \begin{array}{c} 674 \sigma_{xx} \\ 675 \sigma_{yy} \\ 676 \sigma_{zz} \\ 677 \sqrt{2}\sigma_{xy} \\ 678 \end{array} 679 \right) 680 \] 681\item \texttt{TRIDIMENSIONAL} qui désigne la modélisation la plus 682 générale. Dans ce cas, le tenseur des contraintes a \(6\) 683 composantes et est représenté par le vecteur suivant~: 684\[ 685 \tsigma = \left( 686 \begin{array}{c} 687 \sigma_{xx} \\ 688 \sigma_{yy} \\ 689 \sigma_{zz} \\ 690 \sqrt{2}\sigma_{xy} \\ 691 \sqrt{2}\sigma_{xz} \\ 692 \sqrt{2}\sigma_{yz} \\ 693 \end{array} 694 \right) 695 \] 696\end{itemize} 697 698\paragraph{Les directives \mkey{ModellingHypothesis} et 699 \mkey{ModellingHypotheses}} Les directives 700\mkeyb{ModellingHypothesis}{Modelling\-Hypothesis} et 701\mkeyb{ModellingHypotheses}{Modelling\-Hypotheses} permettent de 702spécifier les hypothèses de modélisation valides. La première attend 703le nom d'une hypothèse, la seconde un tableau contenant une ou 704plusieurs hypothèses. 705 706Les noms d'hypothèses valides sont donc les suivants~: 707\begin{itemize} 708\item AxisymmetricalGeneralisedPlaneStrain~; 709\item Axisymmetrical~; 710\item PlaneStress~; 711\item PlaneStrain~; 712\item GeneralisedPlaneStrain~; 713\item Tridimensional. 714\end{itemize} 715 716\paragraph{Cas des contraintes planes} 717Le cas des contraintes planes appelle certaines remarques. Le plus 718souvent, les lois de comportements ne peuvent être utilisées telles 719quelles en contraintes planes~: une implantation spécifique doit être 720faite. Pour cette raison, les contraintes planes sont exclues des 721hypothèses de modélisation supportées par défaut. 722 723Plusieurs stratégies peuvent être mises en place pour éviter d'avoir à 724écrire une implantation spécifique~: 725\begin{itemize} 726\item le code aux éléments finis {\tt Zebulon} introduit des éléments 727 finis spécifiques, possédant un degré de liberté supplémentaire (la 728 déformation axiale) dont la force associée (liée à la contrainte 729 axiale) est nulle~\cite{besson_object-oriented_1998-1}~; 730\item le code aux éléments finis \aster{} modifie l'algorithme de 731 résolution global pour converger vers une solution en contraintes 732 planes~\cite{proix_prise_2012}. 733\end{itemize} 734 735Pour le code aux éléments finis \castem{}, si une implantation en 736contraintes planes n'est pas disponible, l'interface \umat{} fournie 737par \mfront{} gère les contraintes planes en introduisant une variable 738interne supplémentaire (la déformation axiale) qu'elle ajuste (par 739appels successifs à la loi de comportement \(2D\)) pour trouver une 740contrainte axiale nulle~\cite{helfer_interface_2013}. 741 742\subsubsection{Traitement des matériaux orthotropes} 743 744Ce paragraphe décrit des fonctionnalités qui ne sont pas accessibles aux 745analyseurs spécifiques (dédiés à des lois isotropes). 746 747Écrire les lois de comportement orthotrope de manière indépendante 748de l'hypothèse de modélisation est rendue difficile par certaines 749restrictions imposées par les codes aux éléments finis \castem{} et 750\aster{}~: 751\begin{itemize} 752 \item il est nécessaire de gérer la rotation des contraintes 753 dans le repère propre au matériau. 754\item il n'est pas possible de choisir de manière cohérente une 755 convention sur l'ordonnancement des axes valable quelle que soit la 756 dimension. Le cas des tubes est traité en détail dans 757 l'annexe~\ref{sec:annexe:orthotropie}. 758\end{itemize} 759 760\subsubsection{Traitement des dilatations libres} 761 762\mfront{} ne traite en général pas des dilatations libres, et plus 763particulièrement ne traite en général pas des dilatations 764thermiques~: 765\begin{enumerate}[-] 766\item en petites transformations, Dans la plupart des codes aux 767éléments finis~\cite{cea_site_2013,edf_site_2013}, les dilatations 768libres sont généralement traitées en amont de l'intégration de la loi 769de comportement. Cela se traduit par le fait que la déformation totale 770passée à la loi de comportement est en fait la déformation mécanique 771totale, c'est à dire la déformation totale à laquelle ont été 772retranchées toutes les dilatations libres. 773\item en grandes transformations, le traitement des dilatations libres 774 dépend du formalisme choisi et en cadre général ne peut être fourni. 775\end{enumerate} 776 777Il peut cependant être intéressant de traiter certains gonflements dans 778la loi de comportement. Donnons quatres exemples pratiques~: 779\begin{enumerate}[-] 780\item certaines lois de comportement viscoplastique de gaine de 781 réacteurs refroidis au sodium relient l'intensité de l'écoulement 782 viscoplastique à la vitesse de gonflement~; 783\item certaines modélisations plastiques des aciers considèrent la 784 température comme une variable interne~: l'évolution de la 785 température, supposée adiabatique le temps de l'expérience, est 786 supposée due à la dissipation mécanique locale. Il peut paraître 787 intéressant de coupler finement mécanique et thermique~; 788\item il peut être nécessaire de traiter des changements de phases au 789 cours du calcul mécanique, en particulier la transition 790 martensite-austénite de certains aciers qui dépend de l'état de 791 contraintes~\cite{milliard_mechanical_2014}~; 792\item certaine stratégies \og~grandes transformations~\fg{} permettent 793 d'utiliser un formalisme de lois en petites déformations, voir 794 d'utiliser les lois identifiées en petites déformations 795 (voir~\cite{helfer_ecriture_2014}). Dans ce cas, la dissymétrie de 796 traitement par les codes appelant (notée plus haut) entre les 797 petites déformations (traitement des dilatations libres) et les 798 grandes déformations (non traitement des dilatations libres) 799 apparaît d'autant plus gênante que l'expression usuelle des 800 dilatations libres (voir équation~\eqref{eq:behaviour:epsilonth} 801 pour la dilatation thermique), convenablement post-traitée, peut 802 être réutilisée. 803\end{enumerate} 804 805\paragraph{Cas des lois en petites transformations, cas général} 806 807En petites transformations, une solution simple pour prendre en compte 808une dilatation libre, est de calculer un incrément de dilatation et de 809le soustraire à l'incrément de dilatation totale dans la partie 810\mkey{InitLocalVariables}. Cette stratégie n'est valide que dans le 811cas où la dilatation libre ne dépend pas du résultat de la mécanique 812 813Il est possible de garder une trace de cette dilatation en définissant 814une variable auxiliaire associée. Il est cependant nécessaire de prendre 815garde à la manière dont sont mises à jour les variables auxiliaires par 816l'analyseur utilisé. 817 818\paragraph{Cas des lois en petites transformations, dilatation 819 thermique} La dilatation thermique est un cas particulier par son 820coté systématique~: il suffit de savoir calculer le coefficient de 821dilatation moyen \(\alpha\paren{T}\) que l'on suppose ne dépendre que 822de la température actuelle \(T\). La dilatation thermique linéique 823s'écrit alors (voir~\cite{helfer_ecriture_2014})~: 824\begin{equation} 825 \label{eq:behaviour:epsilonth} 826 \Frac{\Delta\,l}{l^{i}}\paren{T}= 827 \Frac{1}{1+\alpha\paren{T^{i}}\paren{T^{i}-T^{\alpha}}}\,\left[\alpha\paren{T}\paren{T-T^{\alpha}}-\alpha\paren{T^{i}}\paren{T^{i}-T^{\alpha}}\right] 828\end{equation} 829où~: 830\begin{minipage}[t]{0.8\linewidth} 831 \begin{enumerate}[-] 832 \item \(T^{\alpha}\) est la température de référence pour 833 l'expérience de dilatométrie ayant servie à identifier le 834 coefficient de dilatation thermique et qui correspond à une 835 dilatation nulle~; 836 \item \(T^{i}\) est la température à laquelle la géométrie du corps 837 a été mesurée (température de début de calcul)~; 838 \item \(\Delta\, l\) est la variation de longueur par rapport à la 839 température \(T^{i}\). 840 \end{enumerate} 841\end{minipage} 842 843La directive \mkey{ComputeThermalExpansion} permet le calcul de la 844dilatation thermique par la formule~\eqref{eq:behaviour:epsilonth} en 845amont de l'intégration de la loi de comportement. 846 847Elle prend un nom de fichier \mfront{} argument dans le cas isotrope, 848ou un tableau de trois noms de fichiers \mfront{} dans le cas 849orthotrope (une dilatation pour chaque direction principale). Ces 850fichiers doivent décrire le coefficient de dilatation thermique moyen 851comme une propriété matériau. 852 853La température \(T^{\alpha}\) est supposée donnée dans le fichier 854définissant la dilatation par la définition d'une constante nommée 855{\tt Reference\-Temperature} de la directive \mkey{Constant}. Si cette 856température n'est pas fournie, \mfront{} prendra la température 857ambiante (\(293,15\,K\)). 858 859La température \(T^{i}\) est automatiquement déclarée comme un 860paramètre nommé {\tt 861 reference\-Temperature\-For\-Thermal\-Expansion}\footnote{La notion 862 de paramètres est décrite dans la notice générale de 863 \mfront{}~\cite{helfer_generateur_2013-1}.}. Par défaut, sa valeur 864est de \(293,15\,K\) (température ambiante). 865 866\paragraph{Cas particuliers} Si le formalisme \og~grandes 867transformations~\fg{} choisi se base sur une écriture des lois écrites 868dans le formalisme des petites transformations (utilisation d'une 869hypothèse de \og~petites déformations, grandes rotations~\fg, 870déformations logarithmiques), il est souvent possible de proposer un 871traitement des dilatations libres systématique 872(voir~\cite{helfer_ecriture_2014}). 873 874\paragraph{Implantation} Pour permettre aux interfaces de proposer des 875formalismes \og~grandes transformations\fg{} réutilisant le formalisme 876des \og~petites transformation~\fg{}, le calcul de la dilatation doit 877être fait en amont de la loi. 878 879Il revient aux interfaces de modifier le chargement du point matériel 880de manière adéquate. Par exemple, en petites transformations, la 881déformation totale envoyée à la loi de comportement sera la 882déformation totale fournie par le code appelant à laquelle on aura 883retiré la dilatation. 884 885%\subsubsection{Classes générées} 886% 887%\begin{figure}[htbp] 888% \centering 889% \includegraphics[height=15cm]{@top_srcdir@/docs/mfront/Images/NortonRK.eps} 890% \caption{Classes générées pour les lois de comportement (diagramme 891% généré par l'outil \doxygen{}).} 892% \label{fig:nortonrk:inheritance} 893%\end{figure} 894% 895%Hormis ce qui est propre aux interfaces, un fichier \mfront{} génère des 896%classes \cpp{}. Pour une loi de comportement nommmée \texttt{NortonRK}, 897%trois classes par loi de comportement sont générées~: 898%\begin{itemize} 899% \item une classe \texttt{NortonRKBehaviourData} qui contient la valeur 900% des propriétés matériau, l'état des variables internes et externes en 901% début de pas de temps~; 902% \item une classe \texttt{NortonRKIntegrationData} qui contient la 903% valeur des incréments des variables externes~; 904% \item une classe \texttt{NortonRK} qui contient les variables locales, 905% les différentes variables nécessaires à l'algorithme d'intégration et 906% surtout l'algorithme d'intégration. 907%\end{itemize} 908%Cette structure est illustrée en figure~\ref{fig:nortonrk:inheritance}. 909% 910%Cette figure montre également que ces classes sont des classes 911%\texttt{template} paramétré par trois arguments~: 912%\begin{itemize} 913% \item l'argument \(hypothesis\) désigne l'hypothèse de modélisation~; 914% \item l'argument \(Type\) est le type numérique utilisé~; 915% \item le dernier argument est un booléen qui est généralement faux 916% (choix par défaut). Si il est mis à vrai, par la directive 917% \mkey{UseQt}, les différentes variables sont affectées d'unités, ce 918% qui permet de vérifier à la compilation le respect des unités à la 919% compilation. Cette option est peu usitée car les coefficients des lois 920% de comportements ont souvent des unités exotiques. 921%\end{itemize} 922% 923 924\subsubsection{Gestion des bornes} 925 926Deux types de bornes sont distinguées dans \mfront{}~: 927\begin{itemize} 928\item les bornes physiques\footnote{Voir le mot clé 929 \mkey{PhysicalBounds}}, qui désignent les plages de valeurs 930 acceptables pour une variable donnée. Par exemple, une température 931 (en Kelvin) ne peut être négative, une porosité est positive et 932 inférieure à 1~; 933\item les bornes de validité\footnote{Voir le mot clé \mkey{Bounds}}, 934 qui désignent les plages de valeurs sur lesquelles la loi de 935 comportement a été identifiée. 936\end{itemize} 937 938Des bornes peuvent être posées sur~: 939\begin{itemize} 940 \item les valeurs des variables internes (en début et en fin de pas). 941 \item les valeurs des contraintes. 942 \item les valeurs des variables externes. 943\end{itemize} 944 945\paragraph{Dépassement des bornes de validité} Le traitement d'une 946violation d'une borne de validité dépend de l'utilisateur qui peut 947choisir parmi trois \og~politiques\fg{}~: 948\begin{itemize} 949\item ne rien faire~; 950\item afficher un message d'avertissement~; 951\item arrêter le calcul. 952\end{itemize} 953 954La façon de préciser cette politique dépend du code cible (voir 955paragraphe~\ref{sec:behaviours:interface}). 956 957% Toutes 958%les lois de comportement générées proposent une méthode 959%\texttt{set\-Out\-Of\-Bounds\-Policy} qui doit être appelée par les 960%interfaces. Cette méthode prend en argument un objet de type énumération 961%nommé \tfelb{OutOfBoundsPolicy}{Out\-Of\-Bounds\-Policy} définie dans 962%le fichier 963%\headerb{TFEL/MaterialLaw/OutOfBoundsPolicy.hxx}{TFEL/\-Material\-Law/\-Out\-Of\-Bounds\-Policy\-.hxx}. 964% 965%Cette énumération définit trois valeurs valides \texttt{Warning}, 966%\texttt{Strict} et \texttt{None}. 967% 968%La politique par défaut est \texttt{None}. Si la politique est fixée à 969%\texttt{Warning}, un message est affiché sur la sortie d'erreur en cas 970%de violation d'une borne de validité. Si la politique est fixée à 971%\texttt{Strict}, une exception du type 972%\tfelb{OutOfBoundsException}{Out\-Of\-Bounds\-Exception} est levée. 973 974% 975\subsection{Interface aux lois de comportement} 976\label{sec:behaviours:interface} 977 978Cette section décrit tout d'abord le rôle des interfaces puis chacune 979des deux interfaces disponibles actuellement~: 980\begin{itemize} 981\item l'interface \umat{} utilisée pour l'adhérence au code aux 982 éléments finis \castem{}~\cite{cea_site_2013,helfer_interface_2013}. Cette 983 interface est également utilisée par le code d'homogénéisation par 984 transformées de \nom{Fourier} rapides 985 \tmfft{}~\cite{castelier_specifications_2009,jerome_p._tmfft_2010}~; 986\item l'interface \aster{} utilisée pour l'adhérence au code aux 987 éléments finis \aster{}~\cite{edf_site_2013,helfer_interface_2013-1}. 988\end{itemize} 989 990\subsubsection{Rôle des interfaces aux lois de comportement} 991 992Les interfaces aux lois de comportement ont différentes fonctions~: 993\begin{itemize} 994\item les lois de comportement choisissent l'une des implantations de 995 la loi de comportement en fonction de l'hypothèse de 996 modélisation\footnote{Les lois de comportements générées par 997 \mfront{} sont représentées par des classes \texttt{template} 998 paramétrées par l'hypothèse de modélisation.}~; 999 \item assurer la conversion entre la convention utilisée par le code 1000 appelant pour représenter les tenseurs et la convention utilisée dans 1001 \TFEL{}~; 1002\item l'interface doit gérer les lois de comportement orthotropes. Par 1003 exemple, l'interface peut assurer la rotation des déformations 1004 totales et de leurs incréments dans le repère propre du matériau 1005 avant l'appel à la loi de comportement proprement dite et la 1006 rotation des contraintes dans le repère général après l'appel à la 1007 loi de comportement.~; 1008 \item l'interface doit fournir certains éléments nécessaires au calcul 1009 (matrice d'élasticité) à partir des informations fournies par le 1010 code~; 1011\item l'interface doit capter les exceptions \cpp{} et les traduire en 1012 message d'erreurs adaptés. 1013\end{itemize} 1014 1015En fonction des fonctionnalités disponibles ou absentes du code cible, 1016l'interface peut également~: 1017\begin{itemize} 1018 \item assurer le sous-découpage local (au niveau du point de 1019 \nom{Gauss}) du pas de temps en cas de non convergence~; 1020 \item gérer le cas des contraintes planes si les lois de 1021 comportement ne gèrent pas cette hypothèse, ce qui est le cas de la 1022 plupart des lois générées par \mfront{}~; 1023 \item permettre l'utilisation des lois écrites pour les petites 1024 déformations dans un calcul en transformations finies. Pour cela, 1025 plusieurs pistes semblent intéressantes~: 1026 \begin{itemize} 1027 \item le cas des grandes rotations, petites déformations~; 1028 \item l'utilisation des déformations logarithmiques~; 1029 \end{itemize} 1030\end{itemize} 1031 1032De manière optionnelle, il peut être utile de générer des exemples 1033d'utilisation de la loi de comportement traitée. Ainsi, 1034l'interface~\umat{} génère automatiquement un exemple de mise en 1035données \gibiane{}~\cite{helfer_interface_2013}. 1036 1037\newpage 1038\clearpage 1039\section{Matériaux isotropes à écoulement plastique ou viscoplastique 1040 incompressible} 1041\label{sec:mfront:isotropic:analyser} 1042 1043Nous nous intéressons dans cette section à une famille particulière de 1044lois de comportement, très utilisée en mécanique, et qui représente la 1045majorité des comportements de la plate-forme {\pleiades}. Ces lois 1046s'appliquent à des matériaux {\em isotropes} et décrivent un 1047comportement {\em plastique} ou {\em viscoplastique}, avec ou sans 1048{\em écrouissage}, dont les déformations résiduelles sont {\em 1049 isochores}. Ces particularités permettent d'optimiser les techniques 1050d'intégration numérique. 1051 1052Après une présentation des techniques d'intégration adaptées à cette 1053famille de lois, nous détaillons la syntaxe des quatre analyseurs 1054{\mfront} qui leurs sont dédiés. 1055 1056\subsection{Généralités et résolution implicite} 1057 1058Après une description des particularités des lois de comportement 1059mécanique traitées dans cette section, les techniques d'intégration 1060qui leurs sont appliquées dans {\mfront} sont exposées. Celles-ci 1061s'appuient sur une résolution implicite, une \(\theta\)-méthode 1062semblable à celles qui sont décrites en section~\ref{sec:Implicite}. 1063 1064Elles permettent également le calcul de la matrice tangente cohérente. 1065 1066\subsubsection{Expression des lois de comportement} 1067 1068Les lois de comportement traitées dans cette section se composent 1069d'une partie élastique, et de plusieurs mécanismes d'écoulement 1070plastique ou viscoplastique. 1071 1072\paragraph{Partition des déformations} 1073Cette combinaison se traduit par la {\em partition des déformations}: 1074la déformation totale \(\tepsilonto\) est la somme d'une déformation 1075élastique \(\tepsilonel\) et d'une déformation inélastique 1076\(\tepsilonan\): 1077\begin{subequations} 1078\label{eq:partition_deformation} 1079\begin{equation} 1080 \tepsilonto = \tepsilonel + \tepsilonan 1081.\end{equation} 1082Cette dernière se décompose à son tour en plusieurs déformations 1083relatives aux différents mécanismes d'écoulement, indicés par $i$, 1084et supposés indépendants: 1085\begin{equation} 1086\tepsilonan= \displaystyle\sum_{i}\,\tepsilonan_{i} 1087.\end{equation} 1088\end{subequations} 1089 1090\paragraph{Isotropie} 1091Les matériaux décrit ici sont supposés {\em isotropes}. Cette 1092hypothèse sera utilisée pour formuler l'ensemble des mécanismes: 1093élasticité, écoulements plastiques ou viscoplastiques. 1094 1095\paragraph{Tenseurs} 1096Pour simplifier les expressions à venir, il est commode d'introduire 1097des notations tensorielles, détaillées en 1098annexe~\ref{sec:oper-tens-dans}~: 1099\begin{itemize} 1100\item le produit tensoriel de deux tenseurs $a$, $b$: $a\otimes b$; 1101\item le produit contracté de deux tenseurs $a$, $b$: $a\colon b$; 1102\item le tenseur identité d'ordre 2: \(\tenseur{I}\); 1103\item le tenseur identité d'ordre 4: \(\tenseurq{I}\). 1104\end{itemize} 1105 1106\paragraph{Comportement élastique} 1107Les contraintes \(\tsigma\) se déduisent des déformations élastiques 1108\(\tepsilonel\) par la loi de \nom{Hooke}. Pour un matériau isotrope, 1109cette relation peut s'écrire~: 1110\begin{subequations} 1111\label{mfront:as:tsigma} 1112\begin{equation} 1113\tsigma = 1114\lambda\,\trace{\tepsilonel}\tenseurq{I}+2\,\mu\,\tepsilonel 1115\end{equation} 1116où $\trace{\tepsilonel}$ désigne la trace du tenseur \(\tepsilonel\) 1117(somme des termes diagonaux). les coefficients de \nom{Lamé} 1118\(\lambda\) et \(\mu\) du matériau se déduisent du module 1119d'\nom{Young} et du coefficient de \nom{Poisson}. Sous forme 1120tensorielle cette loi s'écrit de manière plus compacte: 1121\begin{equation} 1122\tsigma=\tenseurq{D}\colon\tepsilonel 1123,\quad\text{avec}\quad 1124\tenseurq{D}=\lambda\,\tenseur{I}\otimes\tenseur{I}+2\,\mu\,\tenseurq{I} 1125.\end{equation} 1126La loi est alors résumée par le tenseur élastique $\tenseurq{D}$. 1127\end{subequations} 1128 1129\paragraph{Écoulements} 1130Les écoulements $i$, plastiques ou viscoplastiques, sont les 1131mécanismes qui créent les déformations inélastiques $\tepsilonan_{i}$ 1132de la partition~\eqref{eq:partition_deformation}. Pour les lois 1133décrites ici, la direction d'écoulement est supposée proportionnelle 1134au déviateur des contraintes: 1135\begin{equation} 1136\label{eq:direcoul} 1137\tdepsilonan_{i} \propto \tenseur{s} 1138,\end{equation} 1139défini par: 1140\begin{equation} 1141\label{eq:mfront:deviateur_contraintes} 1142\tenseur{s} 1143=\tsigma-\Frac{1}{3}\,\trace{\tsigma}\,\tenseur{I} 1144=\tenseurq{K}\colon\tsigma 1145,\quad\text{avec}\quad 1146\tenseurq{K} 1147=\tenseurq{I}-\Frac{1}{3}\tenseur{I}\otimes\tenseur{I} 1148.\end{equation} 1149Avec cette hypothèse, les écoulements modélisés vérifient: 1150\[ 1151\trace{\tepsilonan_{i}} = 0 1152,\] 1153c'est-à-dire n'induisent pas de changement de volume: ils sont dits 1154{\em isochores}. 1155 1156\paragraph{Contraintes de \nom{Von Mises}} 1157Les écoulements décrits ici sont supposés dépendre du tenseur des 1158contraintes $\tsigma$ à travers la norme de son 1159déviateur~\eqref{eq:mfront:deviateur_contraintes}, appelée contrainte 1160de \nom{Von Mises}: 1161\begin{equation} 1162\label{mfront:sigmaeq} \sigmaeq = 1163\displaystyle\sqrt{\Frac{3}{2}\,\tenseur{s}\colon\tenseur{s}} 1164.\end{equation} 1165La contrainte de \nom{Von Mises} est un des invariants isotropes de la 1166contrainte. L'hypothèse assure donc le caractère isotrope de la loi 1167d'écoulement. 1168 1169\paragraph{Écrouissage} 1170Pour chaque écoulement $i$, la loi d'écoulement peut également dépendre de son {\em 1171 écrouissage}, ou {\em déformation inélastique cumulée} $p_i$, défini 1172par l'équation différentielle: 1173\begin{subequations} 1174\label{mfront:as:p} 1175\begin{equation} 1176\label{eq.dotpi} 1177\dot{p}_{i}=\sqrt{\Frac{2}{3}\,\tdepsilonan_{i}\colon\tdepsilonan_{i}} 1178.\end{equation} 1179Le facteur \(\pfrac{3}{2}\), introduit par convention dans la 1180contrainte de \nom{Von Mises}~\eqref{mfront:sigmaeq}, est compensé ici 1181dans la définition de $\dot{p}_{i}$. En général, en début de calcul, 1182au temps $t=t_0$, le matériau est supposé non écroui: 1183\begin{equation} 1184p_i(t_0)=0 1185.\end{equation} 1186\end{subequations} 1187 1188Avec l'hypothèse sur la direction d'écoulement~\eqref{eq:direcoul}, 1189la relation~\eqref{eq.dotpi} s'inverse en: 1190\begin{equation} 1191\label{mfront:as:epsilonan} 1192\tdepsilonan_{i} = \dot{p}_{i}\,\tenseur{n} 1193,\quad\text{avec}\quad 1194\tenseur{n} = \Frac{3}{2}\Frac{\tenseur{s}}{\sigmaeq} 1195,\end{equation} 1196où le tenseur $\tenseur{n}$ est appelé {\em normale} à 1197l'écoulement. C'est un tenseur déviatorique de norme constante, 1198qui vérifie: 1199\begin{equation} 1200\label{mfront:as:n:2} 1201\tenseurq{K}\colon\tenseur{n}=\tenseur{n} 1202,\quad\text{et}\quad 1203\tenseur{n}\colon\tenseur{n}=\Frac{3}{2} 1204.\end{equation} 1205 1206\paragraph{Écoulements supportés} 1207Il est maintenant possible de formuler les trois types de mécanismes 1208qui relèvent d'une intégration spécifique dans {\mfront}: 1209\begin{subequations} 1210\label{eq:loistype} 1211\begin{itemize} 1212\item des écoulements viscoplastiques de la forme suivante, dont 1213 relève la loi de \nom{Norton}~\cite{chaboche_mecanique_2009}: 1214\begin{equation} 1215\label{eq:loistype_a} 1216 \tdepsilonan_{i} = f_{i}^{\textrm{an}}\paren{\sigmaeq}\,\tenseur{n} 1217,\quad\text{c'est-à-dire}\quad 1218\dot{p}_{i} = f_{i}^{\textrm{an}}\paren{\sigmaeq} 1219;\end{equation} 1220 \item des écoulements viscoplastiques avec écrouissage de la 1221 forme suivante, dont relève la loi \nom{Lemaitre}~\cite{chaboche_mecanique_2009}: 1222\begin{equation} 1223\label{eq:loistype_b} 1224 \tdepsilonan_{i} = f_{i}^{\textrm{an}}\paren{\sigmaeq,p_{i}}\,\tenseur{n} 1225,\quad\text{c'est-à-dire}\quad 1226\dot{p}_{i} = f_{i}^{\textrm{an}}\paren{\sigmaeq,p_i} 1227.\end{equation} 1228\item et des écoulements plastiques qui satisfont une relation du 1229 type~: 1230\begin{equation} 1231\label{eq:loistype_c} 1232 f_{i}^{\textrm{an}}(\sigmaeq,p_{i})\leq 1233 0 \quad\quad \dot{p_{i}}\geq 0 \quad\quad 1234 f_{i}^{\textrm{an}}(\sigmaeq,p_{i})\,\dot{p}_{i} = 0 1235\end{equation} 1236Il est classique que la fonction $f_{i}^{\textrm{an}}$ de l'écoulement 1237plastique ait la dimension d'une contrainte. {\mfront} suppose que 1238l'utilisateur a respecté cette convention, et divise de ce fait la 1239fonction $f_{i}^{\textrm{an}}$ par le module d'Young du matériau, pour 1240que l'ensemble des inéquations~\eqref{eq:loistype_c} aient la 1241dimension d'une déformation. 1242\end{itemize} 1243\end{subequations} 1244La fonction $f_{i}^{\textrm{an}}$, qui définit l'écoulement, peut 1245éventuellement faire intervenir des variables externes évoluant 1246indépendamment de la mécanique (densité de fission, flux de neutrons 1247rapides, taille de grain, {\it etc.}). 1248 1249\paragraph{Remarques} 1250\begin{enumerate} 1251\item Les écoulements viscoplastiques sans 1252 écrouissage~\eqref{eq:loistype_a} sont un cas particulier des 1253 écoulements avec écrouissage~\eqref{eq:loistype_b}. Pour optimiser 1254 les temps de calculs, il est intéressant de maintenir leur 1255 distinction lors de l'implantation numérique. Pour les 1256 développements théoriques, il est préférable de regrouper ces 1257 écoulements sous leur forme commune~\eqref{eq:loistype_b}. 1258\item Avec l'hypothèse sur la direction de 1259 l'écoulement~\eqref{mfront:as:epsilonan}, les écoulements 1260 viscoplastiques~\eqref{eq:loistype_b} comme les écoulements 1261 plastiques~\eqref{eq:loistype_c} dépendent de l'écrouissage $p_i$ au 1262 lieu de dépendre de la déformation $\tepsilonan_{i}$. Cette 1263 particularité explique l'optimisation possible lors de l'intégration 1264 des lois~\eqref{eq:loistype}: il suffit d'intégrer des équations 1265 avec une inconnue scalaire ($p_i$) plutôt que tensorielle 1266 ($\tepsilonan_{i}$). 1267\item L'évolution de la déformation 1268 viscoplastique~\eqref{eq:loistype_b} est donnée par une équation 1269 différentielle, tandis que la formulation des lois 1270 plastiques est basée sur une équation~\eqref{eq:loistype_c}: le 1271 respect de la surface de charge. 1272\end{enumerate} 1273 1274\paragraph{Système d'équations} 1275L'intégration de la loi de comportement proposée par {\mfront} 1276consiste à charger un point matériel avec la déformation totale 1277$\tepsilonto$ et à en déduire l'évolution des contraintes 1278$\tsigma$. Pour cela, la loi s'appuie sur un jeu de variables 1279internes, conservées en mémoire, et qui évoluent simultanément. Nous 1280avons décidé de choisir comme variables internes: 1281\begin{itemize} 1282 \item la déformation élastique \(\tepsilonel\); 1283 \item l'écrouissage \(p_{i}\) associé à chaque mécanisme. 1284\end{itemize} 1285 1286\begin{subequations} 1287\label{eq:systemeSpecifique} 1288Les équations qui permettent de calculer cette évolution sont 1289rassemblées ici. Il s'agit de: 1290\begin{enumerate} 1291\item la partition des déformations~\eqref{eq:partition_deformation} 1292\begin{equation} 1293\tepsilonto = \tepsilonel + \tepsilonan 1294,\quad\text{avec}\quad 1295\tepsilonan= \displaystyle\sum_{i}\,\tepsilonan_{i} 1296;\end{equation} 1297 1298\item la loi d'élasticité~\eqref{mfront:as:tsigma} 1299\begin{equation} 1300\tsigma=\tenseurq{D}\colon\tepsilonel 1301;\end{equation} 1302 1303\item la décomposition du tenseur des contraintes $\tsigma$ en 1304 déviateur~\eqref{eq:mfront:deviateur_contraintes} et contrainte de 1305 \nom{Von Mises}~\eqref{mfront:sigmaeq}: 1306\begin{equation} 1307\tenseur{s}= \tenseurq{K}\colon\tsigma 1308,\quad\text{et}\quad 1309\sigmaeq= 1310\displaystyle\sqrt{\Frac{3}{2}\,\tenseur{s}\colon\tenseur{s}} 1311;\end{equation} 1312 1313\item la direction des écoulements, orientée suivant la normale à 1314 l'écoulement~\eqref{mfront:as:epsilonan}: 1315\begin{equation} 1316\tdepsilonan_{i} = \dot{p}_{i}\,\tenseur{n} 1317,\quad\text{avec}\quad 1318\tenseur{n}= \Frac{3}{2}\Frac{\tenseur{s}}{\sigmaeq} 1319;\end{equation} 1320 1321\item les écoulements viscoplastiques~\eqref{eq:loistype_b} ou 1322 plastiques~\eqref{eq:loistype_c}: 1323\begin{align} 1324\dot{p}_{i} &= f_{i}^{\textrm{an}}\paren{\sigmaeq,p_i} 1325,\\ 1326f_{i}^{\textrm{an}}(\sigmaeq,p_{i})\leq 13270,\quad&\dot{p_{i}}\geq 0,\quad 1328f_{i}^{\textrm{an}}(\sigmaeq,p_{i})\,\dot{p}_{i} = 0 1329.\end{align} 1330\end{enumerate} 1331\end{subequations} 1332 1333\subsubsection{Méthode d'intégration numérique} 1334\label{sec:mfront:isotropic-solver} 1335 1336Dans {\mfront}, la loi de comportement~\eqref{eq:systemeSpecifique} 1337est intégrée par une méthode implicite, une \(\theta\)-méthode, 1338semblable à celle présentée au paragraphe~\ref{sec:Implicite}, à ceci 1339près que le système d'équations peut ici être réduit à une unique 1340équation scalaire~\cite{proix_integration_2012-1}. 1341 1342\paragraph{Incrément de temps} 1343D'après ce qui précède, les variables internes sont la déformation 1344élastique $\tepsilonel$ et l'écrouissage $p_i$ associé à chaque 1345mécanisme. Elles sont connues au temps $t$, en début de pas de temps, 1346et pour une déformation totale $\debutpas{\tepsilonto}$. L'intégration 1347consiste à calculer leurs nouvelles valeurs induites par un incrément 1348de déformation totale $\Delta\tepsilonto$ en fin d'un pas de temps 1349$\Delta t$. Leurs incréments respectifs seront notés 1350$\Delta\tepsilonel$ et $\Delta p_i$. 1351 1352La notion de \(\theta\)-méthode, employée ici, consiste à s'intéresser 1353également aux valeurs de certaines variables au temps intermédiaire 1354$t+\theta\,\Delta t$, où le paramètre $\theta$, déterminé à l'avance 1355est compris entre 0 et 1. Une première approximation consiste à 1356supposer les variables internes linéaires sur le pas de temps 1357$\Delta t$, donc à poser: 1358\begin{subequations} 1359\label{eq:applin} 1360\begin{align} 1361\milieupas{\tepsilonel} 1362&\approx\debutpas{\tepsilonel}+\theta\,\Delta\tepsilonel 1363,\\ 1364\milieupas{p_i}&\approx 1365\debutpas{p_i}+\theta\,\Delta p_i 1366.\end{align} 1367\end{subequations} 1368 1369\paragraph{Contraintes} 1370D'après la loi d'élasticité~\eqref{mfront:as:tsigma} et sa propre 1371définition~\eqref{eq:mfront:deviateur_contraintes}, le déviateur des 1372contraintes vaut: 1373\begin{equation*} 1374\tenseur{s}=2\,\mu\,\tenseurq{K}\colon\tepsilonel 1375,\end{equation*} 1376et d'après les approximations~\eqref{eq:applin}, sa valeur au temps 1377intermédiaire vaut: 1378\begin{equation} 1379\milieupas{\tenseur{s}}=2\,\mu\,\tenseurq{K}\colon 1380\left(\debutpas{\tepsilonel}+\theta\,\Delta\tepsilonel 1381\right) 1382,\label{eq:stthDt} 1383\end{equation} 1384et la contrainte de \nom{Von Mises}~\eqref{mfront:sigmaeq} et la 1385normale à l'écoulement~\eqref{mfront:as:epsilonan} pour cette même 1386date s'en déduisent: 1387\begin{equation} 1388\milieupas{\sigmaeq}= 1389\displaystyle\sqrt{\Frac{3}{2}\,\milieupas{\tenseur{s}}\colon\milieupas{\tenseur{s}}} 1390,\quad\text{et}\quad 1391\milieupas{\tenseur{n}} 1392=\Frac{3}{2}\Frac{\milieupas{\tenseur{s}}}{\milieupas{\sigmaeq}} 1393.\label{eq:ntthDt} 1394\end{equation} 1395 1396\paragraph{Partition des déformations} 1397La partition des déformations~\eqref{eq:partition_deformation}, et la 1398direction des écoulements~\eqref{mfront:as:epsilonan} s'intègrent en: 1399\begin{equation} 1400\Delta\tepsilonto 1401= 1402\Delta\tepsilonel+ 1403\sum_i\int_t^{t+\Delta t} 1404\dot{p}_{i}\,\tenseur{n}\,\dtot t 1405\approx 1406\Delta\tepsilonel+ 1407\milieupas{\tenseur{n}}\, 1408\sum_i\Delta p_{i} 1409.\label{eq:partdef2} 1410\end{equation} 1411Cette approximation s'appuie sur la valeur de la normale $\tenseur{n}$ 1412au temps intermédiaire. Avec les relations 1413précédentes~\eqref{eq:stthDt} et \eqref{eq:ntthDt}, et le type 1414déviateur~\eqref{mfront:as:n:2} de $\tenseur{n}$, cela permet 1415d'écrire: 1416\begin{equation*} 1417\milieupas{\tenseur{n}} 1418=\Frac{3\,\mu}{\milieupas{\sigmaeq}} 1419\left[ 1420\tenseurq{K}\colon 1421\left(\debutpas{\tepsilonel}+\theta\,\Delta\tepsilonto 1422\right) 1423-\milieupas{\tenseur{n}}\, 1424\theta\,\sum_i\Delta p_{i} 1425\right] 1426,\end{equation*} 1427c'est-à-dire: 1428\begin{equation} 1429\label{eq:signB} 1430\paren{\milieupas{\sigmaeq}+3\mu\theta\sum_i\Delta p_{i}} 1431\milieupas{\tenseur{n}} 1432=3\mu\tenseur{B} 1433,\quad\text{avec}\quad 1434\tenseur{B}=\tenseurq{K}\colon 1435\left(\debutpas{\tepsilonel}+\theta\,\Delta\tepsilonto 1436\right) 1437.\end{equation} 1438 1439La norme de cette expression~\eqref{eq:signB}, compte tenu de la 1440norme~\eqref{mfront:as:n:2} de $\milieupas{\tenseur{n}}$, donne 1441finalement pour la contrainte équivalente: 1442\begin{equation} 1443 \label{eq:IsotropicBehaviour:contrainte_equivalente} 1444 \milieupas{\sigmaeq} 1445=\mu\sqrt{6\,\tenseur{B}\colon\tenseur{B}}-3\,\mu\,\theta\,\sum_{i}\,\Delta p_{i} 1446.\end{equation} 1447Cette valeur, réinjectée dans la relation~\eqref{eq:signB}, donne la normale: 1448\begin{equation} 1449 \label{eq:IsotropicBehaviour:normale} 1450 \milieupas{\tenseur{n}}=\Frac{3}{\sqrt{6\,\tenseur{B}\colon\tenseur{B}}}\tenseur{B} 1451.\end{equation} 1452 1453L'équation~\eqref{eq:IsotropicBehaviour:contrainte_equivalente} va 1454permettre de former, à partir des équations d'écoulements, un système 1455non linéaire d'équations dont les inconnues sont les incréments 1456$\Delta p_{i}$. Il faut maintenant construire ce système en intégrant 1457les écoulements viscoplastiques, puis plastiques. 1458 1459\begin{subequations} 1460\label{eq:fpis} 1461\paragraph{Écoulement viscoplastique} 1462L'intégrale sur le pas de temps $\Delta t$ de l'écoulement 1463viscoplastique~\eqref{eq:loistype_b} s'écrit: 1464\begin{equation*} 1465\Delta p_{i} 1466=\int_t^{t+\Delta t}f_{i}^{\textrm{an}} 1467\paren{\sigmaeq,p_i}\,\dtot t 1468\approx\Delta t\, 1469f_{i}^{\textrm{an}}\paren{\milieupas{\sigmaeq},\milieupas{p_{i}}} 1470,\end{equation*} 1471où l'intégrale est approchée par la valeur de $f_{i}^{\textrm{an}}$ au 1472temps intermédiaire. Avec cette approximation, vérifier l'écoulement 1473consiste à annuler une fonction à trois paramètres: 1474\begin{equation} 1475f_{p_{i}}\paren{\Delta p_{i},\milieupas{\sigmaeq},\milieupas{p_{i}}} 1476=\Delta p_{i} 1477-\Delta t\,f^{\textrm{an}}_{i}\paren{\milieupas{\sigmaeq},\milieupas{p_{i}}} 1478.\label{eq:fpivis} 1479\end{equation} 1480 1481\paragraph{Écoulement plastique} L'écoulement plastique consiste à 1482annuler une fonction de même forme, dépendant des mêmes trois 1483paramètres: 1484\begin{equation} 1485f_{p_{i}}\paren{\Delta p_{i},\milieupas{\sigmaeq},\milieupas{p_{i}}} 1486=\left\{ 1487\begin{aligned} 1488 f^{\textrm{an}}_{i}\paren{\milieupas{\sigmaeq},\milieupas{p_{i}}} 1489 &\quad\text{en cas de charge plastique,}\\ 1490 \Delta p_{i}&\quad\text{sinon.} 1491\end{aligned} 1492\right. 1493\label{eq:fpiplas} 1494\end{equation} 1495La condition de charge plastique, qui augmente l'écrouissage $p_i$, 1496doit respecter les conditions d'écoulement 1497plastique~\eqref{eq:loistype_c}. Dans la pratique, les incréments 1498$\Delta p_i$, inconnues d'un système non linéaire, sont calculés de 1499manière itérative. Chaque nouvelle itération propose de nouvelles 1500valeurs de ces incréments. Pour ces nouvelles valeurs, la condition de 1501charge plastique est activée si l'une des conditions suivante est 1502vérifiée: 1503\begin{enumerate} 1504\item \(f^{\textrm{an}}_{i}\paren{\milieupas{\sigmaeq},\milieupas{p_{i}}} > 1505 \varepsilon\) et \(\Delta p_{i} \geq 0\), 1506\item \(\Delta p_{i} > \varepsilon\), 1507\end{enumerate} 1508où \(\varepsilon\) est un paramètre numérique, qui stabilise les 1509itérations. 1510 1511\end{subequations} 1512 1513\paragraph{Système non linéaire} 1514Les équations d'écoulement~\eqref{eq:fpis}: 1515\begin{equation*} 1516f_{p_{i}}\paren{\Delta p_{i},\milieupas{\sigmaeq},\milieupas{p_{i}}} 1517=0,\quad\forall\ p_i 1518,\end{equation*} 1519modifiées avec les équations~\eqref{eq:applin} et 1520\eqref{eq:IsotropicBehaviour:contrainte_equivalente}, forment un 1521système non linéaire d'équations, dont les inconnues sont les 1522incréments $\Delta 1523p_i$: 1524\begin{equation} 1525f_{p_{i}}\paren{\Delta p_{i}, 1526\mu\sqrt{6\,\tenseur{B}\colon\tenseur{B}}-3\,\mu\,\theta\,\sum_{j}\,\Delta p_{j}, 1527\debutpas{p_i}+\theta\,\Delta p_i} 1528=0,\quad\forall\ p_i 1529.\label{eq:sysnonlinDpi} 1530\end{equation} 1531Pour le résoudre, une méthode de \nom{Newton-Raphson} est utilisée. 1532Cette méthode, discutée en détail au paragraphe~\ref{sec:NR}, 1533nécessite les dérivées partielles des fonctions $f_{p_{i}}$ par 1534rapport aux incréments $\Delta p_i$. Celles-ci s'obtiennent par une 1535dérivation composée des $f_{p_i}$: 1536\begin{equation*} 1537\deriv{f_{p_{i}}}{\Delta p_j}= 1538\deriv{f_{p_{i}}}{\Delta p_i} 1539\,\deriv{\Delta p_i}{\Delta p_j} 1540+\deriv{f_{p_{i}}}{\milieupas{\sigmaeq}} 1541\,\deriv{\milieupas{\sigmaeq}}{\Delta p_j} 1542+\deriv{f_{p_{i}}}{\milieupas{p_{i}}} 1543\,\deriv{\milieupas{p_{i}}}{\Delta p_j} 1544,\end{equation*} 1545avec, d'après les équations~\eqref{eq:applin} et 1546\eqref{eq:IsotropicBehaviour:contrainte_equivalente}: 1547\begin{equation*} 1548\deriv{\Delta p_i}{\Delta p_j}=\delta_{ij} 1549,\quad 1550\deriv{\milieupas{\sigmaeq}}{\Delta p_j}=-3\,\mu\,\theta 1551,\quad\text{et}\quad 1552\deriv{\milieupas{p_{i}}}{\Delta p_j}=\theta\,\delta_{ij} 1553,\quad\text{avec}\quad 1554\delta_{ij}= 1555\left\{ 1556\begin{array}{ll} 15571&\text{si $i=j$,}\\0&\text{sinon.} 1558\end{array} 1559\right. 1560\end{equation*} 1561 1562Appliquée aux écoulements, ces relations différentielles donnent: 1563\begin{itemize} 1564\item pour les écoulement viscoplastiques~\eqref{eq:fpivis}: 1565\[ 1566\deriv{f_{p_{i}}}{\Delta p_{j}}= 1567\left\{ 1568\begin{aligned} 15691-3\,\mu\,\theta\,\Delta t\,\left[\deriv{f^{\textrm{an}}_{i}}{\sigmaeq}\paren{\milieupas{\sigmaeq},\milieupas{p_{i}}}\right]-\theta\,\Delta t\,\left[\deriv{f^{\textrm{an}}_{i}}{p_{i}}\paren{\milieupas{\sigmaeq},\milieupas{p_{i}}}\right] & \text{ si } i=j, \\ 1570-3\,\mu\,\theta\,\Delta t\,\left[\deriv{f^{\textrm{an}}_{i}}{\sigmaeq}\paren{\milieupas{\sigmaeq},\milieupas{p_{i}}}\right] & \text{ si } i\neq j; 1571\end{aligned} 1572\right. 1573\] 1574 1575\item pour les écoulement plastiques~\eqref{eq:fpiplas}, en cas de 1576 décharge plastique: 1577\[ 1578\deriv{f_{p_{i}}}{\Delta p_{j}}= \left\{ 1579\begin{aligned} 1580 \theta\,\paren{3\,\mu\,\left[\deriv{f^{\textrm{an}}_{i}}{\sigmaeq}\paren{\milieupas{\sigmaeq},\milieupas{p_{i}}}\right]+ 1581 \left[\deriv{f^{\textrm{an}}_{i}}{p_{i}}\paren{\milieupas{\sigmaeq},\milieupas{p_{i}}}\right]} & \text{ si } i=j, \\ 1582 -3\,\mu\,\theta\,\deriv{f^{\textrm{an}}_{i}}{\sigmaeq}\paren{\milieupas{\sigmaeq},\milieupas{p_{i}}} 1583 & \text{ si } i\neq j. 1584\end{aligned} 1585\right. 1586\] 1587et en absence de charge plastique: 1588\[ 1589\deriv{f_{p_{i}}}{\Delta p_{j}}= \left\{ 1590\begin{aligned} 1591 1 & \text{ si } i=j, \\ 1592 0 & \text{ si } i\neq j. 1593\end{aligned} 1594\right. 1595\] 1596\end{itemize} 1597 1598\paragraph{Critère d'arrêt} L'algorithme de \nom{Newton} s'arrête quand 1599la différence entre deux estimations des incréments des déformations 1600viscoplastiques cumulées est inférieur à un certain critère 1601\(\varepsilon\)~: 1602\begin{equation} 1603 \label{eq:mfront:isotropic:convergence_criteria} 1604 \Frac{1}{N}\displaystyle\sum_{i=1}^{N}\left|\Delta_{n}\Delta 1605 p_{i}\right|<\varepsilon 1606\end{equation} 1607où\(\Delta_{n}\Delta p_{i}\) désigne la différence entre l'estimation 1608de l'incrément de la déformation viscoplastique cumulée \(\Delta\, 1609p_{i}\) à l'étape \(n+1\) et de l'estimation à l'étape \(n\). 1610 1611L'algorithme échoue si le nombre d'itérations dépasse une 1612borne maximale. 1613 1614\paragraph{Étapes} 1615Finalement les différentes étapes de l'intégration de la loi de 1616comportement mécanique par la $\theta$-méthode sont les suivantes: 1617\begin{enumerate} 1618\item calcul du tenseur $\tenseur{B}$~\eqref{eq:signB}: 1619\begin{equation*} 1620\tenseur{B}=\tenseurq{K}\colon 1621\left(\debutpas{\tepsilonel}+\theta\,\Delta\tepsilonto 1622\right) 1623~;\end{equation*} 1624 1625\item calcul des incréments $\Delta p_i$, par résolution du système 1626 non linéaire~\eqref{eq:sysnonlinDpi}: 1627\begin{equation*} 1628f_{p_{i}}\paren{\Delta p_{i}, 1629\mu\sqrt{6\,\tenseur{B}\colon\tenseur{B}}-3\,\mu\,\theta\,\sum_{j}\,\Delta p_{j}, 1630\debutpas{p_i}+\theta\,\Delta p_i} 1631=0,\quad\forall\ p_i 1632,\end{equation*} 1633en utilisant la méthode de \nom{Newton-Raphson}, et calcul des 1634nouvelles valeurs d'écrouissage: 1635\begin{equation*} 1636\finpas{p_i}=\debutpas{p_i}+\Delta p_i 1637~;\end{equation*} 1638 1639\item calcul de l'incrément de déformation élastique, grâce à la 1640 partition des déformations~\eqref{eq:partdef2}, de la 1641 normale~\eqref{eq:IsotropicBehaviour:normale}: 1642\begin{equation*} 1643\Delta\tepsilonel 1644= 1645\Delta\tepsilonto 1646-\milieupas{\tenseur{n}}\, 1647\sum_i\Delta p_{i} 1648,\quad\text{avec}\quad 1649\milieupas{\tenseur{n}} 1650=\Frac{3}{\sqrt{6\,\tenseur{B}\colon\tenseur{B}}}\tenseur{B} 1651,\end{equation*} 1652et de la nouvelle valeur de déformation élastique: 1653\begin{equation*} 1654\finpas{\tepsilonel}=\debutpas{\tepsilonel}+\Delta\tepsilonel 1655~;\end{equation*} 1656\item calcul de la contrainte en fin de pas de temps, par la loi 1657 d'élasticité~\eqref{mfront:as:tsigma}: 1658\begin{equation*} 1659\finpas{\tsigma}=\tenseurq{D}\colon\finpas{\tepsilonel} 1660.\end{equation*} 1661\end{enumerate} 1662 1663\subsubsection{Matrice tangente cohérente} 1664 1665La méthode de résolution implicite permet le calcul de la matrice 1666tangente cohérente. Cette matrice tangente cohérente permet une 1667convergence quadratique du calcul de structure, ce qui peut nettement 1668accélérer les calculs. 1669 1670\paragraph{Définition} 1671L'intégration numérique décrite au paragraphe précédent, permet de 1672calculer l'évolution des con\-train\-tes $\Delta\tsigma$ induite par un 1673incrément de déformation $\Delta\tepsilonto$ sur un pas de temps 1674$\Delta t$. La matrice tangente cohérente est définie comme le 1675tenseur: 1676\begin{equation} 1677\tenseurq{L}^{\mathit{tc}} 1678=\deriv{\Delta\tsigma}{\Delta\tepsilonto} 1679.\label{eq:defTangent} 1680\end{equation} 1681La loi d'élasticité~\eqref{mfront:as:tsigma} et la partition des 1682déformations~\eqref{eq:partdef2} permettent d'exprimer l'incrément de 1683contrainte: 1684\begin{equation*} 1685\Delta\tsigma 1686=\tenseurq{D}\colon\Delta\tepsilonel 1687=\tenseurq{D}\colon\paren{\Delta\tepsilonto 1688-\milieupas{\tenseur{n}}\, 1689\sum_i\Delta p_{i} 1690} 1691\end{equation*} 1692et d'en déduire par dérivation~\eqref{eq:defTangent} la matrice 1693tangente cohérente~: 1694\begin{equation} 1695\tenseurq{L}^{\mathit{tc}} 1696=\tenseurq{D}-\tenseurq{D}\colon\paren{\milieupas{\tenseur{n}}\otimes 1697\sum_i\deriv{\Delta p_{i}}{\Delta\tepsilonto} 1698+\sum_i\Delta p_{i}\deriv{\milieupas{\tenseur{n}}}{\Delta\tepsilonto}} 1699.\label{eq:tang1} 1700\end{equation} 1701Il faut maintenant calculer les dérivées de la normale 1702$\milieupas{\tenseur{n}}$ et des incréments $\Delta p_i$ pour chaque écoulement. 1703 1704\paragraph{Normale} 1705La dérivée du tenseur~\eqref{eq:signB} $\tenseur{B}$ et de la 1706normale~\eqref{eq:IsotropicBehaviour:normale} valent respectivement: 1707\begin{subequations} 1708\begin{align} 1709\deriv{\tenseur{B}}{\Delta\tepsilonto} 1710&=\theta\,\tenseurq{K} 1711,\label{eq:dBdDeto} 1712\\ 1713\deriv{\milieupas{\tenseur{n}}}{\Delta\tepsilonto} 1714&=\Frac{3}{\sqrt{6\,\tenseur{B}\colon\tenseur{B}}} 1715\,\left( 1716\deriv{\tenseur{B}}{\Delta\tepsilonto} 1717-\frac{2}{3} 1718\deriv{\tenseur{B}}{\Delta\tepsilonto}\colon 1719\milieupas{\tenseur{n}}\otimes\milieupas{\tenseur{n}} 1720\right) 1721,\notag\\ 1722&=\Frac{3\,\theta}{\sqrt{6\,\tenseur{B}\colon\tenseur{B}}} 1723\,\left(\tenseurq{K} 1724-\frac{2}{3}\milieupas{\tenseur{n}}\otimes\milieupas{\tenseur{n}} 1725\right) 1726.\label{eq:dndDeto}\end{align} 1727\end{subequations} 1728Ce calcul utilise la propriété~\eqref{mfront:as:n:2} du tenseur 1729$\milieupas{\tenseur{n}}$. 1730 1731\paragraph{Incréments} 1732Les incréments d'écrouissage $\Delta p_i$ sont issus de la résolution 1733du système non linéaire, formé par les équations 1734d'écoulement~\eqref{eq:fpis}: 1735\begin{equation*} 1736f_{p_{i}}\paren{\Delta p_{i},\milieupas{\sigmaeq},\milieupas{p_{i}}} 1737=0,\quad\forall\ p_i 1738.\end{equation*} 1739La dérivation de ces équations conduit à: 1740\begin{equation} 1741\label{eq:dfpidDetoa} 1742\deriv{f_{p_{i}}}{\Delta p_i} 1743\,\deriv{\Delta p_i}{\Delta\tepsilonto} 1744+\deriv{f_{p_{i}}}{\milieupas{\sigmaeq}} 1745\,\deriv{\milieupas{\sigmaeq}}{\Delta\tepsilonto} 1746+\deriv{f_{p_{i}}}{\milieupas{p_{i}}} 1747\,\deriv{\milieupas{p_{i}}}{\Delta\tepsilonto} 1748=0,\quad\forall\ p_i 1749.\end{equation} 1750La dérivation des équations~\eqref{eq:applin} et 1751\eqref{eq:IsotropicBehaviour:contrainte_equivalente}, en utilisant 1752les relations~\eqref{mfront:as:n:2} et \eqref{eq:dBdDeto}: 1753\begin{align*} 1754\deriv{\milieupas{\sigmaeq}}{\Delta\tepsilonto} 1755&=2\,\mu\,\theta\,\milieupas{\tenseur{n}} 1756-3\,\mu\,\theta\,\sum_j\,\deriv{\Delta p_j}{\Delta\tepsilonto} 1757,\\ 1758\deriv{\milieupas{p_{i}}}{\Delta\tepsilonto} 1759&=\theta\,\deriv{\Delta p_i}{\Delta\tepsilonto} 1760,\end{align*} 1761permet de modifier les équations~\eqref{eq:dfpidDetoa}: 1762\begin{equation} 1763\label{eq:dfpidDetob} 1764\left( 1765\deriv{f_{p_{i}}}{\Delta p_i} 1766+\theta\,\deriv{f_{p_{i}}}{\milieupas{p_{i}}} 1767\right) 1768\,\deriv{\Delta p_i}{\Delta\tepsilonto} 1769-3\,\mu\,\theta\,\deriv{f_{p_{i}}}{\milieupas{\sigmaeq}} 1770\,\sum_j\,\deriv{\Delta p_j}{\Delta\tepsilonto} 1771=-\deriv{f_{p_{i}}}{\milieupas{\sigmaeq}} 1772\,2\,\mu\,\theta\,\milieupas{\tenseur{n}} 1773,\quad\forall\ p_i 1774.\end{equation} 1775C'est un jeu d'équations linéaires, dont les inconnues sont les 1776tenseurs dérivées recherchés $\deriv{\Delta p_i}{\Delta\tepsilonto}$. 1777 1778\paragraph{Solutions scalaires} 1779Le produit contracté des équations~\eqref{eq:dfpidDetob} par 1780$\milieupas{\tenseur{n}}$ donne un système d'équations: 1781\begin{subequations} 1782\label{eq:dfpidDetoc} 1783\begin{equation} 1784\left( 1785\deriv{f_{p_{i}}}{\Delta p_i} 1786+\theta\,\deriv{f_{p_{i}}}{\milieupas{p_{i}}} 1787\right)\,d_i 1788-3\,\mu\,\theta\,\deriv{f_{p_{i}}}{\milieupas{\sigmaeq}} 1789\,\sum_j\,d_j 1790=-\deriv{f_{p_{i}}}{\milieupas{\sigmaeq}} 1791\,3\,\mu\,\theta 1792,\quad\forall\ p_i 1793.\end{equation} 1794avec pour inconnues, les produits contractés: 1795\begin{equation} 1796d_i=\deriv{\Delta p_i}{\Delta\tepsilonto}\colon\milieupas{\tenseur{n}} 1797.\end{equation} 1798\end{subequations} 1799 1800Le produit contracté des équations~\eqref{eq:dfpidDetob} par tout 1801tenseur $\tenseur{x}$ orthogonal à $\milieupas{\tenseur{n}}$ donne un 1802système d'équations: 1803\begin{equation*} 1804\left( 1805\deriv{f_{p_{i}}}{\Delta p_i} 1806+\theta\,\deriv{f_{p_{i}}}{\milieupas{p_{i}}} 1807\right)\,\deriv{\Delta p_i}{\Delta\tepsilonto}\colon\tenseur{x} 1808-3\,\mu\,\theta\,\deriv{f_{p_{i}}}{\milieupas{\sigmaeq}} 1809\,\sum_j\,\deriv{\Delta p_j}{\Delta\tepsilonto}\colon\tenseur{x} 1810=0 1811,\quad\forall\ p_i 1812,\end{equation*} 1813de second membre nul. Ses inconnues sont donc nulles: 1814\begin{equation} 1815\deriv{\Delta p_i}{\Delta\tepsilonto}\colon\tenseur{x} 1816=0 1817,\quad\forall\ p_i 1818,\end{equation} 1819ce qui montre que les tenseurs $\deriv{\Delta p_i}{\Delta\tepsilonto}$ 1820sont tous colinéaires au tenseur $\milieupas{\tenseur{n}}$. Ils 1821s'écrivent donc: 1822\begin{equation} 1823\deriv{\Delta p_i}{\Delta\tepsilonto} 1824=\Frac{\deriv{\Delta p_i}{\Delta\tepsilonto}:\milieupas{\tenseur{n}}} 1825{\milieupas{\tenseur{n}}\colon\milieupas{\tenseur{n}}} 1826\,\milieupas{\tenseur{n}} 1827=\frac{2\,d_i}{3}\,\milieupas{\tenseur{n}} 1828,\label{eq:dDpdDeto} 1829\end{equation} 1830où les composantes $d_i$ sont les solutions du 1831système~\eqref{eq:dfpidDetoc}. 1832 1833\paragraph{Matrice tangente cohérente} 1834Finalement, la matrice tangente cohérente peut être reconstituée à 1835partir des expressions~\eqref{eq:tang1}, \eqref{eq:dndDeto} et 1836\eqref{eq:dDpdDeto}, et en notant que: 1837\begin{equation*} 1838\tenseurq{D}\colon\tenseurq{K}=2\,\mu\,\tenseurq{K} 1839,\quad\text\quad 1840\tenseurq{D}\colon\milieupas{\tenseur{n}}=2\,\mu\,\milieupas{\tenseur{n}} 1841.\end{equation*} 1842Elle vaut ainsi: 1843\begin{equation} 1844\tenseurq{L}^{\mathit{tc}} 1845=\tenseurq{D}-2\,\mu\,\left( 1846\frac{3\,\theta\,\sum_i\Delta p_i} 1847{\sqrt{6\,\tenseur{B}\colon\tenseur{B}}} 1848\,\tenseurq{K} 1849+\left(\frac{2\,\sum_id_i}{3} 1850-\frac{2\,\theta\,\sum_i\Delta p_i} 1851{\sqrt{6\,\tenseur{B}\colon\tenseur{B}}} 1852\right) 1853\,\milieupas{\tenseur{n}}\otimes\milieupas{\tenseur{n}} 1854\right) 1855,\label{eq:tang2} 1856\end{equation} 1857avec les composantes $d_i$ solutions du système~\eqref{eq:dfpidDetoc}. 1858 1859\subsubsection{Expression de la matrice tangente cohérente pour un 1860 mécanisme unique} 1861 1862Dans le cas où le système se limite à un mécanisme unique, 1863l'expression de la matrice tangente cohérente se simplifie. 1864 1865\paragraph{Écoulement viscoplastique} 1866Dans le cas d'un seul écoulement viscoplastique~\eqref{eq:fpivis}, 1867d'incrément $\Delta p$, le système~\eqref{eq:dfpidDetoc} se réduit à 1868une équation d'inconnue $d$: 1869\begin{equation*} 1870 \left( 1871 1 1872 -\Delta t\,\theta\,\deriv{f^{\textrm{an}}}{p} 1873 +3\,\mu\,\Delta t\,\theta\,\deriv{f^{\textrm{an}}}{\sigmaeq} 1874 \right)\,d 1875 =\deriv{f^{\textrm{an}}}{\sigmaeq} 1876 \,3\,\mu\,\Delta t\,\theta 1877 .\end{equation*} 1878L'expression~\eqref{eq:tang2} de la matrice tangente cohérente se simplifie 1879alors en: 1880\begin{equation} 1881\label{eq:mfront:Dt:visco} 1882\tenseurq{L}^{\mathit{tc}} 1883=\tenseurq{D}-2\,\mu\,\theta\,\left( 1884\Frac{3\,\Delta p} 1885{\sqrt{6\,\tenseur{B}\colon\tenseur{B}}} 1886\,\tenseurq{K} 1887+\left( 1888\Frac{2\,\mu\,\Delta t 1889\,\deriv{f^{\textrm{an}}}{\sigmaeq}} 1890{1+\theta\,\Delta t\,\left( 18913\,\mu\,\deriv{f^{\textrm{an}}}{\sigmaeq} 1892-\deriv{f^{\textrm{an}}}{p}\right) 1893} 1894-\Frac{2\,\Delta p} 1895{\sqrt{6\,\tenseur{B}\colon\tenseur{B}}} 1896\right) 1897\,\milieupas{\tenseur{n}}\otimes\milieupas{\tenseur{n}} 1898\right) 1899\end{equation} 1900 1901\paragraph{Écoulement plastique} 1902Dans le cas d'un seul écoulement viscoplastique, 1903d'incrément $\Delta p$, le système~\eqref{eq:dfpidDetoc} se réduit à 1904une équation d'inconnue $d$. Si l'écoulement plastique est 1905activé~\eqref{eq:fpiplas}, cette équation devient: 1906\begin{equation*} 1907 \left( 1908 \theta\,\deriv{f^{\textrm{an}}}{p} 1909 -3\,\mu\,\theta\,\deriv{f^{\textrm{an}}}{\sigmaeq} 1910 \right)\,d 1911 =-\deriv{f^{\textrm{an}}}{\sigmaeq} 1912 \,3\,\mu\,\theta 1913 .\end{equation*} 1914L'expression~\eqref{eq:tang2} de la matrice tangente cohérente se simplifie 1915alors en: 1916\begin{equation} 1917\label{eq:mfront:Dt:plasti} 1918\tenseurq{L}^{\mathit{tc}} 1919=\tenseurq{D}-2\,\mu\,\theta\,\left( 1920\Frac{3\,\Delta p} 1921{\sqrt{6\,\tenseur{B}\colon\tenseur{B}}} 1922\,\tenseurq{K} 1923+\left( 1924\Frac{2\,\mu\,\deriv{f^{\textrm{an}}}{\sigmaeq}} 1925{3\,\mu\,\theta\,\deriv{f^{\textrm{an}}}{\sigmaeq} 1926-\theta\,\deriv{f^{\textrm{an}}}{p} 1927} 1928-\Frac{2\,\Delta p} 1929{\sqrt{6\,\tenseur{B}\colon\tenseur{B}}} 1930\right) 1931\,\milieupas{\tenseur{n}}\otimes\milieupas{\tenseur{n}} 1932\right) 1933\end{equation} 1934 1935Lorsque l'écoulement plastique n'est pas activé, l'équation d'écoulement~\eqref{eq:fpiplas} et 1936le système~\eqref{eq:dfpidDetoc} se réduisent respectivement à: 1937\begin{equation*} 1938\Delta p=0 1939,\quad\text{et}\quad 1940d=0 1941,\end{equation*} 1942et la matrice tangente cohérente au tenseur d'élasticité: 1943\begin{equation*} 1944\tenseurq{L}^{\mathit{tc}} 1945=\tenseurq{D} 1946.\end{equation*} 1947 1948\subsubsection{Matrice tangente} 1949 1950La matrice tangente définie par la relation en vitesse~: 1951\[ 1952\tdsigma = \tenseurq{L}\,\colon\,\tdepsilonto 1953\] 1954 1955Sans chercher à justifier cette affirmation, la matrice tangente peut 1956être calculée comme la limite de la matrice tangente cohérente lorsque 1957le pas de temps \(\Delta \,t\) et l'incrément de déformation plastique 1958cumulée \(\Delta \,p\) tendent vers \(0\) et en posant \(\theta=1\)~: 1959\[ 1960\tenseurq{L} = \lim_{ 1961 \tiny 1962 \begin{aligned} 1963 \Delta\,t\,&\rightarrow\,0\\ 1964 \Delta\,p\,&\rightarrow\,0\\ 1965 \theta&=1 1966 \end{aligned} 1967}\tenseurq{L}^{\mathit{tc}} 1968\] 1969 1970Les expressions précédentes peuvent donc être réutilisées en prenant 1971garde à l'instant où l'on veut calculer la matrice tangente (en début 1972ou fin de pas de temps). 1973 1974\subsubsection{Expression de la matrice tangente pour un mécanisme 1975 unique} 1976 1977Dans le cas où le système se limite à un mécanisme unique, 1978l'expression de la matrice tangente cohérente se simplifie. 1979 1980\paragraph{Écoulement viscoplastique} 1981Dans le cas d'un seul écoulement viscoplastique, 1982l'expression~\eqref{eq:mfront:Dt:visco} de la matrice tangente 1983cohérente se réduit à la matrice d'élasticité. 1984 1985\paragraph{Écoulement plastique} 1986Dans le cas d'un écoulement plastique, deux cas se présentent suivant 1987que l'on soit en charge ou pas. 1988 1989En cas de charge plastique, l'expression~\eqref{eq:mfront:Dt:plasti} 1990de la matrice tangente cohérente conduit à~: 1991\[ 1992\tenseurq{L} 1993=\tenseurq{D}-\Frac{4\,\mu^{2}\,\deriv{f^{\textrm{an}}}{\sigmaeq}} 1994{3\,\mu\,\deriv{f^{\textrm{an}}}{\sigmaeq} 1995 -\deriv{f^{\textrm{an}}}{p} 1996} 1997\tenseur{n}\otimes\tenseur{n} 1998\] 1999 2000Dans le domaine élastique ou en cas de décharge, la matrice tangente 2001se réduit à la matrice d'élasticité. 2002 2003\subsection{Utilisation des analyseurs spécifiques} 2004 2005Nous présentons dans ce paragraphe les analyseurs \mfront{} dédiés aux 2006lois de comportement plastique et viscoplastique incompressible des 2007matériaux isotropes. Ils sont au nombre de \(4\)~: 2008\begin{itemize} 2009 \item l'analyseur \texttt{IsotropicMisesCreep} gère 2010 exclusivement les lois de comportement viscoplastique isotrope de la 2011 forme~: 2012 \[ 2013 \dot{p} = f\paren{\sigmaeq} 2014 \] 2015 \item l'analyseur \texttt{IsotropicStrainHardeningMisesCreep} 2016 gère exclusivement les lois de comportement viscoplastique 2017 isotrope de la forme~: 2018 \[ 2019 \dot{p} = f\paren{\sigmaeq,p} 2020 \] 2021 \item l'analyseur \texttt{IsotropicPlasticMisesFlow} gère 2022 exclusivement les lois de comportement plastique isotrope de la 2023 forme~: 2024 \[ 2025 f(\sigmaeq,p)\leq 0 \quad\quad \dot{p}\geq 0 2026 \quad\quad f(\sigmaeq,p)\,\dot{p} = 0 2027 \] 2028 \item l'analyseur \texttt{MultipleIsotropicMisesFlows} gère 2029 une combinaison arbitraire d'écoulements des trois types précédents. 2030 Les différents écoulements sont supposés non couplés. 2031\end{itemize} 2032 2033\subsubsection{La directive \texttt{@FlowRule}} La directive \mkey{FlowRule} 2034permet de définir un écoulement. 2035 2036\paragraph{Cas des analyseurs \texttt{Isotropic\-Mises\-Creep}, 2037 \texttt{Isotropic\-Strain\-Hardening\-Mises\-Creep} et 2038 \texttt{Isotropic\-Plastic\-Mises\-Flow}} 2039 2040Pour les analyseurs \texttt{Isotropic\-Mises\-Creep}, 2041\texttt{Isotropic\-Strain\-Hardening\-Mises\-Creep} et 2042\texttt{Isotropic\-Plastic\-Mises\-Flow}, une variable interne nommée 2043\(p\) et représentant la déformation inélastique cumulée est 2044automatiquement définie. Aucune autre variable interne ne peut être 2045définie. 2046 2047L'évolution de cette variable est introduite par la directive 2048\mkey{FlowRule}. Cette directive est suivie d'un bloc définissant 2049l'écoulement. Ce bloc doit renseigner la valeur de la fonction 2050\texttt{f}, dont la définition a été donnée plus haut en fonction de 2051l'écoulement traité, et sa dérivée par rapport à la contrainte 2052équivalente \texttt{df\textunderscore{}dseq}. Pour les analyseurs 2053\texttt{Isotropic\-Strain\-Hardening\-Mises\-Creep} et 2054\texttt{Isotropic\-Plastic\-Mises\-Flow} il est également nécessaire 2055de donner la dérivée de \texttt{f} par rapport à la déformation 2056cumulée \texttt{df\textunderscore{}dp}. 2057 2058Dans le bloc suivant la directive \mkey{FlowRule}, les variables 2059\texttt{f}, \texttt{df\textunderscore{}dseq} et éventuellement 2060\texttt{df\textunderscore{}dp} sont automatiquement définies. La 2061contrainte équivalente actualisée en \(t+\theta\,\Delta\,t\) est 2062accessible par la variable \texttt{seq}. Pour les analyseurs 2063\texttt{Isotropic\-Strain\-Hardening\-Mises\-Creep} et 2064\texttt{Isotropic\-Plastic\-Mises\-Flow}. Si nécessaire, la 2065déformation équivalente actualisée en \(t+\theta\,\Delta\,t\) est 2066accessible par la variable \texttt{p}. 2067 2068\paragraph{Cas de l'analyseur 2069 \texttt{Multiple\-Isotropic\-Mises\-Flows}} Plusieurs blocs 2070\mkey{FlowRule} peuvent être définis dans le cas de l'analyseur 2071\texttt{Multiple\-Isotropic\-Mises\-Flows}. La directive \mkey{FlowRule} 2072est suivie d'un des trois types d'écoulement supportés, respectivement 2073\texttt{Creep}, \texttt{StrainHardeningCreep} et \texttt{Plasticity}. Le 2074bloc suivant décrit l'écoulement en suivant les règles données au 2075paragraphe précédent. Notons que la déclaration d'un nouvel écoulement 2076déclare automatiquement la déformation viscoplastique cumulée associée 2077sous le nom \texttt{pi} où \texttt{i} est le nombre d'écoulement défini 2078jusque là. Il n'est possible d'associer des noms de glossaire ou des 2079bornes à ces variables qu'après la définition du bloc. 2080 2081\paragraph{Transformation du code dans les blocs \texttt{@FlowRule}} Le 2082code dans les blocs suivant la directive \mkey{FlowRule} est modifié 2083ainsi~: 2084\begin{itemize} 2085 \item les variables externes sont remplacées par leurs valeurs en 2086 \(t+\theta\,\Delta\,t\)~; 2087 \item la déformation inélastique cumulée \(p\) est remplacée par sa 2088 valeur en \(t+\theta\,\Delta\,t\). 2089\end{itemize} 2090 2091\subsubsection{Mise à jour des variables auxiliaires} 2092 2093La directive \mkey{UpdateAuxiliaryStateVariables} permet de mettre à 2094jour les variables auxiliaires. 2095 2096\paragraph{Déformations inélastiques} Les déformations inélastiques 2097\(\tepsilonan_{i}\) ne sont pas des variables internes. Pour y avoir 2098accès (pour des posttraitements), il est possible de définir des 2099variables internes auxiliaires. 2100 2101Ces variables sont mises à jour après les variables internes et les 2102contraintes, mais avant les variables externes (incluant la température) 2103ou la déformation totale\footnote{Les variables externes ne sont pas 2104 mises à jour car cela est du ressort de l'interface en cas de 2105 sous-découpage. Si aucun sous-découpage n'a lieu ou si l'on a réalisé 2106 le dernier pas de temps, on économise l'opération de mise à jour.}. 2107 2108\paragraph{Exemple de la déformation inélastique totale} Supposons la 2109déformation inélastique totale représentée par une variable auxiliaire 2110tensorielle nommée \texttt{evp} (déclarée par la directive 2111\mkeyb{AuxiliaryStateVariable}{Auxiliary\-State\-Variable}). Cette 2112variable peut être calculée, dans le bloc suivant la directive 2113\mkeyb{UpdateAuxiliaryStateVariables}{Update\-Auxiliary\-State\-Variables} 2114ainsi~: 2115\begin{center} 2116 \texttt{evp += deto-deel;} 2117\end{center} 2118Une autre manière de calculer cette variable est~: 2119\begin{center} 2120 \texttt{evp = eto+deto-eel;} 2121\end{center} 2122qui montre que la déformation élastique a été mise à jour et non la 2123déformation totale. 2124 2125\subsubsection{Paramètres numériques automatiquement définis} 2126 2127Le paramètre \(\theta\) de la \(\theta\)-méthode vaut par défaut \(1\) 2128pour l'analyseur \texttt{Isotropic\-Plastic\-Mises\-Flow} et 2129\(\pfrac{1}{2}\) pour les autres. Cette valeur par défaut peut être 2130modifiée par la directive \mkey{Theta}. Cette valeur est également un 2131paramètre de la loi, nommé \varcpp{theta}, qui peut être modifié à 2132l'exécution. 2133 2134La valeur du critère d'arrêt est par défaut de \(10^{-8}\). Cette 2135valeur par défaut peut être modifiée par la directive \mkey{Epsilon}. 2136Cette valeur est également un paramètre de la loi, nommé 2137\varcpp{epsilon}, qui peut être modifié à l'exécution. 2138 2139Le nombre maximum d'itération de l'algorithme est de \(100\) par 2140défaut. Cette valeur par défaut peut être modifiée par la directive 2141\mkey{IterMax}. Cette valeur est également un paramètre de la loi, nommé 2142\varcpp{iterMax}, qui peut être modifié à l'exécution. 2143 2144\subsubsection{Noms réservés} 2145 2146Les noms réservés par cette analyseur sont décrits en 2147annexe~\ref{sec:noms-de-variables}. 2148 2149\subsubsection{Comportement viscoplastique du \sic{}} 2150 2151Nous voulons décrire le comportement viscoplastique du \sic{} Le 2152\sic{} est supposé avoir un comportement viscoplastique isotrope 2153donnée par~: 2154\[ 2155\dot{p} = f\paren{\sigmaeq} 2156\] 2157où\begin{minipage}[t]{0.75\linewidth} 2158\begin{itemize} 2159 \item \(p\) est la déformation viscoplastique équivalente~; 2160 \item \(\sigmaeq\) est la contrainte de \nom{Von Mises}. 2161\end{itemize} 2162\end{minipage} 2163 2164La fonction d'écoulement est donnée par~: 2165\begin{equation} 2166 \label{eq:sicBehaviour} 2167 f\paren{\sigmaeq}=\paren{A\,\exp\paren{-\Frac{B}{T}}+a\,\phi}\,\sigmaeq 2168\end{equation} 2169où~: 2170\begin{minipage}[t]{0.75\linewidth} 2171 \begin{itemize} 2172 \item \(A\), \(B\) et \(a\) sont des coefficients~; 2173 \item \(T\) est la température~; 2174 \item \(\phi\) est le flux de neutrons rapides~; 2175 \end{itemize} 2176\end{minipage} 2177 2178\begin{figure}[htbp] 2179 \centering 2180 \code{{\ttfamily \input{@abs_top_srcdir@/docs/mfront/mfront/SICCreepBehaviour.tex}}} 2181 \caption{Implantation de la loi de comportement viscoplastique 2182 du \sic{} en \mfront{}.} 2183 \label{fig:mfront_sic_behaviour} 2184\end{figure} 2185 2186Cette loi de comportement dépend d'une variable externe, le flux de 2187neutron rapide \(\phi\). 2188 2189Pour implanter cette loi de comportement, nous utilisons l'analyseur 2190\texttt{IsotropicMisesCreep}. Le code source est donné en 2191figure~\ref{fig:mfront_sic_behaviour}. 2192 2193\paragraph{Le mot clé \mkey{Parser}} La première ligne, commençant 2194par le mot clé \mkey{Parser}, décrit le type d'analyseur utilisé, 2195ici \texttt{IsotropicMisesCreep}. 2196 2197\paragraph{Le mot clé \mkey{Behaviour}} La seconde ligne, commençant 2198par le mot clé \mkey{Behaviour}, donne le nom de la loi de 2199comportement. 2200 2201\paragraph{Les mots clé \mkey{Author} et \mkey{Date}} La 2202troisième et la quatrième ligne renseignent respectivement l'auteur du 2203fichier et la date de création à l'aide des mots clés \mkey{Author} 2204et \mkey{Date}. 2205 2206\paragraph{Le mot clé \mkey{Description}} Le mot clé 2207\mkey{Description} permet de donner les références bibliographiques 2208d'où la loi est extraite. 2209 2210\paragraph{Le mot clé \texttt{@External\-State\-Variable}} Le mot clé 2211\mkey{External\-State\-Variable} définit une variable externe 2212scalaire (\texttt{real}) nommée \texttt{flux}. Cette variable, et son 2213incrément \texttt{dflux}, sont dès lors accessibles. 2214 2215\paragraph{Le mot clé \mkey{StaticVariable}} Le mot clé 2216\mkey{Static\-Variable} sert à définir les constantes utilisées par 2217la loi. Ces constantes sont des scalaires (\texttt{real}). 2218 2219\paragraph{Le mot clé \mkey{LocalVariable}} Le mot clé 2220\mkey{Local\-Variable} sert à définir des variables de travail 2221locales. Le rôle des variables \texttt{AF1} et \texttt{AF3} sera 2222explicité dans la suite. 2223 2224\paragraph{Le mot clé \mkey{InitLocalVariables}} Le mot clé 2225\mkey{InitLocalVars} permet d'écrire du code appelé avant tout 2226calcul. Nous y initialisons les valeurs de coefficients de la loi. En 2227effet, la méthode d'intégration utilisée évalue la fonction \(f\) au 2228temps \(t+\theta\,\Delta t\) (intégration implicite). Le coefficient 2229dépendant de la température est donc connu et il est avantageux de 2230l'évaluer ici plutôt qu'au cours des itérations de convergence de 2231l'algorithme (nous économisons des appels à la fonction 2232exponentielle). Nous utilisons ici le fait que la température au temps 2233\(t+\theta\,\Delta t\) est égale à \(T+\theta\,\Delta T\). De même la 2234valeur du flux de neutrons rapides \(\phi\) est égal à 2235\(\phi+\theta\,\Delta \phi\). 2236 2237\paragraph{Le mot clé \mkey{FlowRule}} Le mot clé 2238\mkey{FlowRule} permet de renseigner la fonction d'écoulement 2239\(f\) et sa dérivée \(\derivtot{f}{\sigmaeq}\). 2240 2241\clearpage 2242\newpage 2243\section{Intégration des lois de comportement, intégrateur par défaut} 2244\label{sec:defaultparser} 2245 2246L'intégrateur par défaut est essentiellement utilisé à des fins de 2247test ou pour certaines lois spécifiques (loi d'endommagement pilotée 2248en déformations). 2249 2250\subsection{Exemple de l'élasticité orthotrope} 2251 2252\begin{figure}[htbp] 2253 \centering 2254 \begin{minipage}[htbp]{0.9\linewidth} 2255 \shorthandoff{:} 2256 \code{ 2257 \small 2258 \input{@abs_top_srcdir@/docs/mfront/mfront/OrthotropicElastic.tex} 2259 } 2260 \shorthandon{:} 2261 \end{minipage} 2262 \caption{Implantation d'une loi orthotrope élastique} 2263 \label{fig:OrthoElastique} 2264\end{figure} 2265 2266La figure~\ref{fig:OrthoElastique} décrit l'implantation d'une loi de 2267comportement orthotrope élastique. Cette loi ne nécessitant pas 2268d'algorithme d'intégration, l'analyseur par défaut est utilisé. La 2269commande \mkey{Orthotropic\-Behaviour} permet le support des lois 2270orthotropes. La commande \mkey{Require\-Stiff\-ness\-Tensor} demande à 2271ce que l'interface au code appelant mette à disposition une variable 2272{\tt D} contenant la matrice d'élasticité\footnote{Pour ce faire, 2273 l'interface déclare des propriétés matériaux supplémentaires. Leur 2274 nombre et l'ordre dans lequel il est nécessaire de les passer sont 2275 décrits dans les documentations des 2276 interfaces~\cite{helfer_interface_2013,helfer_interface_2013-1}.}. 2277 2278Le calcul des contraintes en fin de pas de temps (à l'instant 2279\(t+\Delta\,t\)) s'écrit de manière similaire à son expression 2280mathématique~: 2281\[ 2282\tsigma_{t+\Delta\,t} = \tenseurq{D}\colon\paren{\tepsilonto_{t}+\Delta\,\tepsilonto} 2283\] 2284 2285Dans ce cas, le calcul de la matrice tangente cohérente est immédiat. 2286 2287\subsection{Noms des variables et des méthodes \cpp{} utilisés en interne} 2288 2289Pour éviter les conflits avec les noms de variables de travail ou des 2290méthodes \cpp{} utilisés par les classes générées, certains noms de 2291variables ne peuvent être utilisés. Leur liste est donnée en 2292annexe~\ref{sec:noms-communs-tous}. 2293 2294\subsection{La directive \texttt{@Integrator}} 2295 2296La directive \mkey{Integrator} permet d'intégrer la loi de comportement. 2297 2298\paragraph{Conventions spécifiques} Les 2299conventions suivantes s'appliquent~: 2300\begin{itemize} 2301 \item {\tt Dt} représente la matrice tangente cohérente qu'il 2302 faut calculer~; 2303 \item {\tt sig} représente la contrainte qu'il faut calculer~; 2304 \item {\tt eto} représente la déformation totale en début de 2305 pas~; 2306 \item {\tt deto} représente l'incrément de déformation totale 2307 (constante sur le pas)~; 2308 \item {\tt T} représente la valeur de la température en début 2309 de pas~; 2310 \item {\tt dT} représente l'incrément de changement de 2311 température (constante sur le pas)~; 2312 \item pour toute variable interne {\tt Y}, {\tt Y} représente 2313 sa valeur en début de pas~; 2314 \item pour toute variable interne {\tt Y}, {\tt dY} représente 2315 l'incrément de cette variable sur le pas, incrément qu'il faut 2316 calculer~; 2317 \item pour toute variable externe {\tt V}, {\tt V} représente 2318 sa valeur en début de pas~; 2319 \item pour toute variable externe {\tt V}, {\tt dV} représente 2320 son incrément de variation sur le pas de temps (constante sur le pas). 2321\end{itemize} 2322 2323\paragraph{Calcul d'une matrice de raideur} La loi de comportement 2324peut éventuellement fournir une matrice de raideur pour réaliser les 2325itérations de la résolution globale. Pour que les interfaces puissent 2326gérer cette possibilité, l'analyseur {\tt Default\-Parser} fournit 2327deux mots clés~: 2328\begin{itemize} 2329\item {\tt @Provides\-Tangent\-Operator} indique que la loi fournit 2330 une matrice tangente non symétrique~; 2331\item {\tt @Provides\-Symmetric\-Tangent\-Operator} indique que la loi 2332 fournit une matrice tangente symétrique~; 2333\end{itemize} 2334 2335Si le code appelant demande le calcul de la matrice tangente 2336cohérente, la variable booléenne 2337\varcpp{compute\-Tangent\-Operator\textunderscore{}} est vraie. 2338 2339Le type de matrice demandé est stocké dans la variable {\tt smt} 2340(\varcpp{stiffness matrix type}). L'utilisateur doit tester sa valeur 2341et effectuer le calcul le cas échéant. Sa valeur peut être~: 2342\begin{itemize} 2343\item {\tt ELASTIC}, pour la matrice d'élasticité (matrice 2344 d'élasticité)~; 2345\item {\tt SECANTOPERATOR}, pour la matrice sécante (matrice 2346 d'élasticité endommagée)~; 2347\item {\tt TANGENTOPERATOR}, pour la matrice tangente~; 2348\item {\tt CONSISTENTTANGENTOPERATOR}, pour la matrice tangente 2349 cohérente~; 2350\end{itemize} 2351 2352\paragraph{Matrice de prédiction} Il n'est aujourd'hui pas possible de 2353préciser une matrice de prédiction avec cet analyseur. 2354 2355\clearpage 2356\newpage 2357\section{Intégration des lois de comportement par 2358 une méthode explicite (algorithme de \nom{Runge-Kutta})} 2359\label{sec:RK} 2360 2361Cette section décrit l'analyseur \texttt{RungeKutta} qui permet 2362l'intégration des lois de comportement, formulées en vitesse, par une 2363méthode explicite. 2364 2365Contrairement aux analyseurs spécifiques décrits dans la 2366section~\ref{sec:mfront:isotropic:analyser}, aucune hypothèse n'est 2367faite sur les lois de comportement présentées~: l'analyseur 2368\texttt{RungeKutta} est dit générique. 2369 2370Nous supposons que l'utilisateur a réussi à exprimer la loi de 2371comportement sous la forme d'un système différentiel~: 2372\begin{equation} 2373 \label{eq:systeme_diff} 2374 \dot{Y}=G\paren{Y,t} 2375\end{equation} 2376où \(G\) est une fonction {\em a priori} non linéaire et que nous 2377supposerons {\em a minima} continûment dérivable. Cette fonction se 2378construit en rassemblant les équations régissant les différentes 2379variables d'états. 2380 2381\(Y\) un vecteur regroupant les différentes variables internes~: 2382\[ 2383Y= 2384\begin{pmatrix} 2385 y_{1} \\ 2386 \vdots \\ 2387 y_{i} \\ 2388 \vdots \\ 2389 y_{n} \\ 2390\end{pmatrix} 2391\] 2392Cette écriture est {\em symbolique} et chaque terme \(y_{j}\) peut 2393représenter une variable interne qui peut être soit un scalaire soit 2394un tenseur symétrique d'ordre \(2\). L'analyseur \texttt{RungeKutta} 2395impose que le premier terme de ce vecteur soit la déformation 2396élastique, dont la variable associée est \texttt{eel}, qui est 2397automatiquement déclarée. Le nom de glossaire de cette variable est 2398\texttt{Elastic\-Strain}. 2399 2400La dépendance en temps de la fonction \(G\) qui apparaît dans 2401l'équation~\eqref{eq:systeme_diff} désigne en réalité une dépendance à 2402la variation de certaines variables {\em externes} qui influencent la 2403loi de comportement. Des exemples de telles variables externes sont~: 2404\begin{minipage}[t]{0.5\linewidth} 2405 \begin{itemize} 2406 \item le taux de combustion~; 2407 \item la taille de grain~; 2408 \item la densité de fission~; 2409 \item etc\ldots 2410 \end{itemize} 2411\end{minipage} 2412 2413Nous détaillons les méthodes d'intégration proposées par l'analyseur 2414\texttt{RungeKutta}. Nous donnons en même temps les directives 2415\mfront{} qui permettent de programmer le système différentiel et de 2416modifier le comportement des algorithmes. 2417 2418\subsection{Les algorithmes de \nom{Runge-Kutta}} 2419\label{sec:resol-dun-syst} 2420 2421Les méthodes de \nom{Runge-Kutta} désignent une famille d'algorithmes 2422telles que~: 2423\[ 2424\finpas{Y}=\debutpas{Y}+\displaystyle\sum_{i=1}^{n}b_{i}k_{i} 2425\] 2426où~: 2427\begin{minipage}[t]{0.9\linewidth} 2428 \( 2429 \left\{ 2430 \begin{aligned} 2431 k_{1} &= \Delta\,t\,G\paren{\debutpas{Y},t}\\ 2432 k_{2} &= \Delta\,t\,G\paren{\debutpas{Y}+a_{21}\,k_{1},t+c_{2}\,\Delta\,t}\\ 2433 k_{3} &= \Delta\,t\,G\paren{\debutpas{Y}+a_{31}\,k_{1}+a_{32}\,k_{2},t+c_{3}\,\Delta\,t}\\ 2434 &\vdots\\ 2435 k_{n} &= \Delta\,t\,G\paren{\debutpas{Y}+a_{n1}\,k_{1}+\ldots+a_{n,n-1}\,k_{n-1},t+c_{n}\,\Delta\,t}\\ 2436 \end{aligned} 2437 \right. 2438 \) 2439\end{minipage} 2440 2441Une méthode particulière est caractérisée par la donnée du nombre 2442d'étapes \(n\) et des différents coefficients \(a_{ij}\), \(b_{i}\) et 2443\(c_{i}\). 2444 2445L'un des intérêts des méthodes de \nom{Runge-Kutta} est que les 2446coefficients \(k_{i}\) d'une méthode d'ordre élevée peuvent parfois 2447être utilisés pour construire une méthode d'ordre moins élevée. On 2448obtient ainsi deux estimations de la valeur de fin de pas qui peuvent 2449être comparées~: si la comparaison entre les deux estimations n'est 2450pas satisfaisante, on en déduit que le pas de temps utilisé est trop 2451grand et il est possible de mettre en place une stratégie de 2452redécoupage du pas de temps. 2453 2454\paragraph{Pas de temps minimal} En cas de convergence 2455forcée~\cite{pascal_notice_2005}, le code aux éléments finis \castem{} 2456envoie à la loi de comportement un pas de temps nul qui ne permet pas 2457d'écrire les lois de comportement sous la forme d'un système 2458différentiel. Il est nécessaire de préciser un pas de temps minimal 2459par la directive \mkeyb{MinimalTimeStep}{Minimal\-Time\-Step} pour 2460gérer ce cas. À l'exécution, la valeur choisie peut être modifiée à 2461l'aide du paramètre \varcpp{dtmin}. 2462 2463\subsection{Algorithmes disponibles} 2464 2465 2466\begin{table}[htbp] 2467 \centering 2468 \begin{tabular}{|c|p{9cm}|} 2469 \hline 2470 Argument & Algorithme associé \\ 2471 \hline 2472 \hline 2473 \texttt{Euler} & algorithme d'\nom{Euler} \\ 2474 \hline 2475 \texttt{rk2} & algorithme de \nom{Runge-Kutta} d'ordre \(2\) \\ 2476 \hline 2477 \texttt{rk4} & algorithme de \nom{Runge-Kutta} d'ordre \(4\) \\ 2478 \hline 2479 \texttt{rk42} & algorithme avec contrôle de l'erreur et adaptation 2480 du pas de temps basé sur des méthodes de \nom{Runge-Kutta} d'ordre 2481 \(4\) et d'ordre \(2\) \\ 2482 \hline 2483 \texttt{rk54} & algorithme avec contrôle de l'erreur et adaptation 2484 du pas de temps basé sur des méthodes de \nom{Runge-Kutta} d'ordre 2485 \(5\) et d'ordre \(4\) \\ 2486 \hline 2487 \texttt{rkCastem} & algorithme avec contrôle de l'erreur et adaptation 2488 du pas de temps extrait du code \castem{} \\ 2489 \hline 2490 \end{tabular} 2491 \caption{Arguments possibles de la directive \texttt{@Algorithm}.} 2492 \label{tab:Algorithm} 2493\end{table} 2494 2495Différents algorithmes de \nom{Runge-Kutta} sont disponibles. 2496L'utilisateur peut choisir l'algorithme utilisé par la directive 2497\mkey{Algorithm}. Les arguments possibles de cette directive sont 2498regroupés au tableau~\ref{tab:Algorithm}. 2499 2500\subsubsection{Algorithmes sans contrôle du pas de temps} 2501 2502\mfront{} permet d'utiliser un certain nombre d'algorithmes de 2503\nom{Runge-Kutta} sans contrôle du pas de temps. L'utilisation de ces 2504algorithmes n'est pas recommandée car leurs prédictions sont 2505généralement peu satisfaisantes~: il est préférable d'utiliser les 2506algorithmes avec contrôle de l'erreur et pas de temps adaptatif. 2507 2508\paragraph{Méthode d'\nom{Euler} explicite} L'estimation la plus simple 2509consiste à remplacer la dérivée \(\dot{Y}\) par la différence finie 2510\(\Frac{\finpas{Y}-\debutpas{Y}}{\Delta\, t}\), ce qui conduit à~: 2511\begin{equation} 2512 \label{eq:explicite} 2513 \finpas{Y}=\debutpas{Y}+\Delta\,t\,G\paren{\debutpas{Y},t} 2514\end{equation} 2515Cette estimation, dite {\em explicite}, est connue pour être à la fois 2516peu précise et peu robuste. L'erreur de cette méthode est 2517(asymptotiquement) proportionnelle au pas de temps~: elle est dite 2518d'ordre \(1\). 2519 2520\paragraph{Méthode de \nom{Runge-Kutta} d'ordre 2} 2521Les méthodes de \nom{Runge-Kutta} permettent d'améliorer la précision 2522du schéma d'\nom{Euler}. Pour obtenir une méthode d'ordre \(2\), la 2523valeur \(\finpas{Y}\) est recherchée de la forme~: 2524\[ 2525\finpas{Y} = \debutpas{Y}+a_{1}\Delta\,t\,G\paren{\debutpas{Y},t}+a_{2}\Delta\,t\,G\paren{\debutpas{Y}+a_{4}\Delta\, t,t+a_{3}\Delta\,t} 2526\] 2527Les quatre coefficients \(\left.a_{i}\right|_{i \in [0:4]}\) sont 2528choisis pour que l'expression précédente coïncide avec le 2529développement de \nom{Taylor} à l'ordre \(2\) de la fonction \(G\). 2530Cette contrainte conduisant à un système de \(3\) équations à \(4\) 2531inconnues, plusieurs choix sont possibles. 2532 2533Le choix fait dans \mfront{} est dite \og~du point milieu~\fg{}. Ce 2534choix correspond à la solution \(a_{1}=0\), \(a_{2}=1\), 2535\(a_{3}=\pfrac{1}{2}\) et \(a_{4}=\pfrac{G\paren{Y_{i},t}}{2}\). Cette 2536méthode s'écrit ainsi~: 2537\begin{equation} 2538 \label{eq:RK2} 2539 \finpas{Y} = \debutpas{Y}+\Delta\,t\,G\paren{\debutpas{Y}+\Frac{\Delta\, 2540 t}{2}G\paren{\debutpas{Y},t},t+\Frac{\Delta\, t}{2}} 2541\end{equation} 2542 2543\paragraph{Méthode de \nom{Runge-Kutta} d'ordre $4$} 2544 2545La méthode de \nom{Runge-Kutta} d'ordre \(4\) retenue dans \mfront{} est 2546donnée par~: 2547\begin{equation} 2548 \label{eq:RK4} 2549 \finpas{Y} = \debutpas{Y}+\Frac{1}{6}\paren{k_{1}+2\,k_{2}+2\,k_{3}+k_{4}} 2550\end{equation} 2551où~: 2552\begin{minipage}[t]{0.9\linewidth} 2553 \( 2554 \left\{ 2555 \begin{aligned} 2556 k_{1} &= \Delta\,t\,G\paren{\debutpas{Y},t}\\ 2557 k_{2} &= \Delta\,t\,G\paren{\debutpas{Y}+\Frac{1}{2}\,k_{1},t+\Frac{1}{2}\,\Delta\,t}\\ 2558 k_{3} &= \Delta\,t\,G\paren{\debutpas{Y}+\Frac{1}{2}\,k_{2},t+\Frac{1}{2}\,\Delta\,t}\\ 2559 k_{4} &= \Delta\,t\,G\paren{\debutpas{Y}+k_{3},t+\Delta\,t} 2560 \end{aligned} 2561 \right. 2562 \) 2563\end{minipage} 2564 2565\subsubsection{Algorithmes avec contrôle du pas de temps (correcteur/prédicteur)} 2566 2567\mfront{} propose trois algorithmes de \nom{Runge-Kutta} avec 2568sous-découpage du pas de temps pour garantir la qualité de la solution 2569trouvée. Pour cela, on introduit un temps local \(t^{l}\), compris 2570entre\(t\) et \(t+\Delta\,t\), et un pas de temps local 2571\(\delta\,t^{l}\) variable permettant d'augmenter \(t^{l}\). 2572 2573\paragraph{Méthode de \nom{Runge-Kutta} d'ordre $\pfrac{4}{2}$} Les 2574algorithmes~\eqref{eq:RK2} et~\eqref{eq:RK4} partagent les mêmes 2575coefficients \(k_{1}\) et \(k_{2}\)~: si l'on utilise une méthode 2576d'ordre \(4\), on a \og~gratuitement\fg{} une estimation d'ordre \(2\). 2577La différence entre ces deux estimations est en \(\bigO 3\) et peut 2578servir à contrôler le pas de temps. 2579 2580\paragraph{Méthode de \nom{Runge-Kutta} d'ordre $\pfrac{5}{4}$ (méthode 2581 de \nom{Fehlberg})} Pour décrire cette méthode, utilisée par défaut, 2582nous reprenons la présentation d'\nom{A. Fortin}~\cite{fortin_analyse_2001}. 2583Il est utile d'introduire les \(6\) constantes suivantes~: 2584\[ 2585\begin{aligned} 2586 k_{1} &= \Delta\,t\,\cdot\,G\paren{\debutpas{Y_{i}},t} \\ 2587 k_{2} &= 2588 \Delta\,t\,\cdot\,G\paren{\debutpas{Y_{i}}+\Frac{1}{4}\,k_{1},t+\Frac{1}{4}\,\Delta\,t}\\ 2589 k_{3} &= 2590 \Delta\,t\,\cdot\,G\paren{\debutpas{Y_{i}}+\Frac{3}{32}\,k_{1}+\Frac{9}{32}\,k_{2},t+\Frac{3}{8}\,\Delta\,t} 2591 \\ 2592 k_{4} &= 2593 \Delta\,t\,\cdot\,G\paren{\debutpas{Y_{i}}+\Frac{1932}{2197}\,k_{1}-\Frac{7200}{2197}\,k_{2}+\Frac{7296}{2197}\,k_{3},t+\Frac{12}{13}\,\Delta\,t}\\ 2594 k_{5} &= 2595 \Delta\,t\,\cdot\,G\paren{\debutpas{Y_{i}}+\Frac{439}{216}\,k_{1}-8\,k_{2}+\Frac{3680}{513}\,k_{3}-\Frac{845}{4104}\,k_{4},t+\Delta\,t}\\ 2596 k_{6} &= 2597 \Delta\,t\,\cdot\,G\paren{\debutpas{Y_{i}}-\Frac{8}{27}\,k_{1}+2\,k_{2}-\Frac{3544}{2565}\,k_{3}+\Frac{1859}{4104}\,k_{4}-\Frac{11}{40}\,k_{5},t+\Frac{1}{2}\Delta\,t}\\ 2598\end{aligned} 2599\] 2600 2601Ces coefficients permettent de construire une méthode de 2602\nom{Runge-Kutta} d'ordre \(4\)~: 2603\[ 2604\finpas{Y_{i}}=\debutpas{Y_{i}}+\paren{\Frac{25}{216}\,k_{1}+\Frac{1408}{2565}\,k_{3}+\Frac{2197}{4104}\,k_{4}-\Frac{1}{5}\,k_{5}} 2605\] 2606et une autre d'ordre \(5\)~: 2607\[ 2608\finpas{Y_{i}}=\debutpas{Y_{i}}+\paren{\Frac{16}{135}\,k_{1}+\Frac{6656}{12\,825}\,k_{3}+\Frac{28\,561}{56\,430}\,k_{4}-\Frac{9}{50}\,k_{5}+\Frac{2}{55}\,k_{6}} 2609\] 2610 2611La différence entre ces deux estimations est en \(\bigO 5\) et peut 2612servir à contrôler le pas de temps. 2613 2614\paragraph{Méthode \castem{}} Une méthode de \nom{Runge-Kutta} 2615particulière est disponible dans \castem{}. Cette méthode se distingue 2616par sa gestion du pas de temps et son critère d'arrêt qui sont 2617uniquement basés sur la différence des contraintes entre deux ordres 2618d'approximations (et non sur les variables internes). Cette méthode est 2619décrite en annexe~\ref{sec:algoRKcastem}. 2620 2621\subsubsection{Gestion du pas de temps} 2622 2623Les méthodes de \nom{Runge-Kutta} d'ordre $\pfrac{4}{2}$ et d'ordre 2624$\pfrac{5}{4}$ permettent de comparer les estimations fournies par 2625deux méthodes d'ordre différents. La différence entre ces deux 2626estimations mesure l'erreur d'intégration et est comparée à une 2627certaine tolérance \(\varepsilon\)~: 2628\begin{equation} 2629 \label{eq:RK:epsilon} 2630 \norm{Y^{(a)}-Y^{(b)}}_{\text{RK}}<\varepsilon\quad\text{avec}\quad 2631\end{equation} 2632 2633Deux mesures de l'erreur sont utilisées. Pour un nombre restreint de 2634variables internes\footnote{Cette mesure est utilisée si la taille du 2635 vecteur \(Y\) est inférieure à \(20\) en \(1D\).}, la mesure 2636utilisée est la suivante~: 2637\begin{equation} 2638 \norm{Y^{(a)}-Y^{(b)}}_{\text{RK}}<\varepsilon\quad\text{avec}\quad 2639\norm{Y^{(a)}-Y^{(b)}}_{\text{RK}}= 2640 \Frac{1}{\displaystyle\sum_{i=1}^{N}N_{y_{i}}}\displaystyle\sum_{i=1}^{N}\Frac{\left| 2641 y_{i}^{(a)}-y_{i}^{(b)}\right|}{E_{y_{i}}} 2642\end{equation} 2643 2644Pour des systèmes différentiels de plus grandes tailles, la norme 2645suivante est utilisée~: 2646\begin{equation} 2647 \norm{Y^{(a)}-Y^{(b)}}_{\text{RK}}= 2648 \Frac{1}{\displaystyle\sum_{i=1}^{N}N_{y_{i}}}\displaystyle\sum_{i=1}^{N}\Frac{\left| 2649 y_{i}^{(a)}-y_{i}^{(b)}\right|}{E_{y_{i}}} 2650\end{equation} 2651 2652Dans ces deux expressions, nous avons noté~:\\ 2653\begin{minipage}[t]{0.9\linewidth} 2654 \begin{itemize} 2655 \item \(N\) est le nombre de variables internes~; 2656 \item \(N_{y_{i}}\) le nombre de composantes de la variable interne 2657 \(y_{i}\)~; 2658 \item \(y_{i}^{(a)}\) est l'estimation de la variable interne en fin 2659 de pas de temps obtenue par la première méthode~; 2660 \item \(y_{i}^{(b)}\) est l'estimation de la variable interne en fin 2661 de pas de temps obtenue par la seconde méthode~; 2662 \item \(E_{y_{i}}\) est un paramètre de normalisation associé à la 2663 variable \(E_{y_{i}}\), si l'utilisateur en a définit une par la 2664 méthode \texttt{set\-Error\-Norma\-lisa\-tion\-Factor}. Ce paramètre 2665 permet de normaliser toutes les variables à quelque chose de l'ordre 2666 des déformations. Par exemple, si la variable \(y_{i}\) est de 2667 l'ordre des contraintes, il est possible de la normaliser ainsi~: 2668 \begin{center} 2669 \texttt{yi.setErrorNormalisationFactor(young);} 2670 \end{center} 2671 L'argument de la méthode 2672 \texttt{set\-Error\-Norma\-lisa\-tion\-Factor} peut être soit une 2673 valeur scalaire soit une propriété matériau. 2674 \end{itemize} 2675\end{minipage} 2676 2677Si l'inégalité~\eqref{eq:RK:epsilon} n'est pas respectée, le pas de 2678temps \(\delta\,t^{l}\) est sous-découpé automatiquement. Inversement, 2679si elle est respectée, le pas de temps \(\delta\,t^{l}\) est augmenté. 2680 2681Supposons que l'erreur soit en \(\bigO n\), un facteur \(\beta\) 2682d'augmentation ou de réduction du pas de temps peut être proposé ainsi~: 2683\[ 2684\beta = \paren{\Frac{\varepsilon}{\norm{Y^{(a)}-Y^{(b)}}_{\text{RK}}}}^{\Frac{1}{n}} 2685\] 2686 2687L'augmentation ou la réduction du pas de temps local est limité à un 2688facteur \(10\). Naturellement, le pas de temps local \(\delta\,t^{l}\) 2689ne peut être supérieur à \(t+\Delta\, t-t^{l}\). 2690 2691\paragraph{Gestion par l'utilisateur} Si le code 2692suivant la directive \mkey{Derivative}, présenté dans la suite et qui 2693sert à programmer le système différentiel, renvoie la valeur booléenne 2694\texttt{false}, le pas de temps est automatiquement divisé par \(2\). 2695 2696Cette possibilité est en pratique assez importante, en particulier 2697pour des comportements très raides. Il est par exemple fréquent de 2698rencontrer des lois viscoplastique de type \nom{Norton} dont 2699l'exposant est grand. Dans ces cas, les premières estimations des 2700solutions conduisent à des contraintes équivalentes assez importantes 2701qui conduisent à des vitesses d'écoulement infinies\footnote{Ceci est 2702 particulièrement vrai quand on utilise le système international où 2703 les contraintes s'expriment en Pascal. Une autre manière de résoudre 2704 le problème est de réécrire la loi de \nom{Norton} différemment. Au 2705 lieu d'écrire \(\dot{p}=A\,\sigmaeq^{n}\), il faudrait mieux écrire 2706 \(\dot{p}=\dot{p}_{0}\,\paren{\Frac{\sigmaeq}{\sigma_{0}}}^{n}\) 2707 avec \(\dot{p}_{0}=A\,\sigmaeq^{0}\).}. Informatiquement, ces 2708vitesses se traduisent par l'apparition de la valeur flottante 2709\varcpp{NaN}\footnote{Acronyme de \og~Not a Number~\fg{}}. Les 2710algorithmes de \nom{Runge-Kutta} captent ce cas et sous-découpent 2711alors automatiquement le pas de temps, mais cette solution présente 2712l'inconvénient de ne pas être compatible avec certaines techniques de 2713déverminage extrêmement utiles. Il est dès lors préférable, et 2714également plus efficace puisque des opérations lourdes (calculs de 2715puissance) peuvent être évitées, que l'utilisateur introduise des 2716tests appropriés. 2717 2718\paragraph{Choix de la tolérance} La tolérance 2719\(\varepsilon\) est fixée par défaut à \(10^{-8}\). L'utilisateur peut 2720modifier cette valeur par la directive \mkey{Epsilon}. À l'exécution, 2721l'utilisateur peut modifier cette valeur à l'aide du paramètre 2722\varcpp{epsilon}. 2723 2724\subsubsection{Critère d'arrêt} L'intégration 2725s'arrête quand l'une des conditions suivantes est vérifiée~: 2726\begin{itemize} 2727 \item le temps local devient trop petit, ce qui marque l'échec 2728 de l'algorithme. Le pas de temps minimal admissible est égal au pas de 2729 temps total \(\Delta\,t\) multiplié par 100 fois la précision machine 2730 du type réel considéré~; 2731 \item le temps local est égal au temps de fin de pas, ce qui 2732 marque la réussite de l'intégration. Ceci est vérifié par~: 2733 \[ 2734 \left|t+\Delta\, 2735 t-t^{l}\right|<\Frac{\delta\,t^{l}}{2} 2736 \] 2737\end{itemize} 2738 2739\subsection{La directive \texttt{@ComputeStress}} 2740 2741La directive \mkey{ComputeStress} permet de calculer les contraintes aux 2742différentes étapes de la méthode et en fin de calcul. Les contraintes 2743sont supposées fonction des valeurs actuelles des variables internes. 2744 2745\paragraph{Conventions spécifiques aux différentes étapes de la méthode} 2746Dans la méthode \mkey{ComputeStress}, les conventions suivantes 2747s'appliquent~: 2748\begin{itemize} 2749 \item {\tt sig} représente la contrainte qu'il faut calculer~; 2750 \item {\tt eto} représente la déformation totale actualisée~; 2751 \item {\tt deto} représente la vitesse de déformation totale 2752 (constante sur le pas)~; 2753 \item {\tt T} représente la valeur actualisée de température~; 2754 \item {\tt dT} représente la vitesse de changement de température 2755 (constante sur le pas)~; 2756 \item pour toute variable interne {\tt Y}, {\tt Y} représente sa 2757 valeur actualisée~; 2758 \item pour toute variable interne auxiliaire {\tt Y}, {\tt Y} 2759 représente sa valeur en {\em début} de pas de temps~; 2760 \item pour toute variable externe {\tt V}, {\tt V} représente sa 2761 valeur actualisée~; 2762 \item pour toute variable externe {\tt V}, {\tt dV} représente sa 2763 vitesse de variation sur le pas de temps (constante sur le pas). 2764\end{itemize} 2765 2766\paragraph{Conventions spécifiques en fin d'intégration} Dans la méthode 2767\mkey{ComputeStress}, les conventions suivantes s'appliquent~: 2768\begin{itemize} 2769\item {\tt sig} représente la contrainte qu'il faut calculer~; 2770\item {\tt eto} représente la déformation totale en fin de pas~; 2771\item {\tt deto} représente la vitesse de déformation totale 2772 (constante sur le pas)~; 2773\item {\tt T} représente la valeur de la température en fin de pas~; 2774\item {\tt dT} représente la vitesse de changement de température 2775 (constante sur le pas)~; 2776\item pour toute variable interne {\tt Y}, {\tt Y} représente sa 2777 valeur en fin de pas~; 2778\item pour toute variable interne auxiliaire {\tt Y}, {\tt Y} 2779 représente sa valeur en {\em début} de pas de temps~; 2780\item pour toute variable externe {\tt V}, {\tt V} représente sa 2781 valeur en fin de pas~; 2782\item pour toute variable externe {\tt V}, {\tt dV} représente sa 2783 vitesse de variation sur le pas de temps (constante sur le pas). 2784\end{itemize} 2785 2786\subsection{La directive \texttt{@Derivative}} 2787 2788La directive \mkey{Derivative} permet de préciser les équations 2789différentielles associées aux différentes variables internes. 2790 2791Le code fourni est appelé après celui fourni par la méthode 2792\mkey{ComputeStress}. 2793 2794\paragraph{Conventions spécifiques} Dans la méthode \mkey{Derivative}, 2795les conventions suivantes s'appliquent~: 2796\begin{itemize} 2797 \item {\tt sig} représente la valeur actualisée de la contrainte~; 2798 \item {\tt eto} représente la déformation totale actualisée~; 2799 \item {\tt deto} représente la vitesse de déformation totale 2800 (constante sur le pas)~; 2801 \item {\tt T} représente la valeur actualisée de température~; 2802 \item {\tt dT} représente la vitesse de changement de température 2803 (constante sur le pas)~; 2804 \item pour toute variable interne {\tt Y}, {\tt Y} représente sa 2805 valeur actualisée~; 2806 \item pour toute variable interne auxiliaire {\tt Y}, {\tt Y} 2807 représente sa valeur en {\em début} de pas de temps~; 2808 \item pour toute variable externe {\tt V}, {\tt V} représente sa 2809 valeur actualisée~; 2810 \item pour toute variable externe {\tt V}, {\tt dV} représente sa 2811 vitesse de variation sur le pas de temps (constante sur le pas). 2812\end{itemize} 2813 2814Pour toute variable interne {\tt Y}, {\tt dY} représente sa vitesse de 2815variation~: c'est cette variable que l'utilisateur doit renseigner. 2816 2817%\subsection{La directive \texttt{@TangentOperator}} 2818% 2819%La directive \mkey{TangentOperator} permet de préciser une matrice 2820%tangente. 2821 2822%Le code fourni est appelé après celui fourni par la méthode 2823%\mkey{ComputeStress}. 2824% 2825%\paragraph{Conventions spécifiques} Dans la méthode \mkey{Derivative}, 2826%les conventions suivantes s'appliquent~: 2827%\begin{itemize} 2828% \item {\tt sig} représente la valeur actualisée de la contrainte~; 2829% \item {\tt eto} représente la déformation totale actualisée~; 2830% \item {\tt deto} représente la vitesse de déformation totale 2831% (constante sur le pas)~; 2832% \item {\tt T} représente la valeur actualisée de température~; 2833% \item {\tt dT} représente la vitesse de changement de température 2834% (constante sur le pas)~; 2835% \item pour toute variable interne {\tt Y}, {\tt Y} représente sa 2836% valeur actualisée~; 2837% \item pour toute variable interne auxiliaire {\tt Y}, {\tt Y} 2838% représente sa valeur en {\em début} de pas de temps~; 2839% \item pour toute variable externe {\tt V}, {\tt V} représente sa 2840% valeur actualisée~; 2841% \item pour toute variable externe {\tt V}, {\tt dV} représente sa 2842% vitesse de variation sur le pas de temps (constante sur le pas). 2843%\end{itemize} 2844% 2845%Pour toute variable interne {\tt Y}, {\tt dY} représente sa vitesse de 2846%variation~: c'est cette variable que l'utilisateur doit renseigner. 2847 2848\subsection{Mise à jour des variables auxiliaires} 2849 2850Les variables auxiliaires sont mises à jour à chaque fois qu'un pas est 2851jugé valide au sens du critère d'arrêt~\eqref{eq:RK:epsilon} après la 2852mise à jour des variables internes. 2853 2854Cette méthode peut donc être appelée plusieurs fois si un algorithme à 2855pas de temps adaptatif est utilisé. Une variable spécifique, nommée 2856\texttt{dt\textunderscore{}}, permet de récupérer l'incrément de temps 2857effectivement utilisé par l'algorithme. Le pas de temps total est 2858donné par la variable \texttt{dt}. 2859 2860\subsection{Paramètres automatiquement définis} 2861 2862L'analyseur implicite définit automatiquement différents 2863paramètres~: 2864\begin{itemize} 2865 \item \varcpp{epsilon}, la valeur du critère d'arrêt de 2866 l'algorithme de \nom{Runge-Kutta}. La valeur par défaut de ce 2867 paramètre est de \(10^{-8}\) et peut être modifiée par la directive 2868 \mkey{Epsilon}. Ce paramètre doit avoir une valeur strictement 2869 positive~; 2870 \item \varcpp{dtmin}, la valeur minimale du pas de temps 2871 utilisé pour l'intégration\footnote{Ce paramètre a été introduit 2872 essentiellement pour contourner les difficultés liées à l'algorithme 2873 de convergence forcée du code \castem{} qui envoie, lorsqu'il 2874 s'active, un incrément de temps nul à la loi de comportement.}. Par 2875 défaut, ce paramètre n'existe que si la directive 2876 \mkeyb{MinimalTimeStep}{Minimal\-Time\-Step} est utilisée. Ce 2877 paramètre doit avoir une valeur strictement positive. 2878\end{itemize} 2879 2880\subsection{Notes sur l'utilisation des tableaux de variables internes} 2881 2882L'utilisation des tableaux de variables internes dans le 2883cas des algorithmes de \nom{Runge-Kutta} mérite quelques précisions. 2884 2885Pour réduire le temps de développement de cette fonctionnalité et 2886surtout réduire les sources d'erreurs, nous avons utilisé des classes 2887livrés avec TFEL (la librairie mathématique sur laquelle se base 2888\mfront{}). En fonction de la taille des tableaux, deux types de 2889vecteurs sont utilisés~: 2890\begin{itemize} 2891\item pour des tableaux de taille inférieure à \(10\), des vecteurs de 2892 taille finie, alloués sur la pile, sont utilisés~; 2893\item pour des tableaux plus grands, des vecteurs alloués 2894 dynamiquement ont été utilisés. 2895\end{itemize} 2896Dans les deux cas, les opérations mathématiques usuelles ont été 2897définies~: l'addition d'un vecteur de tenseur est possible et 2898optimisée. 2899 2900Ainsi, la génération des différents algorithmes de \textsc{Runge-Kutta} 2901est restée inchangée, ce qui est satisfaisant. 2902 2903\subsection{Intégration d'une loi d'écoulement viscoplastique 2904 orthotrope par un algorithme de \nom{Runge-Kutta}} 2905\label{sec:integration-dune-loi} 2906 2907Nous nous intéressons maintenant à l'écriture d'une loi de 2908comportement viscoplastique orthotrope. La forme retenue est proche 2909d'une loi de \nom{Norton}, la vitesse de l'écoulement étant donnée 2910par~: 2911\[ 2912\tdepsilonvis = A\,\paren{\sigmaH}^{E}\,\tenseur{n} 2913\] 2914où \(sigmaH\) désigne la contrainte de \nom{Hill} et \(\tenseur{n}\) 2915le tenseur normal. Ils sont définis en annexe au 2916paragraphe~\ref{sec:critere-de-nomhill}. 2917 2918Il est d'usage d'introduire une déformation viscoplastique cumulée 2919\(p\) dont la vitesse est donnée par~: 2920\[ 2921\dot{p} = A\paren{\sigmaH}^{E} 2922\] 2923 2924Le système d'équations complet est donc~: 2925\begin{equation} 2926 \label{eq:law} 2927 \begin{aligned} 2928 \dot{p} &= A\paren{\sigmaH}^{E} \\ 2929 \tdepsilonvis &= \dot{p}\,\tenseur{n} \\ 2930 \tdepsilonel &= \tdepsilonto - \tdepsilonvis 2931 \end{aligned} 2932\end{equation} 2933 2934\begin{figure}[htbp] 2935 \centering 2936 \begin{minipage}[htbp]{0.9\linewidth} 2937 \shorthandoff{:} 2938 \code{ 2939 \small 2940 \input{@abs_top_srcdir@/docs/mfront/mfront/OrthotropicCreep.tex} 2941 } 2942 \shorthandon{:} 2943 \end{minipage} 2944 \caption{Implantation d'une loi d'écoulement viscoplastique 2945 orthotrope par une mé\-tho\-de de \nom{Runge-Kutta}} 2946 \label{fig:OrthoViscoRK} 2947\end{figure} 2948 2949\paragraph{Implantation} La figure~\ref{fig:OrthoViscoRK} présente 2950l'implantation de ce système. Le calcul du tenseur de \nom{Hill} a été 2951présenté au paragraphe~\ref{sec:calcul-du-tenseur}. Rappelons 2952simplement qu'il est nécessaire d'inclure le fichier d'entête {\tt 2953 TFEL/\-Material\-Law/\-Hill.hxx} dans la directive {\tt 2954 @Includes}. Le calcul du tenseur normal est immédiat d'après les 2955formules données au paragraphe~\ref{sec:critere-de-nomhill}. 2956 2957Deux remarques peuvent être faites~: 2958\begin{itemize} 2959 \item les intégrations de type \nom{Runge-Kutta} conduisent souvent à 2960 des prédictions initiales élevées des contraintes. Nous testons ici si 2961 la contrainte de \nom{Hill} est supérieure à \(10^{9}\, MPa\)~: dans 2962 ce cas, nous renvoyons la valeur {\tt false} qui entraîne un découpage 2963 du pas de temps~; 2964 \item cette implantation tient compte des limitations du code aux 2965 éléments finis \castem{} qui ne permet pas d'avoir une définition 2966 homogène des directions d'orthotropie quelque soit l'hypothèse de 2967 modélisation. Les conventions utilisées ici sont conformes à celles 2968 décrites en annexe~\ref{sec:annexe:orthotropie} pour les tubes. 2969\end{itemize} 2970 2971\clearpage 2972\newpage 2973\section{Intégration des lois de comportement par une méthode implicite} 2974\label{sec:Implicite} 2975 2976Nous décrivons dans cette section l'intégration des lois de 2977comportement par une méthode implicite. Ces méthodes sont très 2978efficaces, stables et peuvent être utilisées pour intégrer toutes les 2979lois de comportement. 2980 2981Elles présentent de nombreux avantages par rapport aux autres 2982méthodes. Les plus importants sont que~: 2983\begin{itemize} 2984 \item ces méthodes introduisent naturellement la matrice 2985 tangente cohérente. De plus, dans la plupart des cas, cette matrice 2986 est pratiquement \og{}~gratuite~\fg{} (voir 2987 paragraphe~\ref{sec:mfront:implicit:tangentOperator})~; 2988 \item elles permettent de traiter naturellement les lois de 2989 comportement indépendantes du temps. Un exemple est donné par le 2990 traitement de la plasticité dans les analyseurs spécifiques (voir 2991 paragraphe~\ref{sec:mfront:isotropic:analyser}). 2992\end{itemize} 2993 2994Ces méthodes supposent que l'on soit capable de résumer l'intégration 2995de la loi de comportement à la résolution d'un système non-linéaire. 2996Nous avons détaillé comment procéder pour les analyseurs spécifiques 2997(voir paragraphe~\ref{sec:mfront:isotropic:analyser}). Nous montrons 2998dans le paragraphe suivant comment procéder pour transformer un 2999système différentiel en système d'équations non linéaires et nous en 3000profitons pour introduire les méthodes implicites en se basant sur les 3001méthodes de \nom{Runge-Kutta}. 3002 3003Deux analyseurs, nommés \texttt{Implicit} et \texttt{ImplicitII}, sont 3004disponibles pour intégrer les lois de comportement par une méthode 3005implicite. Ils se distinguent par le fait que l'analyseur 3006\texttt{Implicit} déclare automatiquement la déformation élastique 3007comme première variable interne\footnote{Nous verrons plus loin une 3008 justification de ce choix~: il permet un calcul quasi-automatique de 3009 la matrice tangente cohérente.}. 3010 3011Différentes méthodes pour résoudre le système non-linéaire 3012introduit par la méthode implicite sont disponibles~: 3013\begin{itemize} 3014 \item \varcpp{NewtonRaphson}, l'algorithme classique de 3015 \nom{Newton-Raphson}~; 3016 \item \varcpp{NewtonRaphson\textunderscore{}NumericalJocabian}, 3017 l'algorithme classique de \nom{Newton-Raphson} avec une approximation 3018 numérique du jacobien~; 3019 \item \varcpp{Broyden}, premier algorithme de \nom{Broyden}~; 3020 \item \varcpp{BroydenII}, second algorithme de \nom{Broyden}. 3021\end{itemize} 3022L'utilisateur choisi l'algorithme par la directive 3023\mkey{Algorithm}. 3024 3025Outre la présentation des bases mathématiques de ces méthodes, nous 3026profitons de ce paragraphe pour justifier certaines initialisations 3027implicites faites dans \mfront{} qui rendent l'écriture des lois de 3028comportement plus concise. 3029 3030\subsection{Résolution d'un système différentiel par une méthode implicite} 3031\label{sec:resol-dun-syst-implicite} 3032 3033\subsubsection{Généralités} Soit à résoudre le système différentiel 3034suivant~: 3035\begin{equation} 3036 \label{eq:systeme_diff-implicite} 3037 \dot{Y}=G\paren{Y,t} 3038\end{equation} 3039où \(G\) est une fonction {\em a priori} non linéaire et que nous 3040supposerons {\em a minima} continûment dérivable. 3041 3042La dépendance en temps évoquée ici dans la fonction \(G\) désigne en 3043réalité une dépendance à la variation de certaines variables {\em 3044 externes} qui influencent la loi de comportement. Des exemple de 3045telles variables externes sont~: 3046\begin{minipage}[t]{0.5\linewidth} 3047 \begin{itemize} 3048 \item le taux de combustion~; 3049 \item la taille de grain~; 3050 \item la densité de fission~; 3051 \item etc\ldots 3052 \end{itemize} 3053\end{minipage} 3054 3055\(Y\) un vecteur regroupant les différentes variables internes~: 3056\[ 3057Y= 3058\begin{pmatrix} 3059 y_{1} \\ 3060 \vdots \\ 3061 y_{i} \\ 3062 \vdots \\ 3063 y_{n} \\ 3064\end{pmatrix} 3065\] 3066Cette écriture est {\em symbolique} et chaque terme \(y_{j}\) peut 3067représenter une variable interne qui peut être soit un scalaire soit un 3068tenseur symétrique d'ordre \(2\). 3069 3070L'analyseur \texttt{Implicit} impose que le premier terme de ce 3071vecteur soit la déformation élastique, dont la variable associée est 3072\texttt{eel}, qui est automatiquement déclarée\footnote{Le nom de 3073 glossaire de cette variable est \texttt{Elastic\-Strain}. La notion 3074 de nom de glossaire est décrite dans la première partie de la 3075 documentation de \mfront{}~\cite{helfer_generateur_2013-1}.}. 3076 3077La résolution numérique de cette équation consiste à estimer, à partir 3078de la valeur \(\debutpas{Y}\) à un instant \(t\), la valeur 3079\(\finpas{Y}\) à un instant \(t+\Delta\, t\). 3080 3081\paragraph{Méthode d'\nom{Euler}} 3082L'estimation la plus simple consiste à remplacer la dérivée 3083\(\dot{Y}\) par la différence finie 3084\(\Frac{\finpas{Y}-\debutpas{Y}}{\Delta\, t}\), ce qui conduit à~: 3085\begin{equation} 3086 \label{eq:explicite-implicite} 3087 \finpas{Y}=\debutpas{Y}+\Delta\,t\,G\paren{\debutpas{Y},t} 3088\end{equation} 3089Cette estimation, dite {\em explicite}, est connue pour être à la fois 3090peu précise et peu robuste. L'erreur de cette méthode est 3091(asymptotiquement) proportionnelle au pas de temps~: elle est dite 3092d'ordre \(1\). 3093 3094\paragraph{Méthode de \nom{Runge-Kutta} (explicite) d'ordre 2} 3095Les méthodes de \nom{Runge-Kutta} permettent d'améliorer la précision 3096du schéma d'\nom{Euler}. Pour obtenir une méthode d'ordre \(2\), la 3097valeur \(\finpas{Y}\) est recherchée de la forme~: 3098\[ 3099\finpas{Y} = \debutpas{Y}+a_{1}\Delta\,t\,G\paren{\debutpas{Y},t}+a_{2}\Delta\,t\,G\paren{\debutpas{Y}+a_{4}\Delta\, t,t+a_{3}\Delta\,t} 3100\] 3101Les quatre coefficients \(\left.a_{i}\right|_{i \in [0:4]}\) sont 3102choisis pour que l'expression précédente coïncide avec le 3103développement de \nom{Taylor} à l'ordre \(2\) de la fonction \(G\). 3104Cette contrainte conduisant à un système de \(3\) équations à \(4\) 3105inconnues, plusieurs choix sont possibles. 3106 3107\paragraph{Méthode du point milieu} Ce choix correspond à la solution 3108\(a_{1}=0\), \(a_{2}=1\), \(a_{3}=\pfrac{1}{2}\) et 3109\(a_{4}=\pfrac{G\paren{Y_{i},t}}{2}\). Cette méthode s'écrit ainsi~: 3110\begin{equation} 3111 \label{eq:mfront:implicite:midpoint} 3112 \finpas{Y} = \debutpas{Y}+\Delta\,t\,G\paren{\debutpas{Y}+\Frac{\Delta\, t}{2}G\paren{\debutpas{Y},t},t+\Frac{\Delta\, t}{2}} 3113\end{equation} 3114 3115\paragraph{Méthode d'\nom{Euler} modifiée} Ce choix correspond à la solution 3116\(a_{1}=a_{2}=\pfrac{1}{2}\), \(a_{3}=1\) et 3117\(a_{4}=G\paren{Y_{i},t}\). Cette méthode s'écrit ainsi~: 3118\begin{equation} 3119 \label{eq:mfront:implicite:euler} 3120 \finpas{Y} = \debutpas{Y}+\Frac{\Delta\,t}{2}\left[G\paren{\debutpas{Y},t}+G\paren{\debutpas{Y}+\Delta\, t\,G\paren{\debutpas{Y},t},t+\Delta\,t }\right] 3121\end{equation} 3122 3123\paragraph{Estimation implicite} 3124Des estimations dites {\em implicites} de la solution consistent à 3125introduire, à la place de l'estimation \(\debutpas{Y}+\Delta\, t\, 3126G\paren{\debutpas{Y},t}\), la valeur recherchée \(\finpas{Y}\). Deux 3127schémas implicites, se déduisent alors des schémas de 3128\nom{Runge-Kutta} précédent. 3129 3130À partir de la méthode du point 3131milieu~\eqref{eq:mfront:implicite:midpoint}, nous obtenons~: 3132\[ 3133\finpas{Y} 3134=\debutpas{Y}+\Delta\,t\,G\paren{\Frac{1}{2}\left(\debutpas{Y}+\finpas{Y}\right),t+\Frac{\Delta\, 3135 t}{2}} 3136\] 3137 3138À partir de la méthode d'\nom{Euler} 3139modifiée~\eqref{eq:mfront:implicite:euler}, nous obtenons~: 3140\[ 3141\finpas{Y} =\debutpas{Y}+\Frac{\Delta\,t}{2}\,\left[G\paren{\debutpas{Y},t} 3142+\,G\paren{\finpas{Y},t+\Delta\,t}\right] 3143\] 3144 3145\paragraph{\(\theta\)-méthodes} 3146Les schémas implicites précédents sont généralement présentés en 3147introduisant un paramètre \(\theta\), compris entre \(0\) et \(1\), 3148dans les expressions précédentes afin de rendre les apports des termes 3149\(\debutpas{Y}\) et \(\finpas{Y}\) dissymétriques. 3150 3151À partir de la méthode du point 3152milieu~\eqref{eq:mfront:implicite:midpoint}, nous obtenons~: 3153\begin{equation} 3154 \label{eq:implicite} 3155 \finpas{Y} =\debutpas{Y}+\Delta\,t\,G\paren{\paren{1-\theta}\debutpas{Y}+\theta\,\finpas{Y},t+\theta\,\Delta\, t} \\ 3156\end{equation} 3157 3158La seconde forme, obtenue à partir de la méthode d'\nom{Euler} 3159modifiée~\eqref{eq:mfront:implicite:euler}, nous obtenons~: 3160\[ 3161\finpas{Y} =\debutpas{Y}+\Delta\,t\,\left[\paren{1-\theta}G\paren{\debutpas{Y},t} 3162+\theta\,G\paren{\finpas{Y},t+\Delta\,t}\right] 3163\] 3164Cette seconde forme d'équation implicite est rarement utilisée, au moins 3165pour l'intégration des lois de comportement mécaniques. 3166 3167\subsection{Méthode implicite utilisée dans \mfront{}} 3168 3169\mfront{} tend, suivant l'usage, à supporter naturellement la 3170formulation~\eqref{eq:implicite}, mais rien n'interdit d'utiliser la 3171première. Pour simplifier la présentation, nous ne décrirons le 3172principe de la résolution que pour la première forme. 3173 3174L'équation~\eqref{eq:implicite} peut s'écrire~: 3175\begin{equation} 3176 \label{eq:F_implicite} F\paren{\Delta\, Y} = \Delta Y - 3177 \Delta\,t\,G\paren{\debutpas{Y}+\theta\Delta{Y},t+\theta\,\Delta t} = 3178 0 3179\end{equation} 3180où nous avons introduit l'incrément \(\Delta\,Y\) de la variable \(Y\) 3181au cours du pas de temps \(\Delta\,t\), variable qui apparaît comme 3182l'inconnue \og~naturelle~\fg{} de cette équation. Nous avons donc ramené 3183la résolution du système différentiel~\eqref{eq:systeme_diff-implicite} 3184à la recherche d'un zéro de la fonction \(F\paren{\Delta\, Y}\). 3185 3186\paragraph{Convention d'écriture} Il est d'usage d'introduire des 3187notations (et des abus de langage) pratiques. 3188 3189Si dans le système différentiel initial, une fonction \(f\) des 3190variables internes \(f\paren{Y}\) est présente, alors l'expression 3191\(f\paren{Y+\theta\,\Delta\,Y}\) apparaîtra dans le système 3192d'équations. 3193 3194Par abus de langage, nous dirons que \(Y+\theta\,\Delta\,Y\) est la 3195valeur en milieu de pas de \(Y\), que nous noterons \(\milieupas{Y}\)~: 3196\[ 3197\milieupas{Y} = Y+\theta\,\Delta\,Y 3198\] 3199Cette notation s'étend naturellement aux composantes de \(Y\)~: 3200\[ 3201\milieupas{y_{i}} = y_{i}+\theta\,\Delta\,y_{i} 3202\] 3203En particulier, ces notations donnent un sens à l'expression 3204\(\deriv{\milieupas{y_{i}}}{\Delta\,y_{i}}\) qui est égale à \(\theta\). 3205 3206De même, nous dirons que \(f\paren{Y+\theta\,\Delta\,Y}\) est la 3207valeur en milieu de pas de \(f\) et nous la noterons \(\milieupas{f}\)~: 3208\[ 3209\milieupas{f} = f\paren{Y+\theta\,\Delta\,Y} 3210\] 3211 3212\paragraph{Décomposition du vecteur $F$} L'écriture 3213générique~\eqref{eq:systeme_diff-implicite} résulte de la concaténation 3214des équations différentielles régissant chaque variable interne \(Y\). 3215En pratique, le vecteur \(F\) est décomposé en termes associés à chaque 3216variable interne~: 3217\[ 3218F= 3219\begin{pmatrix} 3220 f_{y_{1}} \\ 3221 \vdots \\ 3222 f_{y_{i}} \\ 3223 \vdots \\ 3224 f_{y_{n}} \\ 3225\end{pmatrix} 3226\] 3227Cette écriture est là aussi {\em symbolique} et chaque terme 3228\(f{y_{j}}\) peut être soit un scalaire soit un tenseur symétrique 3229d'ordre \(2\). 3230 3231\mfront{} définit automatiquement les différents termes 3232\(f_{y_{j}}\). Ces termes se manipulent comme un scalaire si \(y_{i}\) 3233est un scalaire, et comme une tenseur d'ordre \(2\) si \(y_{i}\) l'est. 3234 3235Pour des raisons de performances, la variable \(f_{y_{j}}\) est l'image 3236d'une portion du vecteur \(F\) et toute modification de cette variable 3237modifie le vecteur \(F\) 3238 3239Si \(y_{i}\) désigne un tableau de variables internes, \(f_{y_{j}}\) 3240est une méthode qui prend en argument un indice entier. 3241 3242\paragraph{Choix du paramètre $\theta$} L'optimum en terme 3243d'efficacité numérique est obtenu pour \(\theta=\pfrac{1}{2}\) (schéma 3244dit \og~semi-implicite\fg{}), ce qui est le choix par défaut dans 3245\mfront{}. Le traitement de mécanismes indépendants du temps 3246(plasticité ou endommagement) nécessite, pour être physiquement 3247satisfaisant, d'utiliser la valeur \(1\) (schéma dit \og~purement 3248implicite\fg{}). La valeur par défaut peut être modifiée par la 3249directive \mkey{Theta}. À l'exécution, elle peut être modifiée par le 3250paramètre \varcpp{theta}. 3251 3252\paragraph{Méthodes mixtes} Le choix du paramètre 3253\(\theta\) dépend du phénomène traité. Pour des lois mêlant différents 3254types de phénomènes, certains auteurs choisissent de traiter les 3255écoulements viscoplastiques par une méthode semi-implicite et les 3256phénomènes indépendants du temps par une méthode purement implicite. Il 3257est possible de faire de même dans \mfront{} en prenant certaines 3258précautions sur le calcul des contraintes. 3259 3260\paragraph{Initialisation du vecteur $F$} 3261L'équation~\eqref{eq:F_implicite} montre que la fonction \(f_{y_{i}}\) 3262comporte comme premier terme l'incrément \(\Delta\,y_{i}\). \mfront{} 3263initialise donc le vecteur \(F\) à cette valeur avant chaque itération 3264de la méthode de résolution. 3265 3266\subsubsection{Initialisation} 3267 3268Les méthodes de résolution convergent si l'initialisation de la 3269recherche \(\Delta\, Y^{0}\) est \og~suffisamment proche~\fg{} de la 3270solution. Dans le cas présent, l'équation~\eqref{eq:explicite-implicite} 3271conduit à supposer que \(\Delta\, Y\) ne sera qu'une faible correction 3272de \(Y_{t}\) (pour des pas de temps suffisamment petits), de sorte 3273qu'une estimation initiale nulle est généralement satisfaisante. Il 3274s'agit du choix fait par défaut par \mfront{} qui peut être modifié par 3275l'utilisateur dans un bloc \mkey{Predictor}. Un choix classique est 3276d'utiliser l'estimation explicite de la solution~: 3277\[ 3278\Delta\, Y^{0} = \Delta\,t\,G\paren{\debutpas{Y},t} 3279\] 3280 3281\subsubsection{Critère d'arrêt} 3282 3283Les algorithmes présentés s'arrêtent quand la différence entre deux 3284estimations des incréments des déformations viscoplastiques cumulées 3285est inférieure à un certain critère \(\varepsilon\)~: 3286\[ 3287\Frac{1}{\displaystyle\sum_{i=1}^{N}N_{i}}\displaystyle\sum_{i=1}^{N}\left|\Delta_{n}\Delta\, 3288y_{i}\right|<\varepsilon 3289\] 3290où \(\Delta_{n}\Delta\,y_{i}\) désigne la différence entre 3291l'estimation de l'incrément de la i\ieme{} variable à l'étape \(n+1\) et 3292de son estimation à l'étape \(n\) et \(N_{i}\) est le nombre de 3293composantes de la variable interne \(y_{i}\)\footnote{Pour les tenseurs, 3294 \(\left|s\right|\) représente la somme des valeurs absolues des termes 3295 du tenseur (les composantes extra-diagonales ne sont comptées qu'une 3296 fois).}. 3297 3298\paragraph{Notes} Cette écriture du critère d'arrêt 3299montre qu'il n'est valide que si les différentes variables internes sont 3300du même ordre de grandeur. Ceci est également nécessaire pour le bon 3301comportement numérique de la méthode de \nom{Newton}. Dans le cas 3302contraire, il est possible de normaliser les variables par la méthode 3303{\tt setNormalisationFactor}. 3304 3305\subsubsection{Avantages et inconvénients des méthodes implicites} Les 3306méthodes implicites sont généralement opposées aux méthodes 3307d'intégration plus ou moins basées sur des algorithmes de type 3308\nom{Runge-Kutta}. Ces dernières méthodes présentent plusieurs 3309avantages~: 3310\begin{itemize} 3311\item un ordre de convergence qui peut être élevé~; 3312\item une maîtrise de la précision des résultats par 3313 \og~correction/prédiction\fg{}. Cette maîtrise permet de 3314 sous-découper localement le pas de temps~; 3315\item une facilité d'implantation par rapport aux méthodes implicites, 3316 ces méthodes ne nécessitant pas le calcul de matrice jacobienne 3317 notamment. 3318\end{itemize} 3319 3320\mfront{} propose un analyseur générique basé sur les algorithmes de 3321type \nom{Runge-Kutta} (par défaut un correcteur-prédicteur \(5/4\) à 3322pas de temps adaptatif qui allie un ordre de convergence élevé à une 3323efficacité numérique acceptable) décrit à la section~\ref{sec:RK}. 3324 3325Le principal défaut de ces méthodes est le nombre d'appels nécessaires 3326à la fonction \(G\) du système~\eqref{eq:systeme_diff-implicite}, en 3327particulier si une stratégie à pas de temps adaptatif est utilisée. 3328 3329En comparaison, les méthodes implicites sont réputées beaucoup plus 3330stables numériquement et ne nécessitent qu'un nombre faible d'appels à 3331la fonction \(G\). De plus, les méthodes implicites sont 3332particulièrement adaptées aux lois de comportement indépendantes du 3333temps (endommagement ou plasticité) où le système différentiel peut être 3334remplacé par la nullité du critère plastique en fin de pas de temps, ce 3335qui est précisément la condition {\em physique} à vérifier\footnote{Nous 3336 avons traité le cas de la plasticité isotrope au 3337 paragraphe~\ref{sec:mfront:isotropic-solver}.}. Cette particularité 3338explique pourquoi les méthodes implicites sont toujours à préférer aux 3339méthodes de type \nom{Runge-Kutta} dans le cas de lois de comportement 3340indépendantes du temps, même si elles présentent sur le papier des 3341ordres de convergence moins élevés. 3342 3343L'application des méthodes implicites aux lois de comportement 3344dépendantes du temps (écoulements viscoplastiques notamment) est plus 3345délicate en raison justement de ces ordres de convergences plus 3346faibles (que les méthodes de type \nom{Runge-Kutta})\footnote{Il ne 3347 faut pas oublier qu'il ne sert généralement à rien d'utiliser des 3348 pas de temps trop grands. En effet, l'algorithme de résolution 3349 global (en quasi-statique) utilise une résolution implicite~: sur un 3350 pas de temps, il faut que l'hypothèse qui permet la linéarisation de 3351 l'évolution mécanique de la structure soit vérifiée.}. 3352 3353En pratique, nous avons {\em toujours} constaté des résultats 3354extrêmement satisfaisants tant en termes de précision qu'en termes de 3355performance numérique avec les méthodes implicites, quel que soit le 3356type de loi de comportement. 3357 3358\begin{table}[htbp] 3359 \centering 3360 \begin{tabular}{|c|c|c|} 3361 \hline Méthode d'intégration & Temps CPU & Nombre 3362 d'itérations \\ 3363 \hline \hline Implicite & 5 m 26 s & 1817 itérations \\ 3364 \hline \nom{Runge-Kutta} \(5/4\) & 32 m 21 s & 17493 3365 itérations \\ 3366 \hline 3367 \end{tabular} 3368 \caption{Temps de calculs obtenus sur une éprouvette 3369 entaillée en traction modélisée en $2D\paren{r,z}$. Calcul réalisé 3370 par \nom{J.-M. Proix} sur la version $11$ de code \aster{}. La loi 3371 de comportement locale est la loi de 3372 \nom{HayHurst}~\cite{proix_comportement_2012}. 3373 Cette comparaison a été fournie par J.-M. Proix (EDF/AMA).} 3374 \label{tab:mfront:NR:comparison:methode} 3375\end{table} 3376 3377Enfin, les méthodes implicites introduisent naturellement la 3378matrice tangente cohérente, ce qui permet de réduire considérablement le 3379nombre d'itérations nécessaires à la méthode globale. Ceci est illustré 3380sur la figure~\ref{tab:mfront:NR:comparison:methode}. 3381 3382Ceci explique que la plupart des analyseurs syntaxiques 3383disponibles dans \mfront{} soient basés sur ces méthodes. 3384 3385Les deux principales faiblesses des méthodes implicites restent~: 3386\begin{itemize} 3387 \item la nécessité de calculer la matrice jacobienne ou d'utiliser des 3388 méthodes alternatives moins efficaces~; 3389 \item l'absence de contrôle de l'erreur. 3390\end{itemize} 3391 3392\subsection{Méthode de \nom{Newton-Raphson}} 3393\label{sec:NR} 3394 3395Une méthode généralement utilisée pour trouver un zéro d'une fonction 3396est la méthode itérative de \nom{Newton-Raphson}. 3397 3398Connaissant une estimation \(\Delta\,Y^{n}\) de la solution, la fonction 3399\(F\) peut être approximée dans un voisinage \(\Delta\,Y^{n}\) par~: 3400\[ 3401F\paren{\Delta\,Y}=F\paren{\Delta\,Y^{n}}+\left.\derivtot{F}{\Delta\,Y}\right|_{\Delta 3402 Y=\Delta\,Y^{n}}\,\paren{\Delta\,Y-\Delta\,Y^{n}} 3403\] 3404où \(\derivtot{F}{\Delta\,Y}\) est la matrice jacobienne de la fonction 3405\(F\), qui sera notée \(J\) dans la suite. 3406 3407Une nouvelle estimation \(\Delta\,Y^{n+1}\) est choisie en annulant 3408cette approximation de \(F\), ce qui conduit à l'expression suivante~: 3409\begin{equation} 3410 \label{eq:NR} 3411 \Delta\, Y^{n+1}=\Delta\,Y^{n}-\left[J^{-1}\paren{\Delta\,Y^{n}}\right]\,F\paren{Y^{n}} 3412\end{equation} 3413 3414Dans cette équation, l'écriture \(\left[J^{-1}\paren{\Delta\,Y^{n}}\right]\,F\paren{Y^{n}}\) représente la 3415solution \(\Delta^{2}\,Y\) du système linéaire~: 3416\[ 3417\left[J\paren{\Delta\,Y^{n}}\right]\,\Delta^{2}\,Y = F\paren{Y^{n}} 3418\] 3419% 3420%\begin{figure}[htbp] 3421% \centering 3422% \input{@top_srcdir@/docs/mfront/Images/Methode_Newton.pstricks} 3423% \caption[Illustration de la méthode de \nom{Newton} en $1D$ utilisée 3424% pour la résolution de l'équation $f\paren{y}=0$.]{Illustration de la 3425% méthode de \nom{Newton} en $1D$ utilisée pour la résolution de 3426% l'équation $f\paren{y}=0$. Les estimations successives de la 3427% solution sont données par~: 3428% $y_{n+1}=y_{n}-\Frac{f\paren{y_{n}}}{f\primeexp\paren{y_{n}}}$.} 3429% \label{fig:illustration_newton_raphson} 3430%\end{figure} 3431% 3432%\paragraph{Illustration en \(1D\)} La 3433%figure~\ref{fig:illustration_newton_raphson} illustre la méthode de 3434%\nom{Newton} en $1D$. 3435 3436\paragraph{Matrice jacobienne} 3437La matrice jacobienne s'exprime ainsi~: 3438\begin{equation} 3439 \label{eq:J_implicite} 3440 J = \derivtot{F}{\Delta\,Y} = I-\theta\Delta\,t\,\derivtot{G}{Y}\paren{\debutpas{Y}+\theta\Delta{Y},t+\theta\,\Delta t} 3441\end{equation} 3442où \(I\) est la matrice identité. 3443 3444{\em Le calcul de la matrice jacobienne est généralement le point le 3445 plus difficile de la méthode implicite.} 3446 3447\paragraph{Calcul de la matrice jacobienne par blocs} En pratique, la 3448matrice \(J\) est calculée par blocs et prend la forme suivante~: 3449\[ 3450J = \deriv{F}{\Delta\,Y} = 3451\begin{pmatrix} 3452 \deriv{f_{y_{1}}}{\Delta\,y_{1}} & \ldots & \ldots & \ldots & \ldots \\ 3453 \vdots & \vdots & \vdots & \vdots & \vdots \\ 3454 \vdots & \vdots & \deriv{f_{y_{i}}}{\Delta\,y_{j}} & \vdots & \vdots \\ 3455 \vdots & \vdots & \vdots & \vdots & \vdots \\ 3456 \ldots & \ldots & \ldots & \ldots & \deriv{f_{y_{N}}}{\Delta\,y_{N}} \\ 3457\end{pmatrix} 3458\] 3459 3460Les différents termes \(\deriv{f_{y_{i}}}{\Delta\,y_{j}}\) sont 3461automatiquement définies par \mfront{}. La nature mathématique de ces 3462termes dépend de la nature des variables \(y_{i}\) et \(y_{j}\). Elles 3463peuvent être manipulées par les opérations mathématiques 3464usuelles. Pour des raisons de performances, ces variables sont des 3465images de la matrice jacobienne~: en les manipulant, on modifie 3466directement la matrice jacobienne. 3467 3468Ainsi, la dérivée d'une variable \varcpp{a} par rapport à la 3469variable \varcpp{b} sera accessible par \varcpp{dfa\_ddb}. 3470 3471Dans le cas particulier des tableaux de variables internes, 3472\varcpp{dfa\_ddb} est une méthode qui prend~: 3473\begin{itemize} 3474\item un unique argument entier si soit \varcpp{a} ou soit \varcpp{b} 3475 désigne un tableau de variables internes, mais pas les deux en mêmes 3476 temps~; 3477 \item deux arguments entiers si \varcpp{a} et \varcpp{b} 3478 désignent deux tableaux de variables internes~; 3479\end{itemize} 3480Ces méthodes renvoient des objets spéciaux, qui agissent comme des 3481scalaires ou des tenseurs d'ordre \(2\) ou \(4\) suivant les cas. Ces 3482objets permettent un accès aux valeurs de la jacobienne qui peut être, 3483en fonction des capacités du compilateur utilisé, moins performant que 3484dans le cas des variables ordinaires. 3485 3486\paragraph{Comparaison de la matrice jacobienne 3487 fournie à une approximation numérique} Le calcul de la matrice 3488jacobienne est, à juste titre, jugé délicat et une erreur peut avoir un 3489impact significatif sur les performances ou la robustesse de 3490l'intégration et dans le meilleur des cas une non 3491convergence\footnote{En effet, dans ce cas, l'erreur apparaît alors que 3492 sinon le seul symptôme est une convergence lente qui peut passer 3493 inaperçue si l'on y prend garde.}. 3494 3495Pour détecter les erreurs dans le calcul du jacobien, nous avons 3496introduit le mot clé \mkey{Compare\-To\-Numerical\-Jacobian}. Ce mot 3497clé déclenche un processus de vérification par comparaison du jacobien 3498fournit par l'utilisateur à un jacobien évalué numériquement par 3499perturbations. Cette vérification se fait par étapes~: 3500\begin{itemize} 3501 \item la première étape est le calcul d'un jacobien numérique 3502 par perturbations. Pour gagner en précision, une différence finie 3503 centrée est utilisée\footnote{En \(1D\), la dérivée numérique d'une 3504 fonction \(f\paren{x}\) au point \(x\) est évaluée ainsi~: 3505 \[ 3506 \Frac{f\paren{x+\epsilon}-f\paren{x-\epsilon}}{2\,\epsilon} 3507 \] 3508 La perturbation est choisie égale à la valeur du critère 3509 d'arrêt de l'algorithme implicite. }~; 3510 \item la seconde étape est de comparer les termes du jacobien. 3511 La comparaison se fait bloc par bloc~: la différence entre la dérivée 3512 \(\deriv{f_{y_{i}}}{\Delta\,y_{j}}\) calculée par l'utilisateur et son 3513 approximation numérique \(\Frac{\Delta\,f_{y_{i}}}{\Delta\,\Delta\,y_{j}}\) 3514 est évaluée ainsi~: 3515 \[ 3516 \Frac{1}{N_{y_{i}}\,N_{y_{j}}}\norm{\deriv{f_{y_{i}}}{\Delta\,y_{j}}-\Frac{\Delta\,f_{y_{i}}}{\Delta\,\Delta\,y_{j}}} 3517 \] 3518 où \(N_{y_{i}}\) est le nombre de composantes de la variables 3519 \(y_{i}\) et où \(\norm{a}\) est la somme des valeurs absolues des 3520 composantes de \(a\). Cette différence est comparée à un certain 3521 critère. Ce critère est par défaut égal au critère de convergence de 3522 l'algorithme implicite, mais l'utilisateur peut en préciser en autre 3523 en utilisant le mot clé {\tt @Jacobian\-Comparison\-Criterium}. 3524 L'utilisateur peut également utiliser le paramètre 3525 \varcpp{jacobian\-Comparison\-Criterium} pour modifier ce critère à 3526 l'exécution. Si la différence est supérieure au critère, un message 3527 donnant la valeur de la différence, le bloc considéré et son 3528 approximation numérique est affiché sur la sortie standard. 3529\end{itemize} 3530 3531\begin{table} 3532 \centering 3533 \begin{tabular}{|c|c|c|} 3534 \cline{2-3} 3535 \multicolumn{1}{c|}{} & 3536 \begin{minipage}{4cm} 3537 Nombre de cycles 3538 \end{minipage} & 3539 \begin{minipage}{4cm} 3540 Rapport à la référence 3541 \end{minipage} \\ 3542 \hline 3543 Référence & 4\,776\,120. & 1 \\ 3544 \hline 3545 \begin{minipage}[p]{4cm} 3546 Calcul du jacobien numérique et comparaison 3547 \end{minipage} 3548 & 26\,944\,564 & 5,65\\ 3549 \hline 3550 \end{tabular} 3551 \caption{Impact du calcul de jacobien numérique et de sa comparaison à 3552 celui fourni par l'utilisateur pour une loi de comportement simple.} 3553 \label{tab:NR:nJ} 3554\end{table} 3555 3556Le coût du calcul du jacobien numérique est souvent important. Nous 3557pouvons le constater au tableau~\ref{tab:NR:nJ} où nous avons analysé 3558le nombre de cycles processeur pour réaliser l'intégration d'une loi 3559de \textsc{Norton} lors d'un essai de traction uniaxial\footnote{Cet 3560 essai est décrit plus en détails en 3561 annexe~\ref{QNR:ComparaisonNumeriques}.}. Pour le cas traité, le 3562coût de l'intégration est multiplié par \(5,65\). Il faut donc prendre 3563garde à retirer cette option pour les versions de production des lois 3564de comportement. 3565 3566\paragraph{Initialisation de la matrice jacobienne} 3567L'expression~\eqref{eq:J_implicite} montre que le premier terme de la 3568matrice jacobienne est la matrice identité. Cette écriture nous a 3569conduit, dans \mfront{} à initialiser, à chaque itération, la matrice 3570jacobienne à la matrice identité. 3571 3572\subsection{Méthodes alternatives} 3573 3574Insistons, le calcul de la matrice jacobienne est la 3575principale difficulté de la méthode de \nom{Newton-Raphson}. 3576 3577Afin de dispenser l'utilisateur de fournir la matrice jacobienne, nous 3578avons envisagé d'approximer le jacobien par différentiation 3579numérique. Un jacobien correctement évalué (par une différence finie 3580d'ordre \(2\)) conduit à une bonne convergence de l'algorithme, mais a 3581un coût numérique important\footnote{Voir, en 3582 annexe~\ref{QNR:ComparaisonNumeriques}, les tableaux~\ref{tab:QNR:1} 3583 et~\ref{tab:QNR:2}}. Cette méthode est accessible par l'algorithme 3584\texttt{Newton\-Raphson\textunderscore{}\-Numerical\-Jacobian}. 3585 3586Ce constat est général et de nombreux auteurs ont proposé des 3587algorithmes qui ne se basent pas sur une différentiation numérique 3588(sauf éventuellement pour une estimation initiale ou en cas de non 3589convergence). 3590 3591L'idée de ces méthodes est de modifier l'algorithme~\eqref{eq:NR} en 3592substituant à la matrice jacobienne une matrice \(\underset{\sim}{J}\) 3593bien choisie~: 3594\begin{equation} 3595 \label{eq:QNR} 3596 Y_{n}=Y_{n-1}-\underset{\sim}{J}^{-1}\,.\,F\paren{Y_{n-1}} 3597\end{equation} 3598 3599Parmi ces méthodes, les algorithmes de \textsc{Broyden} sont les plus utilisés. 3600 3601\subsubsection{Les algorithmes de \textsc{Broyden}} 3602 3603Nous décrivons dans ce paragraphe deux algorithmes dû à \textsc{Broyden}. 3604 3605\paragraph{Premier algorithme de \textsc{Broyden}} Un des algorithmes 3606les plus utilisés est celui de \textsc{Broyden} qui met à jour au cours 3607des itérations une approximation \(\underset{\sim}{J}_{n}\) de la 3608matrice jacobienne à partir de son expression 3609\(\underset{\sim}{J}_{n-1}\) à l'itération précédente~: 3610\begin{equation} 3611 \label{eq:Broyden} \underset{\sim}{J}_{n} = 3612 \underset{\sim}{J}_{n-1}+\Frac{\Delta\,F_{n}-\underset{\sim}{J}_{n-1}\,.\,\Delta\,Y_{n}}{\norm{\Delta\,Y_{n}}^{2}}\otimes\Delta\,Y_{n} 3613\end{equation} 3614où~: 3615\begin{minipage}[t]{0.8\linewidth} 3616 \begin{itemize} 3617 \item \(\Delta\,Y_{n}=Y_{n}-Y_{n-1}\)~; 3618 \item 3619 \(\Delta\,F_{n}=F\paren{Y_{n}}-F\paren{Y_{n-1}}\)~; 3620 \item \(v_{1}\,\otimes\,v_{2}\) est le produit tensoriel de deux 3621 vecteurs~; 3622 \item \(\norm{v}\) est la norme euclidienne du vecteur \(v\). 3623 \end{itemize} 3624\end{minipage} 3625 3626\paragraph{Calcul exact de certains blocs} 3627Il est intéressant de remarquer qu'il est toujours possible de 3628modifier la matrice jacobienne par blocs~: si certains termes sont 3629connus et/ou faciles à calculer, il peut être intéressant de les 3630injecter dans la matrice jacobienne en écrasant les modifications 3631fournies par l'algorithme de \textsc{Broyden}. 3632 3633\paragraph{Initialisation du jacobien} Il est nécessaire de fournir 3634une estimation initiale \(\underset{\sim}{J}_{0}\) du jacobien. Deux 3635choix ont été regardés dans cette note~: 3636\begin{itemize} 3637 \item \(\underset{\sim}{J}_{0}\) est choisi égal à l'identité. 3638 L'expression~\eqref{eq:J_implicite} montre que pour des pas de temps 3639 raisonnablement petits, l'identité constitue une bonne approximation 3640 de la matrice jacobienne~; 3641 \item \(\underset{\sim}{J}_{0}\) est calculé par perturbations du 3642 système initial. 3643\end{itemize} 3644 3645\paragraph{Second algorithme de \textsc{Broyden}} 3646Une variante de l'algorithme de \textsc{Broyden} met à jour une 3647approximation \(\underset{\sim}{J}_{n}^{-1}\) de l'inverse de la matrice 3648jacobienne par la relation suivante~: 3649\begin{equation} 3650 \label{eq:Broyden2} 3651 \underset{\sim}{J}_{n}^{-1} = 3652 \underset{\sim}{J}_{n-1}^{-1}+\Frac{\Delta\,Y_{n}-\underset{\sim}{J}_{n-1}^{-1}\,.\,\Delta\,F_{n}}{\Delta\,Y_{n}\,\mid\,\underset{\sim}{J}_{n-1}^{-1}\,.\,\Delta\,F_{n}}\,\otimes\,\paren{\Delta\,Y_{n}\,\mid\,\underset{\sim}{J}_{n-1}^{-1}} 3653\end{equation} 3654 3655Cette variante est disponible dans \mfront{} sous le nom de 3656\texttt{Broyden2}. 3657 3658Dans ce cas, il n'est pas possible de fournir des blocs du jacobien. 3659 3660\subsection{Amélioration de la robustesse des algorithmes implicites} 3661 3662Différentes méthodes permettant d'améliorer la robustesse des 3663algorithmes ont été testées. Nous les décrivons maintenant bien que leur 3664utilisation conduise à des résultats mitigés. 3665 3666Pour des raisons d'efficacité du code généré, il a été décidé que le 3667support d'une méthode d'accélération était une décision prise au 3668moment de la génération du code. Les méthodes présentées présentent 3669des paramètres permettant de fixer un nombre minimal d'itérations 3670avant que la méthode s'active. En donnant une valeur suffisamment 3671grande à ce paramètre, la méthode ne s'activera jamais, ce qui ne veut 3672pas dire qu'elle n'aura aucun coût : par exemple, les méthodes 3673présentées utilisent des valeurs des itérées précédentes qui sont 3674toujours stockées. 3675 3676Enfin, les paramètres associés à ces méthode ne seront disponibles que 3677si elles sont activées. 3678 3679\subsubsection{Méthode d'accélération utilisé par 3680 les algorithmes de résolution globaux de \castem{}} 3681 3682L'idée de cette méthode d'accélération est de trouver une nouvelle 3683estimation de la solution à partir des itérations précédentes. Soient 3684\(F_{n-2}\), \(F_{n-1}\) et \(F_{n}\) les résidus associés aux trois 3685dernières estimations \(\Delta\, Y_{n-2}\), \(\Delta\, Y_{n-1}\) et 3686\(\Delta\, Y_{n}\) de la solution. 3687 3688Il est possible de construire à partir de ces trois résidus un 3689hyperplan. L'idée est d'exprimer la projection du vecteur nul (qui 3690correspond à la solution recherchée) sur cet hyperplan comme une 3691combinaison linéaire de ces trois résidus et de déduire une nouvelle 3692estimation de la solution en appliquant la même combinaison linéaire aux 3693estimations \(\Delta\, Y_{n-2}\), \(\Delta\, Y_{n-1}\) et \(\Delta\, 3694Y_{n}\). 3695 3696Dans certains cas difficiles, cette méthode peut stabiliser les 3697calculs, mais elle empêche la convergence quadratique de la méthode de 3698\nom{Newton}. Son intérêt apparaît aujourd'hui très limité. 3699 3700La directive \mkey{UseAcceleration} est utilisée pour activer cette 3701méthode d'accélération. Elle est suivie soit du mot clé \varcpp{true} 3702soit du mot clé \varcpp{false} et d'un point-virgule. 3703 3704La directive \mkey{AccelerationTrigger} permet de préciser à partir de 3705quelle itération la méthode d'accélération est utilisée. La valeur 3706fournie doit être supérieure à \(3\) pour que la méthode ait un sens. La 3707valeur fournie peut être modifiée par le paramètre 3708\varcpp{acceleration\-Trigger}. 3709 3710La directive \mkey{AccelerationPeriod} permet de préciser le nombre 3711d'itérations séparant deux emplois successifs de cette méthode. La 3712valeur fournie peut être modifiée par le paramètre 3713\varcpp{acceleration\-Period}. 3714 3715\subsubsection{Méthode de relaxation} 3716 3717Une méthode de relaxation a été introduite pour améliorer la 3718convergence de certains cas difficiles où des oscillations lors de la 3719recherche de solution peuvent apparaître. Soient \(\Delta\, Y_{n-1}\) et 3720\(\Delta\, Y_{n}\) les deux dernières estimations de la solution. La 3721relaxation consiste à prendre comme nouvelle estimation~: 3722\[ 3723\paren{1-w}\,\Delta\, Y_{n-1}+w\,\Delta\, Y_{n} 3724\] 3725où \(w\) est un coefficient de relaxation. 3726 3727La directive \mkey{RelaxationTrigger} permet de préciser à partir de 3728quelle itération la méthode d'accélération est utilisée. La valeur 3729fournie doit être supérieure à \(3\) pour que la méthode ait un sens. La 3730valeur fournie peut être modifiée par le paramètre 3731\varcpp{relaxation\-Trigger}. 3732 3733La directive \mkey{RelaxationCoefficient} permet de préciser le 3734coefficient \(w\). La valeur fournie peut être modifiée à l'exécution 3735par le paramètre \varcpp{relaxation\-Coefficient}. 3736 3737% \subsubsection{Autres pistes} 3738 3739% D'autres pistes d'amélioration peuvent être suivies. Nous renvoyons à 3740% l'annexe~\ref{sec:mfront:implicit:robustness} pour la description d'un 3741% algorithme dû à \nom{Powell} qui semble particulièrement intéressant. 3742 3743\subsection{Calcul de la matrice tangente cohérente} 3744 3745L'utilisateur peut calculer la matrice tangente cohérente 3746dans un bloc introduit par la directive \mkey{TangentOperator}. 3747 3748Cette directive est appelée si l'intégration de la loi a été un 3749succès, avant la mise à jour des variables internes et la mise à jour de 3750contraintes. 3751 3752\paragraph{Symétrie de la matrice tangente} Par défaut, la matrice 3753tangente est supposée non symétrique. L'utilisateur peut explicitement 3754dire que la matrice est symétrique par la directive 3755\mkeyb{IsTangentOperatorSymmetric}{Is\-Tangent\-Operator\-Symmetric} 3756qui est suivie d'une des valeurs booléennes \varcpp{true} ou 3757\varcpp{false}\footnote{Si l'opérateur tangent est symétrique, 3758 l'interface \aster{} fait l'économie d'une transposition de la 3759 matrice (cette transposition est nécessaire pour la compatibilité 3760 avec le {\tt fortran}.}. 3761 3762\subsubsection{Une façon générique de calculer de la matrice tangente 3763 cohérente} 3764\label{sec:mfront:implicit:tangentOperator} 3765 3766La matrice tangente cohérente est la dérivée d'incrément de 3767contraintes \(\tsigma\) par rapport à l'incrément de déformations 3768totales \(\tepsilonto\). Cet incrément était considéré jusqu'à présent 3769comme un paramètre du système d'équations implicites. Il est considéré 3770dans ce paragraphe comme la variable principale. 3771 3772Pour commencer, nous supposerons que le tenseur d'élasticité est une 3773des variables internes de la loi. Plus loin, nous imposerons que cette 3774variable soit la première dans le système implicite. Ces conditions sont 3775imposées si on utilise l'analyseur \texttt{Implicit}. 3776 3777Nous supposerons ensuite que la contrainte ne dépende que du 3778tenseur d'élasticité (éventuellement de manière non linéaire). Nous 3779reviendrons sur cette hypothèse plus tard. Nous en tirons que~: 3780\[ 3781\deriv{\Delta\,\tsigma}{\Delta\,\tepsilonto} 3782= 3783\left.\deriv{\tsigma}{\tepsilonel}\right|_{\tepsilonel+\Delta\,\tepsilonel}\,\colon\,\deriv{\Delta\,\tepsilonel}{\Delta\,\tepsilonto} 3784\] 3785 3786Le problème du calcul de la matrice tangente cohérente se ramène donc 3787au calcul de la dérivée 3788\(\deriv{\Delta\,\tepsilonel}{\Delta\,\tepsilonto}\). 3789 3790Nous montrons dans ce paragraphe que si la matrice jacobienne du 3791système est connue, alors il existe une façon générique de calculer ce 3792terme dans de très nombreux cas. 3793 3794\paragraph{Rappels mathématiques} Avant de rentrer 3795dans les détails de la méthode, il est utile de faire quelques rappels 3796mathématiques. Les incréments des variables internes \(\Delta\,Y\) sont 3797reliées à l'incrément de déformations totales par la relation 3798implicite~: 3799\[ 3800F\paren{\Delta\,Y\paren{\Delta\tepsilonto},\Delta\,\tepsilonto} 3801= 0 3802\] 3803Si \(\Delta\tepsilonto\) varie, cette relation reste vraie. Par 3804différentiation, nous obtenons~: 3805\[ 3806\dtot\,F = \deriv{F}{\Delta\,Y}\,\dtot\,\Delta\,Y+\deriv{F}{\Delta\,\tepsilonto}\,\dtot\,\Delta\,\tepsilonto=0 3807\] 3808 3809Le terme \(\deriv{F}{\Delta\,Y}\) est la jacobienne \(J\) du système 3810qui est connue après la résolution. 3811 3812Pour déduire \(\deriv{\Delta\,\tsigma}{\Delta\,\tepsilonto}\) de cette 3813équation, nous allons faire une hypothèse qui permet de calculer 3814explicitement \(\deriv{F}{\Delta\,\tepsilonto}\). 3815 3816\paragraph{Hypothèse} Nous supposons que l'incrément de déformation 3817totales \(\Delta\tepsilonto\) n'apparaît que dans l'équation relative 3818aux déformations élastiques par la relation de partition des 3819déformations, qui, une fois discrétisée, donne~: 3820\[ 3821\Delta\,\tepsilonel+\sum_{i}\Delta\,\tepsilonan_{i}-\Delta\,\tepsilonto=0 3822\] 3823 3824La dérivée de \(\deriv{F}{\Delta\,\tepsilonto}\) est alors évidente et 3825le vecteur 3826\(\deriv{F}{\Delta\,\tepsilonto}\,\dtot\,\Delta\,\tepsilonto\) est égal 3827à~: 3828\[ 3829\deriv{F}{\Delta\,\tepsilonto}\,\dtot\,\Delta\,\tepsilonto = - 3830\begin{pmatrix} 3831 \dtot\,\Delta\tepsilonto \\ 3832 \vdots \\ 3833 0 \\ 3834 \vdots \\ 3835 0\\ 3836\end{pmatrix} 3837\] 3838 3839Nous en déduisons que~: 3840\[ 3841\dtot\,\Delta\,\tepsilonel=J^{-1}_{\tepsilonel}\,\colon\,\dtot\,\Delta\tepsilonto 3842\] 3843où \(J^{-1}_{\tepsilonel}\) est la partie supérieure gauche de l'inverse de 3844la jacobienne. 3845 3846Finalement, nous obtenons~: 3847\[ 3848\deriv{\Delta\,\tsigma}{\Delta\,\tepsilonto} = \left.\deriv{\tsigma}{\tepsilonel}\right|_{\tepsilonel+\Delta\,\tepsilonel}\,\colon\, J^{-1}_{\tepsilonel} 3849\] 3850 3851La matrice \(J^{-1}_{\tepsilonel}\) peut être calculée par la méthode 3852\varcpp{getPartialJacobianInvert} à qui l'on doit passer un tenseur 3853d'ordre \(4\). Cette méthode ne doit être utilisée que dans le bloc 3854\mkey{TangentOperator}. 3855 3856Ce cas explique pourquoi la déformation élastique est toujours définie 3857comme la première variable interne dans le cas de l'analyseur 3858\texttt{Implicit}. 3859 3860\paragraph{Généralisation} La méthode 3861précédente se généralise dans le cas où la contrainte dépend de 3862plusieurs variables internes et éventuellement de la déformation totale. 3863En effet, il suffit d'écrire~: 3864\[ 3865\deriv{\Delta\,\tsigma}{\Delta\,\tepsilonto} 3866= 3867\sum_{i}\left.\deriv{\tsigma}{y_{i}}\right|_{y_{i}+\Delta\,y_{i}}\,\colon\,\deriv{\Delta\,y_{i}}{\Delta\,\tepsilonto} 3868+ 3869\left.\deriv{\tsigma}{\tepsilonto}\right|_{\tepsilonto+\Delta\,\tepsilonto} 3870\] 3871Les mêmes considérations que précédemment montrent que les 3872différentes dérivées \(\deriv{\Delta\,y_{i}}{\Delta\,\tepsilonto}\) se 3873lisent sur les \(N_{\tepsilonto}\) premières colonnes de l'inverse de la 3874matrice jacobienne, où \(N_{\tepsilonto}\) est le nombre de composantes 3875du tenseur \(\tepsilonto\). 3876 3877Il est possible de récupérer ces dérivées par la méthode 3878\varcpp{get\-Partial\-Jacobian\-Invert} à qui l'on doit passer 3879successivement des variables qui vont contenir les dérivées des 3880variables d'intérêt dans {\em l'ordre de déclaration des 3881 variables}. Ces variables doivent être des tenseurs d'ordre \(2\) 3882dans le cas de variables scalaires et des tenseurs d'ordre \(4\) dans 3883le cas de variables tensorielles. 3884 3885Dans le cas des tableaux de variables internes, il faut passer des 3886vecteurs de tailles finies du type adéquat\footnote{On utilisera la 3887 classe \tfel{tvector} de \TFEL{} qui paramétrée par sa taille et le 3888 type d'objet contenu.}. 3889 3890Insistons~: si l'on a besoin que des dérivées de deux 3891premières variables internes (par exemple la déformation élastique et la 3892variable d'endommagement) alors il suffit de passer deux arguments à la 3893méthode \varcpp{get\-Partial\-Jacobian\-Invert}, on ne calculera donc 3894pas les autres dérivées pour rien. À l'utilisateur de déclarer les 3895variables dans le bon ordre ! 3896 3897\subsubsection{Une méthode alternative de calcul de la matrice 3898 tangente cohérente} 3899 3900Il existe une autre méthode de calcul de la matrice tangente cohérente 3901basée sur un partitionnement de la jacobienne et non de son 3902inverse~\cite{proix_integration_2012}. 3903 3904Pour cela, notons \(z_{i}\) les variables internes autres que les 3905déformations élastiques. Nous avons, avec les mêmes hypothèses que 3906précédemment~: 3907\[ 3908J\,.\, 3909\begin{pmatrix} 3910 \dtot\,\Delta\,\tepsilonel \\ 3911 \dtot\,\Delta\, Z 3912\end{pmatrix} 3913- 3914\begin{pmatrix} 3915 \dtot\,\Delta\tepsilonto \\ 3916 0 \\ 3917\end{pmatrix} 3918= 0 3919\] 3920 3921En découpant la matrice jacobienne en quatres blocs~: 3922\[ 3923J= 3924\begin{pmatrix} 3925 J_{0} & J_{1} \\ 3926 J_{2} & J_{3} \\ 3927\end{pmatrix} 3928\] 3929on obtient deux systèmes~: 3930\[ 3931\left\{ 3932\begin{aligned} 3933J_{0}\,\dtot\,\Delta\,\tepsilonel+J_{1}\, \dtot\,\Delta\, Z &= \dtot\,\Delta\tepsilonto \\ 3934J_{2}\,\dtot\,\Delta\,\tepsilonel+J_{3}\, \dtot\,\Delta\, Z &= 0\\ 3935\end{aligned} 3936\right. 3937\] 3938Le second système conduit à~: 3939\[ 3940\dtot\,\Delta\, Z = -J_{3}^{-1}\,J_{2}\,\dtot\,\Delta\,\tepsilonel 3941\] 3942Par report dans le premier système, nous obtenons~: 3943\[ 3944\dtot\,\Delta\,\tepsilonel = \paren{J_{0}-J_{1}\,J_{3}^{-1}\,J_{2}}^{-1}\,\dtot\,\Delta\tepsilonto 3945\] 3946et finalement~: 3947\[ 3948\deriv{\Delta\,\tepsilonel}{\Delta\tepsilonto}=\paren{J_{0}-J_{1}\,J_{3}^{-1}\,J_{2}}^{-1} 3949\] 3950 3951Cette méthode peut être avantageuse si le nombre de variables 3952internes est petit. 3953 3954\subsection{La directive \texttt{@ComputeStress}} 3955 3956La directive \mkey{ComputeStress} permet de calculer les contraintes aux 3957différentes itérations de la méthode et en fin de calcul. Les contraintes 3958sont supposées fonction des valeurs actuelles des variables internes. 3959 3960\paragraph{Conventions spécifiques aux différentes itérations de la 3961 méthode} Dans la méthode \mkey{ComputeStress}, les conventions 3962suivantes s'appliquent~: 3963\begin{itemize} 3964 \item {\tt sig} représente la contrainte qu'il faut calculer~; 3965 \item {\tt eto} représente la déformation totale en milieu de pas (en 3966 \(t+\theta\,\Delta\,t\))~; 3967 \item {\tt deto} représente l'incrément de la déformation totale 3968 (constante sur le pas)~; 3969 \item {\tt T} représente la valeur de la température en milieu de 3970 pas (en 3971 \(t+\theta\,\Delta\,t\))~; 3972 \item {\tt dT} représente la variation de température (constante sur 3973 le pas)~; 3974 \item pour toute variable interne {\tt Y}, {\tt Y} représente son 3975 estimation actuelle en milieu de pas (en 3976 \(t+\theta\,\Delta\,t\))~; 3977 \item pour toute variable interne auxiliaire {\tt Y}, {\tt Y} 3978 représente sa valeur en {\em début} de pas de temps~; 3979 \item pour toute variable externe {\tt V}, {\tt V} représente sa 3980 valeur en milieu de pas (en 3981 \(t+\theta\,\Delta\,t\))~; 3982 \item pour toute variable externe {\tt V}, {\tt dV} représente son 3983 incrément sur le pas de temps (constante sur le pas). 3984\end{itemize} 3985 3986\paragraph{Conventions spécifiques en fin d'intégration} Dans la méthode 3987\mkey{ComputeStress}, les conventions suivantes s'appliquent~: 3988\begin{itemize} 3989 \item {\tt sig} représente la contrainte qu'il faut calculer~; 3990 \item {\tt eto} représente la déformation totale en fin de pas~; 3991 \item {\tt deto} représente la vitesse de déformation totale 3992 (constante sur le pas)~; 3993 \item {\tt T} représente la valeur de la température en fin de pas~; 3994 \item {\tt dT} représente la vitesse de changement de température 3995 (constante sur le pas)~; 3996 \item pour toute variable interne {\tt Y}, {\tt Y} représente sa 3997 valeur en fin de pas~; 3998 \item pour toute variable interne auxiliaire {\tt Y}, {\tt Y} 3999 représente sa valeur en {\em début} de pas de temps~; 4000 \item pour toute variable externe {\tt V}, {\tt V} représente sa 4001 valeur en fin de pas~; 4002 \item pour toute variable externe {\tt V}, {\tt dV} représente sa 4003 vitesse de variation sur le pas de temps (constante sur le pas). 4004\end{itemize} 4005 4006\subsection{La directive \texttt{@Integrator}} 4007 4008La directive \mkey{Integrator} permet de construire le système implicite 4009à résoudre. 4010 4011\paragraph{Conventions spécifiques} Les conventions suivantes 4012s'appliquent~: 4013\begin{itemize} 4014 \item {\tt sig} représente la contrainte actualisée (calculée par le 4015 code fourni après la directive 4016 \mkeyb{ComputeStress}{Compute\-Stress})~; 4017 \item {\tt eto} représente la déformation totale en début de pas~; 4018 \item {\tt deto} représente la vitesse de déformation totale 4019 (constante sur le pas)~; 4020 \item {\tt T} représente la valeur de la température en début de pas~; 4021 \item {\tt dT} représente la vitesse de changement de température 4022 (constante sur le pas)~; 4023 \item pour toute variable interne {\tt Y}, {\tt Y} représente sa 4024 valeur en début de pas~; 4025 \item pour toute variable interne {\tt Y}, {\tt Y} représente 4026 l'estimation courante de l'incrément de cette variable sur le pas~; 4027 \item pour toute variable interne {\tt Y}, {\tt fY} représente 4028 l'équation implicite associée à cette variable~; 4029 \item pour toute variable interne auxiliaire {\tt Y}, {\tt Y} 4030 représente sa valeur en début de pas~; 4031 \item pour toute variable externe {\tt V}, {\tt V} représente sa 4032 valeur en début de pas~; 4033 \item pour toute variable externe {\tt V}, {\tt dV} représente sa 4034 vitesse de variation sur le pas de temps (constante sur le pas). 4035\end{itemize} 4036 4037Si l'algorithme de \nom{Newton} ou le premier algorithme de 4038\nom{Broyden} est utilisé, pour tout couple de variables internes {\tt 4039 Yi} et {\tt Yj}, {\tt dfYi\textunderscore{}ddYj} représente le terme du jacobien 4040\(\deriv{f_{Y_{i}}}{Y_{j}}\)~; 4041 4042\subsection{Mise à jour des variables auxiliaires} 4043 4044Les variables auxiliaires sont mises à jour après la mise à jour des 4045variables internes et la mise à jour des contraintes, une fois 4046l'algorithme convergé. 4047 4048À ce moment, les valeurs externes (déformations totales et températures 4049incluses) n'ont pas été mises à jour. 4050 4051\subsection{Ordre d'évaluation des blocs définis par l'utilisateur} 4052 4053 4054\begin{figure}[htbp] 4055 \centering 4056 \includegraphics{@top_srcdir@/docs/mfront/Images/ImplicitDSL.eps} 4057 \caption{Ordre d'évaluation des différents blocs de code fournis par 4058 l'utilisateur dans le cas d'une intégration implicite.} 4059 \label{fig:ImplicitOrder} 4060\end{figure} 4061 4062La figure~\ref{fig:ImplicitOrder} montre l'ordre d'appel des 4063différents blocs de code définis par l'utilisateur. 4064 4065\subsection{Paramètres automatiquement définis} 4066 4067L'analyseur implicite définit automatiquement différents 4068paramètres~: 4069\begin{itemize} 4070 \item \varcpp{epsilon}, la valeur du critère d'arrêt de 4071 l'algorithme implicite. La valeur par défaut de ce paramètre est de 4072 \(10^{-8}\) et peut être modifiée par la directive \mkey{Epsilon}. Ce 4073 paramètre doit avoir une valeur strictement positive~; 4074 \item \varcpp{theta}, la valeur de \(\theta\) utilisé par 4075 l'algorithme implicite. La valeur par défaut de ce paramètre est de 4076 \(0.5\) et peut être modifiée par la directive \mkey{Theta}. Les 4077 valeurs admissibles sont comprises entre \(0\) et \(1\)~; 4078 \item \varcpp{iterMax}, le nombre maximum d'itérations autorisées. 4079\end{itemize} 4080 4081Si la méthode d'accélération de \castem{} est utilisée, les paramètres 4082suivants sont déclarés~: 4083\begin{itemize} 4084 \item \varcpp{accelerationTrigger}, le nombre d'itérations 4085 minimum pour utiliser la méthode d'accélération~; 4086 \item \varcpp{accelerationPeriod}, le nombre d'itérations 4087 entre deux utilisations de la méthode d'accélération~; 4088\end{itemize} 4089 4090Si la méthode de relaxation de \castem{} est utilisée, les paramètres 4091suivants sont déclarés~: 4092\begin{itemize} 4093 \item \varcpp{relaxationTrigger}, le nombre d'itérations minimum 4094 pour utiliser la méthode de relaxation~; 4095 \item \varcpp{relaxationCoefficient}, le coefficient de 4096 relaxation. 4097\end{itemize} 4098 4099 4100\subsection{Intégration d'une loi d'écoulement viscoplastique 4101 orthotrope par un algorithme implicite} 4102 4103Nous reprenons ici l'exemple précédent en modifiant l'algorithme 4104d'intégration utilisé par un algorithme implicite. Nous traitons ici la 4105généralisation de la loi de \nom{Norton} au cas orthotrope. 4106 4107Les algorithmes implicites (\(\theta\)-méthodes) conduisent à réécrire 4108le système différentiel~\eqref{eq:law} ainsi~: 4109\begin{equation} 4110 \begin{aligned} 4111 \Delta\,\tepsilonel + \Delta\,p\,\tenseur{n} - \Delta\,\tepsilonto &= 0 \\ 4112 \Delta{p} - A\,\paren{\sigmaH}^{E}\,\Delta\, t &= 0 \\ 4113 \end{aligned} 4114\end{equation} 4115où~: 4116\begin{minipage}[t]{0.8\linewidth} 4117 \begin{itemize} 4118 \item \(\Delta\,\tepsilonto\) est l'incrément sur le pas de temps de 4119 la déformation totale (imposée)~; 4120 \item \(\Delta\,\tepsilonel\) est l'incrément sur le pas de temps de 4121 la déformation élastique~; 4122 \item \(\Delta\,p\) est l'incrément sur le pas de temps de la 4123 déformation viscoplastique équivalente~; 4124 \item \(\tenseur{n}\) est la normale à la surface de charge évaluée 4125 à l'instant \(t+\theta\,\Delta\,t\)~; 4126 \item \(\sigmaH\) est la contrainte équivalente de \nom{Hill} 4127 évaluée à l'instant \(t+\theta\,\Delta\,t\)~; 4128 \item \(\Delta\,t\) est l'incrément de temps. 4129 \item \(\theta\) est un paramètre d'intégration compris entre \(0\) 4130 et \(1\). 4131 \end{itemize} 4132\end{minipage} 4133 4134Ce système non-linéaire d'inconnues \(\Delta\,\tepsilonel\) et 4135\(\Delta\,p\) se décompose naturellement en deux équations 4136\(f_{\tepsilonel}\) et \(f_{p}\). 4137 4138Ce système est résolu par une méthode de \nom{Newton-Raphson}, ce qui 4139nécessite de calculer sa matrice jacobienne. Cette matrice se décompose 4140en quatre parties notées respectivement 4141\(\deriv{f_{\tepsilonel}}{\Delta\,\tepsilonel}\), 4142\(\deriv{f_{\tepsilonel}}{\Delta\,p}\), 4143\(\deriv{f_{p}}{\Delta\,\tepsilonel}\) et \(\deriv{f_{p}}{\Delta\,p}\). 4144 4145Ces différents termes se calculent ainsi~: 4146\[ 4147\left\{ 4148\begin{aligned} 4149 \deriv{f_{\tepsilonel}}{\Delta\,\tepsilonel} &= \tenseurq{I}+\Delta\,p\deriv{n}{\tsigma}\deriv{\tsigma}{\Delta\,\tepsilonel} \\ 4150 &= \tenseurq{I} +\Delta\,p\deriv{n}{\tsigma}\deriv{\tsigma}{\mts{\tepsilonel}}\deriv{\mts{\tepsilonel}}{\Delta\,\tepsilonel} \\ 4151 &= \tenseurq{I} +2\,\mu\,\theta\,\Delta\,p\,\deriv{n}{\tsigma} \\ 4152 &= \tenseurq{I}+\Frac{2\,\mu\,\theta\,\Delta\,p}{\sigmaeq}\,\paren{\tenseurq{H}-\tenseur{n}\otimes\tenseur{n}} \\ 4153 \deriv{f_{\tepsilonel}}{\Delta\,p} &= \tenseur{n} \\ 4154 \deriv{f_{p}}{\Delta\,\tepsilonel} &= - A\,E\,\Delta\, t\,\paren{\sigmaH}^{E-1}\,\deriv{\sigmaH}{\Delta\,\tepsilonel} \\ 4155 &= - A\,E\,\theta\,\Delta\, t\,\paren{\sigmaH}^{E-1}\,\tenseur{n}\,\colon\,\tenseurq{D} \\ 4156 \deriv{f_{p}}{\Delta\,p} &= 1 4157\end{aligned} 4158\right. 4159\] 4160où \(\tenseur{H}\) est le tenseur de \nom{Hill} du matériau déjà 4161rencontré au paragraphe~\ref{sec:integration-dune-loi}. 4162 4163\begin{figure}[htbp] 4164 \centering 4165 \begin{minipage}[htbp]{0.9\linewidth} 4166 \shorthandoff{:} 4167 \code{ 4168 \small 4169 \input{@abs_top_srcdir@/docs/mfront/mfront/ImplicitOrthotropicCreep.tex} 4170 } 4171 \shorthandon{:} 4172 \end{minipage} 4173 \caption{Implantation d'une loi d'écoulement viscoplastique 4174 orthotrope par un algorithme implicite} 4175 \label{fig:OrthoViscoImplicit} 4176\end{figure} 4177 4178\paragraph{Implantation} La figure~\ref{fig:OrthoViscoImplicit} 4179présente l'implantation de cette loi. La définition du système 4180implicite se fait dans la partie \mkey{Integrator}. Les variables {\tt 4181 feel}, {\tt fp}, {\tt dfeel\_ddeel}, {\tt dfeel\_ddp}, {\tt 4182 dfp\_ddeel}, {\tt dfp\_ddp} sont automatiquement définies. Les termes 4183du système sont initialisés à la valeur des incréments des variables 4184correspondantes ({\tt feel} est initialisé à {\tt deel}) et la matrice 4185jacobienne est initialisée à l'identité. 4186 4187Cette implantation tient compte des limitations du code aux éléments 4188finis \castem{} qui ne permet pas d'avoir une définition homogène des 4189directions d'orthotropie quelle que soit l'hypothèse de 4190modélisation. Les conventions utilisées ici sont conformes à celles 4191décrites en annexe~\ref{sec:annexe:orthotropie} pour les tubes. 4192 4193\clearpage 4194\newpage 4195\section{Conclusions} 4196 4197Cette note a décrit les possibilités de \mfront{} dans le domaine de 4198l'intégration des lois de comportement mécanique. Elle complète la 4199présentation générale de \mfront{}~\cite{helfer_generateur_2013-1}. 4200 4201Pour des raisons pédagogiques, nous avons choisi de ne présenter dans 4202cette note que des exemples élémentaires. Des exemples plus complexes 4203peuvent être trouvés dans les sources de la librairie \TFEL{}. Pour 4204les applications de la plate-forme \pleiades{}, des lois de 4205comportement des matériaux usuels du nucléaire peuvent être trouvés 4206dans la base de données \sirius{}. Les utilisateurs \cea{} de 4207l'application \licos{} peuvent également accéder à un corpus de 4208connaissances matériau précompilées via le projet 4209\mfm{}~\cite{helfer_connaissances_2013}. 4210 4211\subsection{Une solution flexible, mature et performante} 4212 4213\mfront{} constitue aujourd'hui une solution flexible et mature au 4214c\oe{}ur de la gestion des matériaux de la plate-forme \pleiades{}. Il 4215a été évalué en interne ou par les partenaires industriels du 4216\cea{}~\cite{olagnon_analysis_2013}. 4217 4218\paragraph{L'évaluation par l'équipe \aster{}} 4219Pour illustrer ce point, nous pouvons nous appuyer sur l'évaluation 4220faite par l'équipe de code \aster{} qui est particulièrement 4221complète~\cite{proix_integration_2013}. 4222 4223Différentes classes de lois de comportement ont été testées~: 4224\begin{itemize} 4225\item loi de \nom{Mazars} décrivant l'endommagement fragile du 4226 béton~\cite{hamon_modeendommagement_2013}~; 4227\item l'endommagement sous fluage tertiaire de structure en acier par 4228 une loi dite de \nom{Hayhurst}~\cite{proix_comportement_2012}~; 4229\item lois plastiques et viscoplastiques de type \nom{Chaboche} avec 4230 écrouissage cinématique (linéaire ou non linéaire)~; 4231\item comportement mono-cristallin et poly-cristallins pour des 4232 structures CFC. 4233\end{itemize} 4234De plus, l'équipe \aster{} a reversé de nombreux tests de loi de 4235comportement dans la librairie \TFEL{}. Ces tests ont été écrits à 4236l'aide de l'utilitaire \mtest{}~\cite{helfer_mtest_2013}. 4237 4238\begin{table}[htbp] 4239 \centering 4240 \begin{tabular}[htbp]{|>{\centering}m{3.cm}|>{\centering}m{3.cm}|>{\centering}m{3.cm}|m{1mm}c|} 4241 \cline{2-5} 4242 \multicolumn{1}{c|}{}& 4243 \mfront{} implicite (\(19\) équations) & 4244 {\tt VISC\_CIN1\_CHAB} implicite aster optimisé \\(1 équation) & \vrule width 0mm height 1.4cm& 4245 \multirow{3}{*}{\includegraphics[width=6.cm]{@top_srcdir@/docs/mfront/Images/hsnv125d.eps}}\\ 4246 \cline{1-3} 4247 Nombre de pas de temps &76 &76 & \vrule width 0mm height 1.4cm&\\ 4248 \cline{1-3} 4249 Nombre d'itérations de \nom{Newton} &160 &151 & \vrule width 0mm height 1.4cm&\\ 4250 \cline{1-3} 4251 Temps CPU &4,67s &4,19s & \vrule width 0mm height 1.4cm&\\ 4252 \hline 4253 \end{tabular} 4254 \caption{Résultat du test {\tt HSNV125}~\cite{proix_hsnv125_2011}.} 4255 \label{fig:mfront:behaviours:hsnv125} 4256\end{table} 4257 4258\paragraph{Test de robustesse} Le test {\tt HSNV125} est extrait de la 4259base de cas test de \aster{}~\cite{proix_hsnv125_2011}. Il s'agit d'un 4260test particulièrement sollicitant pour les algorithmes d'intégration 4261des loi de comportement. Un exemple de résultat de ce test, qui permet 4262d'apprécier la complexité du chargement imposé, est donné au 4263tableau~\ref{fig:mfront:behaviours:hsnv125} pour une loi de type 4264\nom{Chaboche} avec deux variables cinématiques non linéaires. Dans 4265cet exemple, la loi \mfront{} est légèrement moins efficace que la loi 4266optimisée d'\aster{}\footnote{Une version non optimisée de la loi est 4267 également disponible dans \aster{} (\(21\) équations résolues par 4268 une méthode implicite). Cette version conduit à une divergence du 4269 calcul pour le test proposé.}. 4270 4271\begin{table}[htbp] 4272 \centering 4273 \begin{tabular}[htbp]{|>{\centering}m{2.5cm}|>{\centering}m{2.5cm}|>{\centering}m{2.5cm}|>{\centering}m{2.5cm}|c|} 4274 \cline{2-5} 4275 \multicolumn{1}{c|}{}& 4276 MFRONT Implicite& 4277 MFRONT implicite avec jacobienne numérique& 4278 Aster avec jacobienne numérique & 4279 \multirow{6}{*}{\includegraphics[width=3.25cm]{@top_srcdir@/docs/mfront/Images/hayhurst.eps}}\\ 4280 \cline{1-4} 4281 \cline{1-4} 4282 Nombre de pas de temps &11 &11 &11& \\ 4283 \cline{1-4} 4284 Nombre d'itérations de \nom{Newton} &37 &36 &44& \\ 4285 \cline{1-4} 4286 Temps CPU &8mn11s &7mn58s &17mn43s& \\ 4287 \cline{1-4} 4288 Temps d'intégration de la loi de comportement &2mn26s &2mn21s &10mn51s& \\ 4289 \cline{1-4} 4290 Temps d'inversion de la matrice &5mn11s &5mn5s &6mn11s& \\ 4291 \hline 4292 \end{tabular} 4293 \caption{Résultat des test de fluage sur éprouvette entaillée $3D$, 4294 loi de \nom{Hayhurst}~\cite{proix_integration_2013}.} 4295 \label{tab:mfront:behaviours:hayhurst} 4296\end{table} 4297 4298\paragraph{Tests de performances} Plusieurs comparaisons avec les lois 4299implantées dans \aster{} ont été menées. Dans l'ensemble, les lois 4300générées par \mfront{} se sont avérées efficaces, autant que les lois 4301\aster{} et parfois meilleures. 4302 4303Un premier exemple est donnée par le 4304tableau~\ref{tab:mfront:behaviours:hayhurst} où l'on reporte les 4305résultats obtenus sur une éprouvette entaillée subissant un essai de 4306fluage. Le calcul est effectué en 3D en grandes déformations grâce aux 4307formalisme des déformations logarithmiques qui permet d'utiliser des 4308lois écrites en petites 4309déformations~\cite{bargellini_modelisation_2013,miehe_anisotropic_2002}. 4310 4311\begin{table}[htbp] 4312 \centering 4313 \begin{tabular}[htbp]{|>{\centering}m{2.cm}|>{\centering}m{2.cm}|>{\centering}m{2.cm}|m{1mm}m{8.cm}|} 4314 \cline{2-5} 4315 \multicolumn{1}{c|}{}& 4316 \mfront{} (RK42) & 4317 \aster{} & \vrule width 0mm height 2.75cm& 4318 \multirow{2}{*}{\includegraphics[width=7.cm]{@top_srcdir@/docs/mfront/Images/polybz.eps}}\\ 4319 \cline{1-3} 4320 Temps CPU &90s &136s & \vrule width 0mm height 2.75cm&\\ 4321 \hline 4322 \end{tabular} 4323 \caption{Comparaison des temps de calculs pour une loi issue de l'homogénéisation d'un poly-cristal constitué de $100$ grains.} 4324 \label{fig:mfront:behaviours:polybz} 4325\end{table} 4326 4327Un second test, basé sur une loi d'homogénéisation de lois de 4328plasticité cristalline, démontre les capacités de \mfront{} à traiter 4329un grand nombre de variables internes (plus de \(4\,200\) ici) en 4330conservant des performances numériques intéressantes, reportées au 4331tableau~\ref{fig:mfront:behaviours:polybz}. Le fichier \mfront{} fait 4332une centaine de lignes. 4333 4334\subsection{Perspectives} 4335 4336L'utilisation de \mfront{} hors de la plate-forme \pleiades{}, au DMN 4337et à EDF notamment, offre des possibilités de qualification de l'outil 4338extrêmement intéressantes et des voies de collaboration extrêmement 4339riches et enrichissantes. 4340 4341\subsection{Développement} 4342 4343Dans le cadre \pleiades{} différentes perspectives ont été 4344identifiées~: 4345\begin{itemize} 4346\item un meilleur support des contraintes planes~; 4347\item la possibilité d'écrire des lois de comportements poutre~; 4348\item l'amélioration de la robustesse de algorithmes implicites, qui 4349 peuvent diverger si l'estimation initiale est mauvaise. La méthode 4350 de \nom{Powell} semble particulièrement 4351 intéressante~\cite{chen_modification_1981}. 4352\end{itemize} 4353 4354Pour une utilisation dépassant le cadre combustible, différents 4355développements sont envisagés. Ces développements se résument 4356généralement à la possibilité d'utiliser des lois de comportement qui 4357ne soient pas limitées au cas volumique petites déformations. Ceci 4358inclut~: 4359\begin{itemize} 4360\item le cas des poutres qui utilisent des variables généralisées (on 4361 retrouve le besoin combustible)~; 4362\item les grandes transformations~; 4363\item le cas des modèles de zones cohésives qui travaillent en 4364 traction/saut de déplacement~; 4365\item les lois à gradients (de déformations ou à variables internes). 4366\end{itemize} 4367 4368À moyen terme, ces développements intéressent également nos 4369applications combustibles~: 4370\begin{itemize} 4371\item les grandes transformations semblent intéressantes dans des 4372 contextes accidentels (RIA, APRP)~; 4373\item les modèles de zones cohésives sont utilisés au DMN/SEMI pour la 4374 modélisation de la propagation d'une fissure par corrosion sous 4375 contrainte dans la gaine~; 4376\item les lois à gradients permettraient une meilleure représentation 4377 des phénomènes d'endommagement dans le cadre des travaux des 4378 thésards du SESC (modélisation de l'essai de flexion des barreaux 4379 \uod{}). 4380\end{itemize} 4381 4382La structure de \mfront{} fait que tous ces développements sont 4383informatiquement connexes et peuvent être regroupés dans une même 4384action. 4385 4386\clearpage 4387\newpage 4388\referencecea 4389\listetableaux 4390\listefigures 4391 4392\appendix 4393 4394\section{Résolution d'un problème 4395 mécanique quasi-statique par la méthode des éléments finis} 4396\label{sec:mfront:mechanical_equilibrium} 4397 4398Nous décrivons succinctement la résolution par la méthode des éléments 4399finis utilisées pour décrire l'évolution quasi-statique d'un système 4400mécanique. Ceci nous permet de bien préciser la place de la loi de 4401comportement et de faire apparaître la notion de matrice tangente 4402cohérente. 4403 4404La présentation faite est suffisamment générale pour notre propos mais 4405nous avons passé sous silence de nombreux points (transformations 4406finies, gestion du contact, etc...). Chaque code aux éléments finis 4407présentera sa propre variation, plus au moins 4408sophistiquée~\cite{besson_mecanique_2001,pascal_notice_2005,abbas_algorithme_2013}. 4409 4410\subsection{Discrétisation} 4411 4412La méthode des éléments finis repose sur une approximation de l'espace 4413des solutions par un espace de fonctions de dimension finie. 4414 4415\paragraph{Maillage de la discrétisation} Un espace 4416d'approximation adapté à de tels espaces est construit en approchant le 4417volume $\Omega$ d'intérêt par un volume $\Omega^{h}$ appelé le {\em 4418 maillage} obtenu par agrégation d'un ensemble de polygones convexes 4419appelés {\em mailles} ou {\em éléments}. Ces polygones définissent~: 4420\begin{itemize} 4421 \item un ensemble de points particuliers incluant en 4422 particulier leur sommet où sont estimées les inconnues~; 4423 \item des fonctions d'interpolation qui permettent des 4424 construire les solutions approchées. 4425\end{itemize} 4426 4427\paragraph{Notion de champ nodal} La discrétisation 4428éléments finis permet de définir la notion de {\em champ nodal}~: à 4429chaque n{\oe}ud est associé des valeurs qui permettent de construire une 4430approximation d'une fonction, dont la solution du problème mécanique, le 4431champ de déplacements. 4432 4433\subsection{Principe des travaux virtuels} 4434 4435La méthode présentée repose sur un découpage temporel. Connaissant le 4436champ de déplacement et l'état mécanique des matériaux, caractérisé 4437par des variables internes \(y_{i}\), à l'instant \(t\), la méthode 4438des éléments finis propose de rechercher sur une géométrie 4439discrétisée, un champ nodal \(\Delta\discret{\vec{u}}\) telle que la 4440fonction associée \(\Delta\vec{u}^{h}\) vérifie une approximation du 4441principe des travaux virtuels~: 4442\[ 4443\forall \vec{v}^{h}\; C.A.^{h},\quad 4444\underbrace{\int_{\Omega^{h}}\tsigma_{t+\Delta 4445 t}\paren{\Delta\tepsilonto,t,\Delta\, 4446 t}\colon\tepsilonto\paren{\vec{v}^{h}}\;\dtot V}_{\text{Travaux 4447 intérieurs}}=\underbrace{\int_{\Omega^{h}}\vec{f}_{t+\Delta 4448 t}.\vec{v}^{h}\;\dtot 4449 V+\int_{\partial\Omega^{h}_{\vec{T}}}\vec{T}_{t+\Delta 4450 t}.\vec{v}^{h}\;\dtot S}_{\text{Travaux extérieurs}} 4451\] 4452où nous avons noté \(\Delta\tepsilonto\) la déformation totale 4453associée à la fonction \(\Delta\vec{u}^{h}\) 4454\(\paren{\Delta\tepsilonto=\tepsilonto\paren{\Delta\vec{u}^{h}}}\). La 4455dépendance au \(t\) symbolise la dépendance de la réponse du matériau à 4456des variables externes (fluence, flux neutronique, etc...). L'espace 4457\(C.A.^{h}\) est l'ensemble des fonctions \(\vec{v}^{h}\) correspondant 4458aux champs nodaux vérifiant les conditions aux limites cinématiques. 4459L'espace \(C.A.^{h}\) étant fini, il existe deux champs nodaux 4460\(\forceintEF\paren{\Delta\discret{\vec{u}}}\) et \(\forceextEF\) tels 4461que~: 4462\[ 4463\begin{aligned} 4464 \forall \vec{v}^{h}\; C.A.^{h},\quad & 4465 \forceintEF\paren{\Delta\discret{\vec{u}}}.\champEF&=& 4466 \int_{\Omega^{h}}\tsigma_{t+\Delta t}\paren{\Delta\tepsilonto,\Delta\, 4467 t}\colon\tepsilonto\paren{\vec{v}}\;\dtot V &\\ 4468 &\forceextEF.\champEF&=& \int_{\Omega^{h}}\vec{f}_{t+\Delta 4469 t}.\vec{v}^{h}\;\dtot 4470 V+\int_{\partial\Omega^{h}_{\vec{T}}}\vec{T}_{t+\Delta 4471 t}.\vec{v}^{h}\;\dtot S & 4472\end{aligned} 4473\] 4474Les deux champs nodaux \(\forceintEF\paren{\Delta\discret{\vec{u}}}\) 4475et \(\forceextEF\) sont appelés respectivement les {\em forces nodales 4476 intérieures} et {\em extérieures}. Le principe des travaux virtuels 4477est alors équivalent à l'égalité des forces nodales intérieures et 4478extérieures~: 4479\begin{equation} 4480 \label{eq:bibliographie:equilibre_forces_interieures_forces_exterieures} 4481 \boxed{\forceintEF\paren{\Delta\discret{\vec{u}}}=\forceextEF} 4482\end{equation} 4483 4484\paragraph{Calcul des forces intérieures} Les forces 4485nodales intérieures peuvent être calculées à partir de la contribution 4486de chacun des éléments finis. La reconstruction du vecteur 4487\(\forceintEF\) à partir des contributions élémentaires 4488\(\forceintElem\) est l'étape d'{\em assemblage}. Sur chaque élément 4489fini, cette contribution élémentaire est calculée par intégration du 4490champ de contraintes~: 4491\[ 4492\forceintElem=\int_{V^{e}}\tsigma_{t+\Delta 4493 t}\paren{\Delta\,\tepsilonto,\Delta\, t}\colon\tenseur{B}\;\dtot V 4494\] 4495où \(V^{e}\) est le volume de l'élément fini et \(\tenseur{B}\) une 4496matrice propre à l'élément fini permettant de définir la déformation de 4497la fonction interpolée à partir des valeurs du champ nodal aux n{\oe}uds 4498de l'élément. La matrice \(\tenseur{B}\) est directement reliée aux 4499gradients des fonctions d'interpolation. 4500 4501\paragraph{Intégration numérique, points de 4502 \nom{Gauss}} Numériquement, l'intégrale 4503\(\displaystyle\int_{v^{e}}\tsigma_{t+\Delta t}\colon\tenseur{B}\;\dtot 4504V\) est évaluée par quadrature~: la fonction \(\tsigma_{t+\Delta 4505 t}\colon\tenseur{B}\) est évaluée en un certain nombre de points 4506choisis pour minimiser l'erreur commise. Ces points particuliers sont 4507les {\em points de \nom{Gauss}} de l'élément. La formule de quadrature 4508s'écrit alors~: 4509\begin{equation} 4510 \label{eq:bibliographie:quadrature_gauss} 4511 \forceintElem=\sum_{i=1}^{N^{G}} \paren{\tsigma_{t+\Delta 4512 t}\paren{\Delta\tepsilonto\paren{\vec{\eta}_{i}},\Delta\, t}\colon\tenseurq{B}\paren{\vec{\eta}_{i}}}w_{i} 4513\end{equation} 4514où \(N^{G}\) est le nombre de points de \nom{Gauss} de l'élément, 4515\(\vec{\eta}_{i}\) leurs coordonnées et \(w_{i}\) un poids associé au 4516\(i\)\textsuperscript{ième} point de \nom{Gauss}. Les conséquences de 4517cette formule sont importantes~: les contraintes et, par conséquent, les 4518variables d'états \(z_{i}\), n'ont besoin d'être connues qu'aux points 4519de \nom{Gauss}. 4520 4521L'étape d'{\em intégration locale}, c'est à dire la détermination 4522de la contrainte en fin de pas de temps, est donc effectuée aux points 4523de \nom{Gauss}. 4524 4525\paragraph{Notion de résidu} L'équation d'équilibre 4526discrétisée~\eqref{eq:bibliographie:equilibre_forces_interieures_forces_exterieures} 4527est écrite classiquement en introduisant le {\em résidu} 4528\(\residuEF\paren{\Delta\discret{\vec{u}}}\)~: 4529\begin{equation} 4530 \label{eq:bibliographie:equilibre_residu} 4531 \residuEF\paren{\Delta\discret{\vec{u}}}=\discret{\vec{O}}\quad\text{ 4532 avec 4533 }\quad\residuEF\paren{\Delta\discret{\vec{u}}}=\forceintEF\paren{\Delta\discret{\vec{u}}}-\forceextEF 4534\end{equation} 4535La résolution de l'équilibre de la structure est équivalente à la 4536recherche d'un champ nodal annulant le résidu. 4537 4538\subsection{Principe de la méthode de \nom{Newton-Raphson}} 4539 4540La {\em méthode de \nom{Newton-Raphson}} propose de rechercher de 4541manière itérative la solution à l'équation 4542\eqref{eq:bibliographie:equilibre_residu}. Une estimation 4543\(\Delta\discret{\vec{u}}^{n+1}\) de cette solution est construite à 4544partir de l'estimation \(\Delta\discret{\vec{u}}^{n}\) à l'étape 4545précédente. La relation de récurrence entre 4546\(\Delta\discret{\vec{u}}^{n+1}\) et \(\Delta\discret{\vec{u}}^{n}\) 4547s'obtient en écrivant le développement limité à l'ordre \(1\) du résidu 4548\(\residuEF\paren{\Delta\discret{\vec{u}}^{n+1}}\) en supposant que les 4549estimations \(\Delta\discret{\vec{u}}^{n+1}\) et 4550\(\Delta\discret{\vec{u}}^{n}\) proches~: 4551\[ 4552\residuEF\paren{\Delta\discret{\vec{u}}^{n+1}}\approx 4553\residuEF\paren{\Delta\discret{\vec{u}}^{n}}+\left.\deriv{\residuEF}{\Delta\discret{\vec{u}}}\right|_{\Delta\discret{\vec{u}}^{n}}.\paren{\Delta\discret{\vec{u}}^{n+1}-\Delta\discret{\vec{u}}^{n}} 4554\] 4555En écrivant que cette approximation est solution de l'équation 4556\eqref{eq:bibliographie:equilibre_residu} et en supposant 4557\(\left.\deriv{\residuEF}{\Delta\discret{\vec{u}}}\right|_{\Delta\discret{\vec{u}}^{n}}\) 4558inversible, nous obtenons la relation de récurrence 4559suivante~: 4560\begin{equation} 4561 \label{eq:newton_raphson_iteration} 4562 \Delta\discret{\vec{u}}^{n+1}=\Delta\discret{\vec{u}}^{n}-\paren{\left.\deriv{\residuEF}{\Delta\discret{\vec{u}}}\right|_{\Delta\discret{\vec{u}}^{n}}}^{-1}.\residuEF\paren{\Delta\discret{\vec{u}}^{n}} 4563\end{equation} 4564Nous sommes donc amenés à résoudre le problème 4565\eqref{eq:bibliographie:equilibre_residu} par une {\em succession de 4566 problèmes linéaires}. 4567 4568\paragraph{Matrice de raideur} Le calcul de la dérivée 4569\(\deriv{\residuEF}{\Delta\discret{\vec{u}}}\) se fait en supposant les 4570forces extérieures constantes au cours de la résolution~: 4571\[ 4572\left.\deriv{\residuEF}{\Delta\discret{\vec{u}}}\right|_{\Delta\discret{\vec{u}}^{n}}=\tenseurq{\mathbb{K}}\quad\text{ 4573 avec }\quad 4574\tenseurq{\mathbb{K}}=\left.\deriv{\forceintEF}{\Delta\discret{\vec{u}}}\right|_{\Delta\discret{\vec{u}}^{n}} 4575\] 4576La matrice \(\tenseurq{\mathbb{K}}\) est appelée {\em matrice de 4577 raideur} de la structure. 4578 4579\paragraph{Calcul de la matrice de raideur} La méthode 4580des éléments finis permet de calculer la matrice de raideur globale par 4581{\em assemblage} de {\em matrices de raideur élémentaires} 4582\(\tenseurq{\mathbb{K}}^{e}\). Pour chaque élément, l'expression de 4583cette matrice de raideur élémentaire est~: 4584\begin{equation} 4585 \label{eq:bibliographie:matrice_raideur_elementaire} 4586 \tenseurq{\mathbb{K}}^{e}=\sum_{i=1}^{N^{G}} 4587 \mbox{}^{t}\tenseurq{B}\paren{\vec{\eta}_{i}}\colon\deriv{\Delta\tsigma}{\Delta\tepsilonto}\paren{\vec{\eta}_{i}}\colon\tenseurq{B}\paren{\vec{\eta}_{i}}w_{i} 4588\end{equation} 4589où apparaît la {\em matrice tangente cohérente} 4590\(\deriv{\Delta\tsigma}{\Delta\tepsilonto}\). 4591 4592\paragraph{Matrice de raideur tangente cohérente} 4593L'utilisation de la matrice tangente cohérente ou de la matrice sécante 4594est la solution la plus performante en théorie car elle conduit à une 4595convergence quadratique de la méthode de \nom{Newton-Raphson}. Le coût 4596de la réactualisation de la matrice de raideur du système à chaque 4597itération peut cependant être important. 4598 4599 4600\clearpage 4601\newpage 4602\include{glossary} 4603 4604\clearpage 4605\newpage 4606\section{Principales opérations tensorielles} 4607\label{sec:oper-tens-dans} 4608 4609Nous décrivons dans ce paragraphe les opérations tensorielles fournies 4610par \TFEL{} pour les tenseurs d'ordre \(2\) et d'ordre \(4\). 4611 4612\subsection{Conventions de représentation des tenseurs} 4613 4614Les tenseurs d'ordre \(2\) symétriques peuvent être représentés par 4615des vecteurs et \og~tenseurs d'ordre \(4\)~\fg{}, peuvent être 4616représentés par des matrices. 4617 4618En \(3D\), les tenseurs d'ordre \(2\) symétriques ont \(6\) 4619composantes. Un tenseur \(\tenseur{a}\) est représenté par le vecteur 4620suivant~: 4621\[ 4622\left( 4623\begin{array}{c} 4624 \mathcal{A}_{0} \\ 4625 \mathcal{A}_{1} \\ 4626 \mathcal{A}_{2} \\ 4627 \mathcal{A}_{3} \\ 4628 \mathcal{A}_{4} \\ 4629 \mathcal{A}_{5} \\ 4630\end{array} 4631\right) 4632= 4633\left( 4634\begin{array}{c} 4635 a_{xx} \\ 4636 a_{yy} \\ 4637 a_{zz} \\ 4638 \sqrt{2}a_{xy} \\ 4639 \sqrt{2}a_{xz} \\ 4640 \sqrt{2}a_{yz} \\ 4641\end{array} 4642\right) 4643\] 4644 4645Le racine de \(2\) sur les termes extradiagonaux sont là pour assurer 4646que le produit doublement contracté de deux tenseurs d'ordre \(2\) 4647symétriques \(\tenseur{a}\) et \(\tenseur{b}\) est égal au produit 4648scalaire de leurs représentations vectorielles. 4649 4650\subsection{Opérations sur les tenseurs d'ordre 2} 4651 4652Pour les tenseurs d'ordre \(2\), \TFEL{} propose~: 4653\begin{itemize} 4654 \item la négation d'un tenseur~; 4655 \item la somme de deux tenseurs~; 4656 \item la différence de deux tenseurs~; 4657 \item la multiplication à droite ou à gauche d'un tenseur par 4658 un scalaire~; 4659 \item la division à droite d'un tenseur par un scalaire~; 4660 \item le produit tensoriel de deux tenseurs grâce à l'opérateur 4661 \texttt{\^}. Le résultat est un tenseur d'ordre \(4\) \og~tenseurs 4662 d'ordre \(4\)~\fg{} \(\tenseur{a}\otimes\tenseur{b}\) dont la 4663 représentation matricielle vérifie a pour élément 4664 \[ 4665 \tenseurq{c}=\tenseur{a}\otimes\tenseur{b} 4666 \quad\Rightarrow\quad\tenseurq{C}_{ij}=\mathcal{A}_{i}\,\mathcal{B}_{j} 4667 \] 4668 \item le produit contracté de deux tenseurs grâce à l'opérateur 4669 \texttt{|}. Comme indiqué plus haut, ce produit contracté est égal au 4670 produit scalaire de leurs représentations tensorielles~: 4671 \[ 4672 \tenseur{a}\,\colon\,\tenseur{b} = \sum\,\mathcal{A}_{i}\,\mathcal{B}_{i} 4673 \] 4674\end{itemize} 4675 4676En \cpp{}, ces opérations respectent l'ordre de priorité usuel sauf 4677pour les deux derniers qui peuvent nécessiter l'emploi de parenthèses. 4678 4679\subsection{Opérations sur les tenseurs d'ordre 4} 4680 4681Pour les tenseurs d'ordre \(4\), \TFEL{} propose~: 4682\begin{itemize} 4683 \item la négation d'un tenseur~; 4684 \item la somme de deux tenseurs~; 4685 \item la différence de deux tenseurs~; 4686 \item la multiplication à droite ou à gauche d'un tenseur par 4687 un scalaire~; 4688 \item la division à droite d'un tenseur par un scalaire~; 4689 \item la multiplication de deux tenseurs~; 4690 \item l'application d'un tenseur d'ordre \(4\) à un tenseur 4691 d'ordre \(2\) par l'opérateur de multiplication \texttt{*}. La 4692 représentation vectorielle du résultat de cette opération est égal à 4693 la multiplication vectorielle de la représentation matricielle du 4694 tenseur d'ordre \(4\) par la représentation vectorielle du tenseur 4695 d'ordre \(2\)~: 4696 \[ 4697 \tenseur{c}=\tenseurq{b}\,\colon\,\tenseur{a} \quad \Rightarrow \quad \mathcal{C}_{i} = \sum_{j} \mathcal{B}_{ij}A_{j} 4698 \] 4699 \item le produit contracté à gauche d'un tenseur d'ordre \(4\) 4700 par un tenseur d'ordre \(2\) grâce à l'opérateur \texttt{|}~: 4701 \[ 4702 \tenseur{c}=\tenseur{a}\,\colon\,\tenseurq{B} \quad \Rightarrow \quad \mathcal{C}_{i} = \sum_{j} \mathcal{A}_{j}\mathcal{B}_{ji} 4703 \] 4704\end{itemize} 4705 4706Ces opérations respectent l'ordre de priorité usuel sauf pour le 4707dernier qui peuvent nécessiter l'emploi de parenthèses. 4708 4709\clearpage 4710\newpage 4711\section{Fonctions utiles} 4712\label{sec:mfront:fcts} 4713 4714Cette section décrit quelques fonctions utiles à la création de lois de 4715comportement mécanique fournies par la librairie \TFEL{}. 4716 4717\subsection{Manipulation des tenseurs d'ordre $2$ symétriques} 4718 4719Le fichier d'entête 4720\headerb{TFEL/Math/stensor.hxx}{TFEL/\-Math/\-stensor.hxx}, inclut par 4721toutes les lois de comportement mécanique, définit la classe 4722\tfelb{stensor<N,T,Storage>}{stensor} représentant les tenseurs d'ordre 4723$2$ symétriques. 4724 4725\paragraph{La méthode \texttt{computeEigenValues}} La méthode 4726\tfelb{stensor<N,T,Storage>::computeEigenValues}{compute\-Eigen\-Values} 4727calcule les valeurs propres du tenseur d'ordre $2$ symétriques. Ses 4728valeurs propres doivent être passées en référence. 4729 4730\paragraph{La méthode \texttt{computeEigenVectors}} La méthode 4731\tfelb{stensor<N,T,Storage>::computeEigenVectors}{compute\-Eigen\-Vectors} 4732calcule les valeurs et vecteurs propres du tenseur d'ordre $2$ 4733symétriques. Son premier argument doit être un objet de type 4734\tfel{tvector}\footnote{Les objets de type \tfel{tvector} sont définis 4735 dans le fichier d'entête 4736 \headerb{TFEL/Math/tvector.hxx}{TFEL/\-Math/\-tvector.hxx}.} et 4737contiendra les différentes valeurs propres. Son second argument doit 4738être un objet de type \tfel{tmatrix} contenant les vecteurs 4739propres\footnote{Les objets de type \tfel{tmatrix} sont définis dans le 4740 fichier d'entête 4741 \headerb{TFEL/Math/tmatrix.hxx}{TFEL/\-Math/\-tmatrix.hxx}.}. Cet 4742objet peut être passé directement à la méthode 4743\tfelb{stensor<N,T,Storage>::changeBasis}{change\-Basis} . 4744 4745\paragraph{La méthode \texttt{changeBasis}} La méthode 4746\tfelb{stensor<N,T,Storage>::changeBasis}{change\-Basis} effectue le 4747changement de repère d'un tenseur d'ordre \(2\) symétrique. Ce 4748changement de repère est défini par un objet de type \tfel{tmatrix}. 4749 4750\paragraph{La fonction \texttt{trace}} La fonction \tfel{trace} renvoie 4751la trace d'un tenseur d'ordre $2$ symétrique. 4752 4753\paragraph{La fonction \texttt{sigmaeq}} La fonction \tfel{sigmaeq} 4754renvoie la contrainte équivalente au sens de \nom{Von Mises} d'un 4755tenseur d'ordre $2$ symétrique. 4756 4757\paragraph{La fonction \texttt{abs}} La fonction \tfel{abs} renvoie la 4758somme des valeurs absolues des composantes d'un tenseur d'ordre $2$ 4759symétrique, les termes extradiagonaux sont comptés une fois et sont 4760affectés d'un facteur \(\sqrt{2}\). 4761 4762\subsection{Calcul des coefficents de \nom{Lamé}} 4763 4764Le fichier d'entête 4765\headerb{TFEL/MaterialLaw/Lame.hxx}{TFEL/\-Material\-Law/\-Lame.hxx}, 4766qu'il est nécessaire d'inclure au niveau du fichier \mfront{} en 4767utilisant la directive \mkey{Includes}, définit différentes fonctions 4768utilitaires~: 4769\begin{itemize} 4770 \item \tfel{compute\-Lambda} permet de calculer le premier 4771 coefficent de \nom{Lamé}. Elle prend en argument le module 4772 d'\nom{Young} et le coefficient de \nom{Poisson}~; 4773 \item \tfel{compute\-Mu} permet de calculer le second coefficent de 4774 \nom{Lamé}, c'est à dire le module de cisaillement. Elle prend en 4775 argument le module d'\nom{Young} et le coefficient de \nom{Poisson} 4776\end{itemize} 4777 4778Ce fichier d'entête propose également une classe 4779\tfelb{computeElasticStiffness}{com\-pute\-Elastic\-Stiff\-ness}, 4780paramétré par la dimension d'espace et le type numérique utilisé qui 4781permet de calculer la matrice d'élasticité à partir des coefficients de 4782\nom{Lamé}. Cette classe propose en méthode statique nommée 4783\tfelb{computeElasticStiffness::exe}{exe} qui prend en arguments~: 4784\begin{itemize} 4785\item une référence un objet de type \tfelb{st2tost2<N,T>}{st2tost2\-<N,T>} 4786qui représente la matrice d'élasticité. 4787\item le premier coefficient de \nom{Lamé}~; 4788\item le second coefficient de \nom{Lamé}. 4789\end{itemize} 4790 4791\subsection{Calcul du tenseur de \nom{Hill}} 4792\label{sec:calcul-du-tenseur} 4793 4794La librairie {\tt TFEL} fournit la fonction \tfel{hillTensor}. Cette 4795fonction est déclarée dans le fichier d'entête 4796\headerb{TFEL/MaterialLaw/Hill.hxx}{TFEL/\-Material\-Law/\-Hill.hxx} 4797qu'il est nécessaire d'inclure au niveau du fichier \mfront{} en 4798utilisant la directive \mkey{Includes}. 4799 4800Cette fonction est paramétrée par la dimension d'espace, notée 4801\texttt{N} dans le fichier \mfront{}, et par le type numérique utilisé, 4802noté T. Ce type est appelé {\tt real} dans le fichier \mfront{}. Elle 4803prend en argument les \(6\) coefficients \(F\), \(G\), \(H\), \(L\), 4804\(M\) et \(N\) présentés aux paragraphes \ref{sec:critere-de-nomhill}. 4805 4806Elle retourne un objet de type \tfelb{st2tost2<N,T>}{st2tost2} qui 4807représente une forme linéaire sur les tenseurs d'ordre \(2\) symétriques 4808et qui se manipule comme une matrice\footnote{Les objets de type 4809 \tfelb{st2tost2<N,T>}{st2tost2} sont définis dans le fichier d'entête 4810 \headerb{TFEL/Math/st2tost2.hxx}{TFEL/\-Math/\-st2tost2.hxx}.}. 4811 4812\paragraph{Utilisation dans le cas des tubes} Avec les conventions 4813décrites au paragraphe~\ref{sec:conv-de-rang} 4814et~\ref{sec:trait-des-probl} et les identifications faites aux 4815paragraphes~\ref{sec:critere-de-nomhill} et~\ref{sec:trait-des-probl}, 4816cette fonction s'utilise ainsi~: 4817\begin{center} 4818 \begin{minipage}[htbp]{0.9\linewidth} 4819 \shorthandoff{:} \code{ \small \input{@abs_top_srcdir@/docs/mfront/mfront/hillTensor.tex} } 4820 \shorthandon{:} 4821 \end{minipage} 4822\end{center} 4823 4824% \clearpage 4825% \newpage 4826% \section{Amélioration de la robustesse des algorithmes de 4827% résolutions implicites} \label{sec:mfront:implicit:robustness} 4828 4829% Les méthodes de résolution des systèmes implicites nécessitent de 4830% choisir une estimation de la solution \(Y_{0}\) pour initier la 4831% recherche. Par défaut, \mfront{} utilisera le vecteur nul comme 4832% estimation initiale, mais l'utilisateur peut en spécifier une autre par 4833% la directive \mkey{Predictor}. 4834 4835% La convergence des algorithmes de résolutions implicites n'est garantie 4836% que si l'estimation initiale \(Y_{0}\) est suffisamment proche de 4837% la solution recherchée. Loin de la solution, l'algorithme peut 4838% éventuellement converger mais les premières itérations tendent 4839% généralement vers la solution assez lentement (phase de recherche)~: il 4840% est classique d'observer une convergence linéaire lors de la phase de 4841% recherche et une transition vers un ordre de convergence plus élevé 4842% proche de la solution. 4843 4844% Pour les lois de comportement fortement non linéaires, il est difficile 4845% de proposer une estimation \(Y_{0}\) garantissant la convergence, 4846% il peut donc être intéressant d'améliorer la robustesse des algorithmes. 4847 4848% \begin{table} 4849% \centering 4850% \begin{tabular}{|c|c|} 4851% \hline Méthode & Expression de \(s_{n}\) \\ 4852% \hline \hline Algorithme de \textsc{Newton-Raphson} & 4853% \(-J^{-1}\,.\,F\paren{Y_{n-1}}\) \\ 4854% \hline 4855% \begin{minipage}{7cm} 4856% Algorithme de \textsc{Newton-Raphson} et 4857% dérivation numérique 4858% \end{minipage} 4859% & \(-\underset{\sim}{J}^{-1}\,.\,F\paren{Y_{n-1}}\) \\ 4860% \hline Premier algorithme de \textsc{Broyden} & 4861% \begin{minipage}{5cm} 4862% \(-\underset{\sim}{J}_{n-1}^{-1}\,.\,F\paren{Y_{n-1}}\) 4863% où \(\underset{\sim}{J}_{n}\) est donné par 4864% l'équation~\eqref{eq:Broyden} 4865% \end{minipage} 4866% \\ 4867% \hline Second algorithme de \textsc{Broyden} & 4868% \begin{minipage}{5cm} 4869% \(-\underset{\sim}{J}_{n-1}^{-1}\,.\,F\paren{Y_{n-1}}\) 4870% où \(\underset{\sim}{J}_{n}^{-1}\) est donné par\(Y_{0}\) 4871% l'équation~\eqref{eq:Broyden2} 4872% \end{minipage} 4873% \\ 4874% \hline 4875% \end{tabular} 4876% \caption{Expression de $s_{n}$ pour les 4877% différents algorithmes de résolution de système d'équations non 4878% linéaires} \label{tab:sn} 4879% \end{table} 4880 4881% L'ensemble des algorithmes présentés jusqu'ici prennent la forme~: 4882% \[ 4883% Y_{n}=Y_{n-1}+s^{N}_{n} 4884% \] 4885% L'expression du pas \(s^{N}_{n}\) pour les différentes algorithmes 4886% présentés est donnée au tableau~\ref{tab:sn}. D'après la discussion 4887% précédente, ce pas \(s^{N}_{n}\) est optimal proche de la solution 4888% finale. 4889 4890% Il est intéressant de trouver une autre estimation de la solution, moins 4891% performante près de la solution mais plus robuste. Les méthodes 4892% précédentes donnant une approximation du jacobien, il peut être 4893% intéressant de substituer à la fonction \(F\) son application tangente 4894% et de choisir cette nouvelle estimation comme la solution du problème de 4895% minimisation suivant~: 4896% \[ 4897% \min_{s^{G}\,\in\,\mathcal{R}^{N}}\,\norm{F\paren{Y_{n-1}}+J\paren{Y_{n-1}}\,.\,s^{G}} 4898% \] 4899 4900% La solution de ce problème est donnée par\footnote{Pour le prouver, 4901% nous pouvons écrire que~: 4902% \[ 4903% \begin{array}{rcl} 4904% \norm{F\paren{Y_{n-1}}+J\paren{Y_{n-1}}\,.\,s^{G}}^{2} 4905% &=& {F}\paren{Y_{n-1}}\,.\,{F}\paren{Y_{n-1}}+2\,F\paren{Y_{n-1}}\,\mid\,J\paren{Y_{n-1}}\,.\,s^{G} \\ 4906% &&+\paren{J\paren{Y_{n-1}}\,.\,s^{G}}\,\mid\,\paren{J\paren{Y_{n-1}}\,.\,s^{G}} 4907% \end{array} 4908% \] 4909% Le gradient de cette expression est égal à~: 4910% \[ 4911% 2\,\mbox{}^{t}J\paren{Y_{n-1}}F\paren{Y_{n-1}}+\mbox{}^{t}J\paren{Y_{n-1}}\,J\paren{Y_{n-1}}\,.s^{G} 4912% \] 4913% }~: 4914% \[ 4915% \mbox{}^{t}J\paren{Y_{n-1}}\,J\paren{Y_{n-1}}\,.s^{G}=-\,\mbox{}^{t}J\paren{Y_{n-1}}\,.\,F\paren{Y_{n-1}} 4916% \] 4917% Ce pas est intéressant loin de la solution. 4918 4919% Les pas \(s^{N}_{n}\) et \(s_{n}^{G}\) sont combinés ainsi~: 4920% \[ 4921% s = a_{n} \,s^{G}_{n} + \paren{1-a_{n}}\,s_{n}^{N} 4922% \] 4923 4924\clearpage 4925\newpage 4926\section{Description de l'algorithme \nom{Runge-Kutta}-\castem{}} 4927\label{sec:algoRKcastem} 4928% $Y$ représente les vecteurs de variables internes et 4929 4930G représente une fonction a priori non linéaire et que nous supposerons 4931a minima continûment dérivable. On cherche à résoudre le système 4932différentiel suivant: 4933\begin{equation} 4934 \label{eq:systeme_diff:RK} 4935 \dot{Y}=G\paren{Y,t} 4936\end{equation} 4937 4938La résolution numérique de cette équation consiste à estimer, à partir 4939de la valeur \(\debutpas{Y}\) à un instant \(t\), la valeur 4940\(\finpas{Y}\) à un instant \(t+\Delta\, t\). 4941 4942Voici une description de l'algorithme \nom{Runge-Kutta}-\castem{}~: 4943\begin{itemize} 4944\item première estimation d'une solution à \(\Delta\, t /2\)~: 4945\begin{subequations} 4946\begin{align} 4947 \dot{Y}_1 &= G\paren{\debutpas{Y},t} \\ 4948 \demipas{Y_1} &= \debutpas{Y} + \Frac{\Delta\, t}{2} \dot{Y}_1 4949\end{align} 4950\end{subequations} 4951\item deuxième estimation d'une solution à \(\Delta\, t /2\)~: 4952\begin{subequations} 4953\begin{align} 4954 \dot{Y}_2 &= G\paren{Y_1,t} \\ 4955 \demipas{Y_{12}} &= \debutpas{Y} + \Frac{\Delta\, t}{2} \paren{\Frac{\dot{Y}_1 + \dot{Y}_2}{2}} 4956\end{align} 4957\end{subequations} 4958\item première estimation d'une solution à \(\Delta\, t\)~: 4959\begin{subequations} 4960\begin{align} 4961 \dot{Y}_3 &= G\paren{Y_{12},t} \\ 4962 \finpas{Y_{13}} &= \demipas{Y_{12}} + \Frac{\Delta\, t}{2} \dot{Y}_3 4963\end{align} 4964\end{subequations} 4965\item deuxième estimation d'une solution à \(\Delta\, t\)~: 4966\begin{subequations} 4967\begin{align} 4968 \dot{Y}_4 &= G\paren{Y_{13},t} \\ 4969\label{eq:estimation_yf} 4970\finpas{Y_f} &= \demipas{Y_{12}} + \Frac{\Delta\, 4971 t}{2} \paren{\Frac{\dot{Y}_3 + \dot{Y}_4}{2}} 4972\end{align} 4973\end{subequations} 4974\item troisième estimation d'une solution à \(\Delta\, t\)~: 4975\begin{subequations} 4976\begin{align} 4977 \dot{Y}_5 &= G\paren{Y_f,t} \\ 4978\label{eq:estimation_y5} 4979\finpas{Y_5} &= \debutpas{Y} + \Delta\, t \paren{\Frac{\dot{Y}_1 + 4980 4\dot{Y}_3 + \dot{Y}_5}{6}} 4981\end{align} 4982\end{subequations} 4983\end{itemize} 4984 4985Dans le cas où le calcul d'une de ces estimations ne pourraient être 4986calculés, un sous-découpage du pas de temps est effectué comme le 4987montre l'algorithme décrivant le sous-découpage du pas temps. Ceci est 4988illustré en figure~\ref{fig:algo_temps}. 4989 4990Une fois toutes ces estimations calculées, on compare les contraintes 4991obtenues lors des estimations \(\finpas{Y_f}\) 4992(\eqref{eq:estimation_yf}) et \(\finpas{Y_5}\) 4993(\eqref{eq:estimation_y5}), notées respectivement \(\finpas{\tsigma}\) 4994et \(\tsigma_5\). 4995 4996Pour cela, on se donne une erreur dont l'amplitude est basée sur la 4997valeur des contraintes en début de pas \(\debutpas{\tsigma}\) ou sur la 4998valeur du module d'\nom{Young} \(E\)~: 4999\[ 5000errabs = \left\{ 5001\begin{aligned} 5002 \sqrt{\debutpas{\tsigma}:\debutpas{\tsigma}}\,\times\,10^{-5} &\textrm{ si }\sqrt{\debutpas{\tsigma}:\debutpas{\tsigma}}>E\,\times\,10^{-3} \\ 5003 E\,\times\,10^{-8} &\textrm{ si }\sqrt{\debutpas{\tsigma}:\debutpas{\tsigma}}<E\,\times\,10^{-3} 5004\end{aligned} 5005\right. 5006\] 5007 5008On définit deux variables représentant 5009l'écart des contraintes \(ra\) et \(sqra\) définies de la manière 5010suivante : 5011\begin{align} 5012 ra &= 5013 \Frac{\sqrt{\paren{\finpas{\tsigma}-\tsigma_5}:\paren{\finpas{\tsigma}-\tsigma_5}}}{errabs}\\ 5014 sqra &= \sqrt{ra}\\ 5015\end{align} 5016 5017En testant ces deux paramètres avec des critères (fixés), on établit la 5018convergence ou la non-convergence du calcul ainsi que le nouvel 5019incrément de temps \(\Delta\, t\) qui sera utilisé. Dans le code de 5020calcul, cet incrément de temps \(\Delta\, t\) est noté \texttt{dt\_}. 5021L'algorithme déterminant le nouvel incrément de temps est présenté à la 5022figure~\ref{fig:algo_temps}. Dans cet algorithme, le temps est initial 5023est noté \texttt{t} tandis que le temps final est noté \texttt{dt}. La 5024variable \texttt{dtprec} est définie comme une valeur minimale du 5025sous-découpage \texttt{dt\_} en deçà de laquelle on renvoie une erreur. 5026 5027\begin{figure}[htbp] 5028\centering 5029\includegraphics[width=0.9\textwidth,height=22cm]{@top_srcdir@/docs/mfront/Images/Algo_temps.eps} 5030\caption{Description de l'algorithme pour déterminer le sous-découpage du pas de temps} 5031\label{fig:algo_temps} 5032\end{figure} 5033 5034\clearpage 5035\newpage 5036\include{annexe-orthotropie} 5037 5038\clearpage 5039\newpage 5040\section{Comparaisons numériques de différents 5041 algorithmes de résolution} 5042\label{QNR:ComparaisonNumeriques} 5043 5044\subsection{Loi utilisée pour la comparaison} 5045 5046Pour ces premières évaluations, nous avons utilisés un écoulement 5047viscoplastique de \nom{Norton}. Il s'agit d'une loi extrêmement simple 5048convergent en peu d'itérations. Le coût intrinsèque des différentes 5049méthodes est donc exacerbé. Cette loi présente deux variables internes 5050ont été retenues, la déformation élastique \(\tepsilonel\) et la 5051déformation viscoplastique cumulée \(p\). 5052 5053\subsection{Résultats obtenus} 5054 5055Nous comparons, dans le cas d'un essai en traction uniaxiale, l' 5056algorithme de \nom{Newton} à l'algorithme de \nom{Broyden}. 5057 5058Pour l'algorithme de \nom{Newton}, nous avons introduit une variante 5059dans laquelle le jacobien est estimé numériquement (avec une différence 5060finie d'ordre \(1\) ou d'ordre \(2\)) et réactualisé à différentes 5061périodes (tableaux~\ref{tab:QNR:1} et~\ref{tab:QNR:2}). 5062 5063Pour le premier algorithme de \nom{Broyden}, nous avons testé 5064différentes variantes suivantes (tableaux~\ref{tab:Broyden:1} 5065et~\ref{tab:Broyden:2})~: 5066\begin{itemize} 5067 \item que le jacobien initial était pris égal à l'identité ou 5068 évalué numériquement par une différence finie d'ordre \(2\)~; 5069 \item que des termes du jacobien étaient calculés 5070 explicitement. 5071\end{itemize} 5072 5073Pour le second algorithme de \nom{Broyden}, nous avons distingué 5074deux variantes suivant que le jacobien inital était pris égal à 5075l'identité ou évalué numériquement par une différence finie d'ordre 5076\(2\). 5077 5078\begin{figure}[htbp] 5079 \centering 5080 \includegraphics[height=0.8\linewidth,angle=-90]{@top_srcdir@/docs/mfront/Images/CompSeq.eps} 5081 \caption{Contraintes équivalentes obtenues respectivement par une 5082 résolution par un algorithme de \textsc{Newton-Raphson} ou par un 5083 algorithme de \textsc{Broyden}.} 5084 \label{fig:CompVMis} 5085\end{figure} 5086 5087Quand ils convergent, les algorithmes donnent toujours la même 5088solution, ce qui est illustré en figure~\ref{fig:CompVMis}. Les coûts 5089des différentes méthodes, en termes de nombre cycles 5090processeurs\footnote{Il s'agit d'une mesure fiable du coût d'une 5091 fonction, indépendante de la charge du système. Nous avons utilisé 5092 l'outil \valgrind{} pour avoir accès à cette mesure.}, sont fournis 5093dans les tableaux~\ref{tab:NR}, \ref{tab:QNR:1}, 5094\ref{tab:QNR:2}, \ref{tab:Broyden:1}, \ref{tab:Broyden:2} 5095et~\ref{tab:Broyden:3}. 5096 5097Le test effectué étant extrêmement frustre, il serait mal avisé d'être 5098conclusif. 5099 5100\begin{table} 5101 \centering 5102 \begin{tabular}[htbp]{|c|c|c|} 5103 \hline 5104 Variante & Nombre de cycles & 5105 \begin{minipage}{4cm} 5106 \begin{center} 5107 Ratio par rapport à \\ 5108 l'algorithme de \textsc{Newton} 5109 \end{center} 5110 \end{minipage} \\ 5111 \hline 5112 \hline 5113 \(J\) exact & \(4\,707\,335\) & 1\\ 5114 \hline 5115 \begin{minipage}[p]{5cm} 5116 \begin{center} 5117 \(J\) égal à l'identité 5118 \end{center} 5119 \end{minipage} 5120 & pas de convergence & \\ 5121 \hline 5122 \begin{minipage}[p]{5cm} 5123 \begin{center} 5124 \(\deriv{f_{\tepsilonel}}{\Delta\,\tepsilonel}\) et 5125 \(\deriv{f_{p}}{\Delta\,p}\) exacts 5126 \end{center} 5127 \end{minipage} & 5128 pas de convergence & \\ 5129 \hline 5130 \begin{minipage}[p]{5cm} 5131 \begin{center} 5132 \(\deriv{f_{p}}{\Delta\,\tepsilonel}\) et 5133 \(\deriv{f_{p}}{\Delta\,p}\) exacts, et 5134 \(\deriv{f_{\tepsilonel}}{\Delta\,\tepsilonel}\) égal à 5135 l'identité 5136 \end{center} 5137 \end{minipage} & 5138 pas de convergence & \\ 5139 \hline 5140 \begin{minipage}[p]{5cm} 5141 \begin{center} 5142 \(\deriv{f_{\tepsilonel}}{\Delta\,p}\) et 5143 \(\deriv{f_{p}}{\Delta\,p}\) exacts, et 5144 \(\deriv{f_{\tepsilonel}}{\Delta\,\tepsilonel}\) égal à 5145 l'identité 5146 \end{center} 5147 \end{minipage} & 5148 \(152\,721\,841\) & \(32.44\)\\ 5149 \hline 5150 \end{tabular} 5151 \caption{Temps calculs obtenus avec l'algorithme de 5152 \textsc{Newton-Raphson}.} 5153 \label{tab:NR} 5154\end{table} 5155 5156Le tableau~\ref{tab:NR} montre à quel point l'algorithme de \nom{Newton} 5157est sensible à la qualité de la matrice jacobienne. 5158 5159\begin{table} 5160 \centering 5161 \begin{tabular}[htbp]{|c|c|c|} 5162 \hline 5163 Variante & Nombre de cycles & 5164 \begin{minipage}{4cm} 5165 \begin{center} 5166 Ratio par rapport à \\ 5167 l'algorithme de \textsc{Newton} 5168 \end{center} 5169 \end{minipage} \\ 5170 \hline 5171 \hline 5172 \(\underset{\sim}{J}\) réactualisé à chaque itération & \(9\,900\,064\) & \(2,10\) \\ 5173 \hline 5174 \(\underset{\sim}{J}\) réactualisé toutes les \(2\) itérations & \(8\,674\,464\) & \(1,84\) \\ 5175 \hline 5176 \(\underset{\sim}{J}\) réactualisé toutes les \(3\) itérations & \(9\,159\,968\) & \(1,94\) \\ 5177 \hline 5178 \end{tabular} 5179 \caption{Temps calculs obtenus avec l'algorithme de 5180 quasi-\textsc{Newton} et un calcul numérique du jacobien par une 5181 différence finie (approximation d'ordre $1$).} 5182 \label{tab:QNR:1} 5183\end{table} 5184 5185\begin{table} 5186 \centering 5187 \begin{tabular}[htbp]{|c|c|c|} 5188 \hline 5189 Variante & Nombre de cycles & 5190 \begin{minipage}{4cm} 5191 \begin{center} 5192 Ratio par rapport à \\ 5193 l'algorithme de \textsc{Newton} 5194 \end{center} 5195 \end{minipage} \\ 5196 \hline 5197 \hline 5198 \(\underset{\sim}{J}\) réactualisé à chaque itération & \(14\,916\,316\) & \(3,16\) \\ 5199 \hline 5200 \(\underset{\sim}{J}\) réactualisé toutes les \(2\) itérations & \(11\,773\,880\) & \(2,5\) \\ 5201 \hline 5202 \(\underset{\sim}{J}\) réactualisé toutes les \(3\) itérations & \(13\,330\,216\) & \(2,83\) \\ 5203 \hline 5204 \end{tabular} 5205 \caption{Temps calculs obtenus avec l'algorithme de 5206 quasi-\textsc{Newton} et un calcul numérique du jacobien par une 5207 différence finie centrée (approximation d'ordre $2$).} 5208 \label{tab:QNR:2} 5209\end{table} 5210 5211Les tableaux~\ref{tab:QNR:1} et~\ref{tab:QNR:2} montrent que les 5212évalutions numériques des jacobiens sont assez coûteuses. On peut 5213également noté que si l'on gagne du temps à n'évaluer la matrice que 5214toutes les deux itérations, on en perd à ne l'évaluer toutes les trois 5215itérations car la convergence est dégradée. Il n'y a pas de gain à 5216utiliser une différence finie d'ordre \(2\). 5217 5218Il est intéressant de noter que les algorithmes de \nom{Broyden} 5219convergent toujours. 5220 5221Le cas où tous les termes de la jacobienne sont fournis permet de 5222comparer le coût intrinsèque plus élevé du premier algorithme de 5223\nom{Broyden} (tableau~\ref{tab:Broyden:2}). 5224 5225Si aucun terme du jacobien n'est fourni, le premier algorithme de 5226\nom{Broyden} peut être relativement efficace, à condition d'estimer 5227numériquement la jacobienne initiale (tableau~\ref{tab:Broyden:2}). 5228 5229De plus, il est intéressant de s'intéresser au terme 5230\(\deriv{f_{\tepsilonel}}{\Delta\,\tepsilonel}\) de la matrice 5231jacobienne. Il s'agit du terme le plus complexe (et le plus coûteux) à 5232calculer. Nous pouvons noter que si l'on ne calcule pas ce terme dans 5233l'algorithme de \nom{Broyden}, mais que l'on calcule les autres, 5234l'algorithme converge et est légèrement meilleur que l'algorithme de 5235\nom{Newton}. 5236 5237\begin{table} 5238 \centering 5239 \begin{tabular}[htbp]{|c|c|c|} 5240 \hline 5241 Variante & Nombre de cycles & 5242 \begin{minipage}{5cm} 5243 \begin{center} 5244 Ratio par rapport à \\ 5245 l'algorithme de \textsc{Newton} 5246 \end{center} 5247 \end{minipage} \\ 5248 \hline 5249 \hline 5250 Défaut & \(20\,197\,423\) & \(4,29\)\\ 5251 \hline 5252 \(J\) exact & \(6\,120\,862\) & \(1,3\)\\ 5253 \hline 5254 \(\deriv{f_{\tepsilonel}}{\Delta\,\tepsilonel}\) exact & 5255 \(36\,821\,766\) & \(7,82\)\\ 5256 \hline 5257 \(\deriv{f_{p}}{\Delta\,p}\) exact & 5258 \(33\,826\,368\) & \(7,186\)\\ 5259 \hline 5260 \(\deriv{f_{p}}{\Delta\,\tepsilonel}\) exact & 5261 \(19\,577\,698\) & \(4,15\)\\ 5262 \hline 5263 \(\deriv{f_{\tepsilonel}}{\Delta\,p}\) exact & 5264 \(12\,132\,956\) & \(2,58\)\\ 5265 \hline 5266 \(\deriv{f_{\tepsilonel}}{\Delta\,p}\) et \(\deriv{f_{p}}{\Delta\,\tepsilonel}\) exacts & 5267 \(4\,686\,228\) & \(0,995\) \\ 5268 \hline 5269 \end{tabular} 5270 \caption{Temps calculs obtenus avec le premier algorithme de 5271 \textsc{Broyden} et jacobien initial égal à l'identité.} 5272 \label{tab:Broyden:1} 5273\end{table} 5274 5275\begin{table} 5276 \centering 5277 \begin{tabular}[htbp]{|c|c|c|} 5278 \hline 5279 Variante & Nombre de cycles & 5280 \begin{minipage}{5cm} 5281 \begin{center} 5282 Ratio par rapport à \\ 5283 l'algorithme de \textsc{Newton} 5284 \end{center} 5285 \end{minipage} \\ 5286 \hline 5287 \hline 5288 Défaut & \(9\,535\,347\) & \(2,02\) \\ 5289 \hline 5290 \(\deriv{f_{\tepsilonel}}{\Delta\,p}\) et \(\deriv{f_{p}}{\Delta\,\tepsilonel}\) exacts & 5291 \(8\,178\,547\) & \(1,73\) \\ 5292 \hline 5293 \end{tabular} 5294 \caption{Temps calculs obtenus avec le premier algorithme de 5295 \textsc{Broyden} et jacobien initial approximé numériquement.} 5296 \label{tab:Broyden:2} 5297\end{table} 5298 5299\begin{table} 5300 \centering 5301 \begin{tabular}[htbp]{|c|c|c|} 5302 \hline 5303 Variante & Nombre de cycles & 5304 \begin{minipage}{5cm} 5305 \begin{center} 5306 Ratio par rapport à \\ 5307 l'algorithme de \textsc{Newton} 5308 \end{center} 5309 \end{minipage} \\ 5310 \hline 5311 \hline 5312 Défaut & \(19\,530\,077\) & \(4,15\)\\ 5313 \hline 5314 \end{tabular} 5315 \caption{Temps calculs obtenus avec le second algorithme de 5316 \textsc{Broyden} et jacobien initial égal à l'identité.} 5317 \label{tab:Broyden:3} 5318\end{table} 5319 5320\clearpage 5321\newpage 5322\include{InternalNames} 5323 5324%\clearpage 5325%\newpage 5326%\printindex{env}{Index des variables d'environnement} 5327 5328\clearpage 5329\newpage 5330\printindex{bheaders}{Index des fichiers d'entête fournis par la 5331 librairie \TFEL{}} 5332 5333\clearpage 5334\newpage 5335\printindex{btfel}{Index des classes, des méthodes et des fonctions 5336 fournies par la librairie \TFEL{}} 5337 5338\clearpage 5339\newpage 5340\printindex{bmkeys}{Index des directives} 5341 5342\end{document}