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}