1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2%%	Fichier	   : Chaboche
3%%	Auteur     : th202608@pleiades077.intra.cea.fr
4%%	Date       : 29 avril 2014
5%%	Répertoire : /home/th202608/Documents/notes/2014/TutorielMFront/
6%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7
8\section{Développement pas à pas d'une loi élasto-(visco)-plastique }
9\label{sec:chaboche}
10
11Nous allons suivre pas à pas le développement en \mfront{} d'une loi
12élasto-plastique, puis visco-plastique (modèle de
13J.L. \nom{Chaboche}).
14
15\subsection{Loi élasto-plastique de \nom{Chaboche}}
16
17Il s'agit d'une loi de comportement élasto-plastique à écrouissage
18isotrope et cinématique non linéaires. Les équations du modèle sont
19résumées brièvement~:
20\begin{itemize}
21\item relation contraintes déformations élastiques~:
22\[
23\tsigma=\tDq\,\colon\,\paren{\tepsilonto-\tepsilonp}
24\]
25\item Critère de plasticité~:
26 \[
27 F\paren{\tsigma ,\tenseur{X}} =(\sigma -\tenseur{X})_{\mathrm{eq}}-R(p)\le 0
28\]
29avec, pour tout tenseur \(\tenseur{A}\)~:
30\[
31A_{\text{eq}}=\sqrt{\Frac{3}{2}\tenseur{\tilde{A}}:\tenseur{\tilde{A}}}
32\] où
33$\tenseur{\tilde {A}}$ est le déviateur de \(\tenseur{A}\).
34\item l'évolution de la déformation plastique est gouvernée par une
35  loi d'écoulement normale au critère de plasticité~:
36  \[
37  \tdepsilonp=\dot{p}\,\tenseur{n}\quad\text{avec}\quad
38  \tenseur{n}=\Frac{3}{2}\Frac{\tilde {\tsigma}-{\tenseur{X}}}{\left(\sigma-\tenseur{X}\right)_{\text{eq}}}
39  \]
40\item ${\tenseur{X}}$ représente l'écrouissage cinématique non
41  linéaire. Il peut résulter d'une combinaison de plusieurs
42  écrouissages cinématiques
43  ${\tenseur{X}=\tenseur{X}_{1}+\tenseur{X}_{2}+...}$~;
44\item L'évolution de chaque variable d'écrouissage $\tenseur{X}_{i}$
45  est donnée par~:
46\[
47\tenseur{X}_{i}=\Frac{2}{3}C_{i}\talpha_{i}
48\]
49\[
50\tdalpha_{i}=\tdepsilonp-\gamma _{i}\,\talpha_{i}\,\dot{p}
51\]
52\item La fonction d'écrouissage isotrope \(R\paren{p}\) est définie par~:
53\[
54\begin{aligned}
55  R\paren{p}&=R^{\infty}+\paren{R^{0}-R^{\infty}}\exp\paren{-b\,p} \\
56\end{aligned}
57\]
58\end{itemize}
59
60Les propriétés matériau de ce modèle sont donc $E$, $\nu$, $R^{0}$,
61$R^{\infty }$, $b$, $C_{1}$, $C_{2}$, $\gamma_{1}$, $\gamma_{2}$.
62
63La discrétisation implicite (par une \(\theta\)-méthode) de ces
64équations conduit à résoudre un système d'équations où les inconnues sont~:
65\begin{itemize}
66\item le tenseur   \(\Delta\,\tepsilonel\)~;
67\item le scalaire, \(\Delta\,p\)~;
68\item les tenseurs \(\Delta\,\talpha_{i}\) (pour \(i=1,n\) variables cinématiques)~;
69\end{itemize}
70et où chaque équation d'évolution temporelle de la forme
71\(\dot{y}=f\paren{y,z,...}\) est remplacée par~:
72\[
73\Delta y-\Delta\,t\,f\paren{y+\theta \Delta y,z+\theta \Delta z,,...}=0
74\]
75Dans le cas de la plasticité, on n'écrit pas d'équation d'évolution de
76la variable \(p\), mais directement le respect du critère de
77plasticité.
78
79Deux cas se présentent. L'évolution peut être élastique. Il est
80possible de tester cela en calculant un tenseur de test
81\(\tsigma^{\textit{tr}}\) tel que~:
82\[
83\tsigma^{\textit{tr}}=\tenseur{D}\,\colon\,\paren{\bts{\tepsilonel}+\Delta\,\tepsilonto}
84\]
85
86Si le critère plastique évalué avec cette contrainte de test est négatif, c'est à dire si~:
87\[
88F^{el}\paren{\tsigma ,\tenseur{X}}=\paren{\tsigma^{\textit{tr}}-\bts{\tenseur{X}}}_{\mathrm{eq}}-R\paren{\bts{p}}<0
89\]
90alors la solution cherchée est triviale et donnée par~:
91\[
92\Delta\,\tepsilonp=0 \quad \Delta\, p=0 \quad \Delta\,\talpha_{i}=\tenseur{0}
93\]
94
95Sinon, il faut résoudre le système suivant~:
96\[
97F({{\sigma ,X}})=0 \quad\Leftrightarrow\quad
98\left\{
99\begin{aligned}
100&(\ets{\tsigma}-\ets{\tenseur{X}})_{\mathrm{eq}}-R(p(t+\Delta\,t))&=0 \\
101&\Delta\,\talpha_{i}-\Delta\,\tepsilonp+\gamma_{i}(\talpha_{i}+\theta \Delta\talpha_{i})\Delta\,p&=\tenseur{0}\\
102&\Delta\,\tepsilonel-\Delta\,\tepsilonto+\Delta\,\tepsilonp&=\tenseur{0}
103\end{aligned}
104\right.
105\]
106où $\Delta\,\tepsilonp=\Delta\, p\,\ets{\tenseur{n}}$.
107
108Dans le cas de 2 variables cinématiques, (le système est alors de
109taille \(6+1+2\times{}6=19\)), la \og~traduction~\fg{} de ces
110équations en \mfront{} est décrite ici pas à pas~:
111\begin{enumerate}
112\item choix de l'algorithme avec matrice jacobienne numérique dans un
113  premier temps.
114  \begin{flushleft}
115    \lstinputlisting[firstline=1,lastline=4]{@top_srcdir@/docs/tutorial/mfront/Chaboche.mfront}
116  \end{flushleft}
117  En plasticité, on choisit en général \( \theta = 1\) pour que le
118  critère soit vérifié en fin de pas de temps (à l'instant \(t_{i} \))
119\item définition des propriétés matériau (modifiables depuis le jeu de
120  commandes \mtest{} ou \aster{})~:
121  \begin{flushleft}
122    \lstinputlisting[firstline=6,lastline=14,firstnumber=6]{@top_srcdir@/docs/tutorial/mfront/Chaboche.mfront}
123  \end{flushleft}
124  Les appels à {\tt setGlossaryName} sont importants pour \castem{}
125  car ils permettent à \mfront{} de faire le lien entre les propriétés
126  matériau nécessaires à la loi et ceux définis par \castem{} pour ses
127  propres besoins.
128\item définition des variables internes (l'écriture ci-dessus utilise
129  des tableaux, ce qui permet de gérer facilement un nombre quelconque
130  de variables cinématiques. Ici on en choisit \(2\))~:
131  \begin{flushleft}
132    \lstinputlisting[firstline=16,lastline=17,firstnumber=16]{@top_srcdir@/docs/tutorial/mfront/Chaboche.mfront}
133  \end{flushleft}
134  De plus, il faut compter en tant que variable interne (donc inconnue
135  du problème à résoudre) le tenseur des déformations élastiques (ou
136  plutôt son incrément {\tt deel}). L'utilisation de {\tt deel }
137  plutôt que {\tt dsig } (utilisée habituellement dans {\tt
138    Code-Aster} permet d'obtenir un système bien conditionné et permet
139  de traiter sans précaution particulière le cas de propriétés
140  élastiques variables dans le temps.
141
142\item définition et initialisation des variables locales à
143  l'algorithme (l'initialisation est faite une seule fois avant
144  l'appel de l'algorithme implicite ce qui permet de gagner du temps
145  de calcul)~:
146  \begin{flushleft}
147    \lstinputlisting[firstline=19,lastline=35,firstnumber=19]{@top_srcdir@/docs/tutorial/mfront/Chaboche.mfront}
148  \end{flushleft}
149  On calcule dans cette section le critère \( F^{el} \), qui permet
150  d'éviter de lancer l'algorithme de \nom{Newton} si la solution reste
151  élastique.
152\item calcul des contraintes. À chaque itération de l'algorithme
153  implicite et après convergence, on calcule~:
154  \begin{flushleft}
155    \lstinputlisting[firstline=37,lastline=39,firstnumber=39]{@top_srcdir@/docs/tutorial/mfront/Chaboche.mfront}
156  \end{flushleft}
157\item Calcul des différents termes du système d'équations~:
158  \begin{flushleft}
159    \lstinputlisting[firstline=41,lastline=65,firstnumber=41]{@top_srcdir@/docs/tutorial/mfront/Chaboche.mfront}
160  \end{flushleft}
161  \begin{itemize}
162  \item la valeur de \(p\) est actualisée en \(t_{i}+\theta\Delta\,t\)
163    à la ligne \(45\), ce qui permet d'actualiser l'écrouissage
164    isotrope \(R\paren{p}\)~;
165  \item de même, pour les variables d'écrouissage cinématique
166    \(\alpha_{i}\) en ligne \(51\).  Ceci permet de calculer le
167    tenseur \((\ets{\tsigma}-\ets{\tenseur{X}})\) à la ligne \(52\)~;
168  \item la direction d'écoulement \(
169    \tenseur{n}=\Frac{3}{2}\Frac{\tilde
170      {\tsigma}-{\tenseur{X}}}{\left(\sigma-\tenseur{X}\right)_{\text{eq}}}
171    \)~;
172  \item la ligne \(56\) décrit simplement la décomposition additive
173    des déformations~;
174  \item la ligne \(57\) traduit le critère de plasticité (normalisé
175    par le module d'Young pour conserver un système d'équations
176    portant sur des grandeurs de la même dimension que les
177    déformations~;
178  \item les lignes \(58\) à \(60\) décrivent les évolutions des
179    variables cinématiques~:
180    \[
181    \Delta\,\talpha_{i}-\Delta p \left
182      (\tenseur{n} - \gamma_{i} \talpha_{i} \right ) =\tenseur{0}
183    \]
184  \item enfin la ligne \(63\) correspond au cas où l'incrément est
185    élastique.
186  \end{itemize}
187\item calcul de l'opérateur tangent cohérent~: il utilise directement
188  l'inverse de la matrice jacobienne~\cite{helfer_generateur_2013}~:
189  \begin{flushleft}
190    \lstinputlisting[firstline=67,lastline=79,firstnumber=67]{@top_srcdir@/docs/tutorial/mfront/Chaboche.mfront}
191  \end{flushleft}
192  La variable {\tt smt} permet de connaître le type d'opérateur
193  tangent demandé par le code appelant.
194\end{enumerate}
195
196
197Cette écriture avec \mfront{} et l'algorithme implicite (et matrice
198jacobienne numérique) permettent d'obtenir une résolution efficace
199(plus efficace que son équivalent avec l'algorithme explicite de
200\nom{Runge-Kutta}, qui s'écrit de façon similaire, en remplaçant
201\og~\texttt{~feel~}~\fg{}, \og~\texttt{fp}~\fg{}, par
202\og~\texttt{deel}~\fg{}, \og~\texttt{dp}~\fg{}, {\em etc.}).
203
204Avec cet exemple, on, peut déjà tester le développement sur un point
205matériel à l'aide de \mtest{}, puis sur un maillage éléments finis
206(par exemple avec \aster{}).
207
208\begin{figure}[!h]
209  \centering
210  \includegraphics[width=11cm,height=11cm]{@top_srcdir@/docs/tutorial/images/tutorielch12-img9.png}
211  \caption{Vérification de l'implantation de la loi élasto-plastique.}
212  \label{fig:mfront:tutorial:chaboche:check}
213\end{figure}
214
215Pour une sollicitation uniaxiale de 10 cycles en traction - compression, on
216obtient très rapidement (0,024s) le résultat donné en
217figure~\ref{fig:mfront:tutorial:chaboche:check}.
218
219Le fichier \mtest{} pour cet exemple est le
220suivant~:
221\begin{flushleft}
222  \lstinputlisting{@top_srcdir@/docs/tutorial/mtest/chaboche.mtest}
223\end{flushleft}
224
225\subsection{Loi élasto-viscoplastique de \nom{Chaboche}}
226
227Le modèle diffère peu du précédent, car seul le critère de plasticité~:
228$F({{\sigma ,X}})=(\tsigma -\tenseur{X})_{\mathrm{eq}}-R(p)\le 0$ est remplacé
229par une loi d'écoulement en puissance~:
230\[
231\dot{{p}}=\langle \Frac{F}{K}\rangle ^{m}
232\]
233où $\left\langle F\right\rangle $ désigne la partie positive de $F$
234définie ci-dessus, soit~:
235\[
236\left\langle F\right\rangle =\text{max}(0,F)
237\]
238
239Dans le fichier mfront, seule l'équation donnant l'évolution de
240$\Delta\,p$ change~:
241
242\texttt{fp \ \ \ = (seq\_-Rp\_)/young;}
243
244devient~:
245
246{\tt vp \ = pow(F*UNsurK,m)~;}
247
248{\tt fp -= vp*dt;}
249
250\texttt{UNsurK} et \texttt{m} ont bien sûr été ajoutés dans la
251définition des propriétés matériau de la loi~:
252\begin{flushleft}
253{\tt
254  @MaterialProperty real m; \newline
255  @MaterialProperty real UNsurK;
256}
257\end{flushleft}
258
259Un nouveau test effectué à l'aide de \mtest{} permet de montrer la
260capacité du modèle dans le cas d'un chargement cyclique (cycles en
261température en déformation), issu du test hsnv125 de \aster{}. La
262durée du calcul~est de 0,58s. Le fichier \mtest{} est le suivant~:
263\begin{flushleft}
264  \lstinputlisting{@top_srcdir@/docs/tutorial/mtest/viscochab.mtest}
265\end{flushleft}
266
267\begin{figure}[!h]
268  \centering
269  \includegraphics[width=11cm,height=10cm]{@top_srcdir@/docs/tutorial/images/tutorielch12-img10.png}
270  \caption{Vérification de l'implantation de la loi élasto-visco-plastique.}
271  \label{fig:mfront:tutorial:viscochaboche:check}
272\end{figure}
273
274La figure~\ref{fig:mfront:tutorial:viscochaboche:check} donne
275l'évolution de différentes variables d'intérêt au cours du test.
276
277\begin{figure}[!h]
278  \centering
279  \includegraphics[width=11cm,height=10cm]{@top_srcdir@/docs/tutorial/images/tutorielch12-img12.png}
280  \caption{test hsnv125 pour comparer la loi élasto-visco-plastique à
281    celle de \aster.}
282  \label{fig:mfront:tutorial:hsnv125:check}
283\end{figure}
284
285
286La figure~\ref{fig:mfront:tutorial:hsnv125:check} montre que la
287comparaison de la loi développée en \mfront avec son équivalent dans
288\aster{} fournit des résultats identiques.
289
290\subsection{Traitement des erreurs, déverminage}
291
292Et si, au cours du développement, on rencontre des erreurs, que faire~?
293
294Lors de la compilation avec \mfront{}, les erreurs sont la
295plupart du temps explicites~:
296  \begin{itemize}
297  \item {\tt Viscochab.mfront:94: error: {\textquoteleft}F' was not
298    declared in this scope}
299\item {\tt Viscochab.mfront:74: warning: unused variable
300    {\textquoteleft}Rp\_'}
301\item {\tt Viscochab.mfront:91: error: expected {\textquoteleft},' or
302    {\textquoteleft};' before {\textquoteleft}if' \ (oubli d'un
303    \og~;~\fg{} en fin de ligne}
304\item etc...
305\end{itemize}
306
307Lors de l'exécution, il est possible de localiser les erreurs
308numériques ou autres via les options de compilation~:
309\begin{itemize}
310\item le plus simple est de compiler avec {\tt -{}-debug} (détails sur
311  l'intégration)~:\newline \texttt{mfront -{}-obuild -{}-interface=aster
312    -{}-debug chaboche.mfront}
313\item un \og~classique~\fg{} du développement, les impressions
314  locales~:
315  \begin{itemize}
316  \item pour imprimer une variable locale, il suffit d'écrire~:
317    \begin{flushleft}
318      {\tt cout {\textless}{\textless} {\textquotedbl} seq calculé
319      {\textquotedbl} {\textless}{\textless} seq {\textless}{\textless} endl;}
320    \end{flushleft}
321  \item pour afficher l'état courant de
322    l'intégration~:
323    \begin{flushleft}
324      {\tt cout {\textless}{\textless} *this {\textless}{\textless} endl~;}
325    \end{flushleft}
326  \end{itemize}
327\item pour trouver l'endroit où une erreur d'exécution se produit, on
328  peut compiler en mode debug~: \newline
329  \texttt{\textbf{CXXFLAGS='-g'}}\texttt{ mfront -{}-obuild
330    -{}-interface=aster chaboche.mfront}
331\item enfin, dans un calcul \aster, on peut générer des fichiers mtest
332  en cas d'échec d'intégration~:
333  \newline
334  \texttt{mfront -{}-obuild
335    -{}-interface=aster -{}-@Aster\-Generate\-MTest\-File\-On\-Fail\-ure=\-true
336    cha\-boche\-.mfront}
337\end{itemize}
338
339\subsection{Zoom sur les performances}
340
341En peu de lignes, nous avons construit un modèle
342élasto-visco-plastique qui fournit de bons résultats. Ceci montre la
343souplesse de \mfront{}. Mais qu'en est-il des performances ? De
344nombreux benchmarks ont été effectués~\cite{proix_integration_2013},
345mais on peut examiner ce qu'il en est sur le comportement que nous
346venons de développer~:
347\begin{itemize}
348\item le test prend 0,578s avec \mtest{}~;
349\item dans \aster{}, la résolution sur un point matériel avec le
350  comportement \mfront{} est moins rapide qu'avec \mtest{}~: 2,03s
351  (car le temps cpu fixe relatif à l'environnnement d'exécution est de
352  l'ordre de 1s).
353\item toujours dans \aster{}, la résolution avec le comportement
354  VISC\_CIN2\_CHAB prend 1.41s, ce qui est logique puisque
355  l'intégration du comportement résout (par une méthode de type
356  \og~sécante~\fg{}) une seule équation au lieu de 19 pour
357  l'implantation proposée ici.
358\item si maintenant on utilise le comportement VISCOCHAB dans
359  \aster{}, pour lequel la résolution est similaire à celle de
360  \mfront{}, sur un système de 21 équations, la résolution échoue en
361  implicite.
362En explicite (méthode de Runge-Kutta d'ordre 2),
363le temps CPU pour ce test est d'environ
364  3mn.
365
366\end{itemize}
367
368La convergence avec mtest est très rapide, par exemple, au dernier pas
369de temps~:
370\begin{flushleft}
371  {\tt
372    iteration 1 : 0.00439197 94.3891\\
373    iteration 2 : 0.00196436 67.3256\\
374    iteration 3 : 0.000240731 3.14792\\
375    iteration 4 : 2.22909e-06 0.0282276\\
376    iteration 5 : 1.88601e-10 0.000232322\\
377    iteration 6 : 5.82316e-15 1.49916e-08\\
378    convergence, after 6 iterations, order 1.1075\\
379  }
380\end{flushleft}
381
382On peut constater que les résidus au cours des itérations montrent une
383très bonne convergence. La matrice tangente cohérente est donc
384précise.
385
386\paragraph{Remarque} Il est possible dans \mfront{} d'intégrer de
387façon encore plus efficace des comportements élasto-visco-plastiques à
388écoulement normal (comportements standard généralisés). Ici le
389comportement est non standard, et l'écriture est suffisamment simple
390pour permettre de réaliser facilement des modifications du modèle
391tout en restant efficace.
392
393\subsection{Ajout de la matrice jacobienne}
394\hypertarget{RefHeading8039105070066}{}{
395
396  Les essais précédents montrent la souplesse de l'intégration d'une
397  loi de comportement à l'aide de \mfront{}~: il suffit de décrire les
398  équations du système à intégrer. La matrice jacobienne, nécessaire à
399  la résolution de ce système par la méthode de Newton, est estimée
400  par perturbation, ce qui s'avère en pratique de bonne qualité, mais
401  prend un temps machine plus important qu'une matrice directement
402  programmée.}
403
404Pour illustrer cela, nous allons introduire la matrice jacobienne dans
405le comportement précédent. Il faut donc supprimer (ou commenter //) la
406ligne~:
407
408{// @Algorithm NewtonRaphson\_NumericalJacobian;}
409
410La matrice jacobienne est composée des différentes dérivées croisées de
411chaque équation \(f_{x}\) par rapport à chaque inconnue \(dy\). Par
412convention, la dérivée correspondante se nommera {\tt dfx\_ddy}. De
413plus, la matrice jacobienne est initialisée à l'identité.
414
415Listons les différentes dérivées à calculer~:
416
417 $\text{dfeel\_deel}=\Frac{\partial }{\partial \Delta
418\tepsilonel}\left(\Delta
419\tepsilonel+\Delta\,{\varepsilon
420}^{p}-\Delta\,{\varepsilon
421}\right)={\tenseurq{I}}+\Delta\,p\Frac{\partial
422\tenseur{n}}{\partial \Delta\,\tepsilonel}~~$
423{avec} \ ~ ~${\tilde
424{I}}_{\mathit{ijkl}}=\Frac{1}{2}(\delta _{\mathit{ik}}\delta
425_{\mathit{jl}}+\delta _{\mathit{il}}\delta _{\mathit{jk}})$
426
427 $\text{dfeel\_ddp}=\tenseur{n}+\Delta\,p\Frac{\partial
428\tenseur{n}}{\partial \Delta\,p}$ \ \
429
430 $\text{dfeel\_dda1}=\Delta
431p\Frac{\partial \tenseur{n}}{\partial \Delta\,\alpha _{1}}$\ \
432
433$\text{dfeel\_dda2}=\Delta\,p\Frac{\partial \tenseur{n}}{\partial
434\Delta\,\alpha _{2}}$
435
436 $\text{dfp\_ddp}=1+\Delta\,t\Frac{m}{K}\left\langle
437\Frac{F}{K}\right\rangle ^{m-1}\Frac{\partial R}{\partial \Delta\,p}$
438\ \
439
440$\text{dfp\_dda1}=-\Delta\,t\Frac{m}{K}\left\langle
441\Frac{F}{K}\right\rangle ^{m-1}\Frac{\partial (\sigma
442-X)_{\mathrm{eq}}}{\partial \Delta\,\alpha _{1}}$
443
444% \begin{equation*}
445$\text{dfp\_ddeel}=-\Delta\,t\Frac{m}{K}\left\langle
446\Frac{F}{K}\right\rangle ^{m-1}\Frac{\partial (\sigma
447-X)_{\mathrm{eq}}}{\partial \Delta\,\tepsilonel}$
448% \end{equation*}
449
450 $\text{dfa1\_dda1}={\tenseurq{I}}-\Delta\,p\Frac{\partial
451\tenseur{n}}{\partial \Delta\,\alpha _{1}}+\Delta\,p\gamma
452_{1}\theta {\tenseurq{I}}$ \ \
453
454$\text{dfa1\_dda2}=-\Delta
455p\Frac{\partial \tenseur{n}}{\partial \Delta\,\alpha _{2}}$
456
457 $\text{dfa2\_dda2}={\tenseurq{I}}-\Delta\,p\Frac{\partial
458\tenseur{n}}{\partial \Delta\,\alpha _{2}}+\Delta\,p\gamma
459_{2}\theta {\tenseurq{I}}$ \ \
460
461$\text{dfa2\_dda1}=-\Delta
462p\Frac{\partial \tenseur{n}}{\partial \Delta\,\alpha _{1}}$
463
464$\text{dfa1\_ddeel}=\text{dfa2\_ddeel}=-\Delta\,p\Frac{\partial
465  \tenseur{n}}{\partial \Delta\,\varepsilon ^{e}}$ \ \
466
467$\text{dfa1\_ddp}=-\tenseur{n}-\Delta\,p\Frac{\partial \tenseur{n}}{\partial
468  \Delta\,p}+\left(\gamma _{1}+\Delta p\Frac{\partial \gamma
469    _{1}}{\partial \Delta p}\right)\talpha_{1}$
470
471Les dérivées de la normale  $\tenseur{n}$ peuvent être
472calculées de la façon suivante~:
473\[
474\Frac{\partial \tenseur{n}}{\partial \Delta \tepsilonel}=
475\Frac{2\,\mu\,\theta}{(\tsigma -\tenseur{X})_{\mathrm{eq}}}
476\left(\tenseurq{M}-\tenseur{n}\otimes\tenseur{n}\right)
477\quad\quad
478\Frac{\partial \tenseur{n}}{\partial \Delta\,{\alpha }_{1}}
479=\Frac{-2\,C_{1}\,\theta }{3\,(\tsigma-\tenseur{X})_{\mathrm{eq}}}
480\left(\tenseurq{M}-\tenseur{n}\otimes\tenseur{n}\right)
481\]
482
483Le tenseur $\tenseurq{M}$ a été utilisé pour simplifier les
484expressions~:
485$\tenseurq{M}=\Frac{3}{2}{\tenseurq{I}}-\Frac{1}{2}\tenseur{I}\otimes
486\tenseur{I}$
487
488Ces expressions peuvent être écrites directement~dans le fichier
489\mfront{}~:
490\begin{flushleft}
491  \lstinputlisting{@top_srcdir@/docs/tutorial/mfront/viscochab2.mfront}
492\end{flushleft}
493
494On constate donc que la seule difficulté consiste à calculer les
495expressions analytiques de ces dérivées à la main ! Une fois écrite
496cette matrice jacobienne, on peut vérifier sa précision en la
497comparant à la matrice jacobiennne numérique~:
498\begin{flushleft}
499  \lstinputlisting[numbers=none]{@top_srcdir@/docs/tutorial/mfront/viscochab3.mfront}
500\end{flushleft}
501
502Ces instructions peuvent être ajoutées dans le fichier \mfront{} , ou
503mieux, sur la ligne de commande à la compilation (ce qui évite de
504\og~polluer~\fg{} le fichier mfront)~:
505\begin{flushleft}
506  {\tt
507    mfront -{}-obuild -{}-@CompareToNumericalJacobian=true -{}-@JacobianComparisonCriterium=1.e-6 chaboche.mfront
508  }
509\end{flushleft}
510
511On mesure ensuite son efficacité sur les tests. Le test précédent
512prend cette fois \(0,43s\) (au lieu de \(0,578\) avec matrice
513jacobienne numérique). Sur un point matériel, cela est sans conséquence, mais
514le gain peut être imporant dans un calcul de structure.
515
516Une fois que le comportement développé à l'aide de \mfront{} est
517validé sur point matériel, avec \mtest{}, et que la matrice jacobienne
518est correcte, il peut ensuite être utilisé dans des calculs de
519structure, aux grandes déformations (par exemple en utilisant {\tt
520  GDEF\_LOG} dans \aster{} ou d'autres codes). Les benchmarks
521effectués montrent l'efficacité de ce type d'intégration (même pour
522des comportements complexes, par exemple en plasticité cristalline,
523cf.~\cite{proix_integration_2013}).
524
525\subsection{Ajout de la non radialité et de la mémoire d'écrouissage}
526\hypertarget{RefHeading23861511383590}{}
527
528Un des avantages de l'écriture très compacte des lois de comportement
529avec \mfront{} réside dans la facilité d'intervention (amélioration,
530développement, maintenance) dans le fichier \mfront{}.
531
532Si, par exemple, on souhaite ajouter des effets de non-radialité au
533comportement précédent (ici, pour simplifier l'exposé, avec matrice
534jacobienne numérique), il faut modifier légèrement l'évolution de
535l'écrouissage cinématique~:
536\[
537{{\tdalpha}}_{i}={{\dot{\varepsilon }}}^{p}-\gamma _{i}{\alpha}_{i}\dot{p}
538\]
539devient~:
540\[
541\dot{\talpha}_{i}={\dot{\varepsilon
542  }}^{p}-\gamma _{i}\left[\delta _{i}\talpha_{i}+(1-\delta
543  _{i})(\talpha_{i}:{n}){n}\right]\dot{p}
544\]
545où $\delta _{i}$ sont des coefficients compris entre 0 et 1 (1 revient
546à annihiler l'effet de non-radialité).
547
548Qu'est-ce que l'effet de non-radialité~? Il se traduit par un
549écrouissage supplémentaire lors de chargements cycliques où les
550composantes du tenseur des contraintes en un point ne sont pas
551proportionnelles. Pour illustrer ce phénomène l'essai de
552traction-torsion permet de contrôler l'aspect non-radial et de mettre
553en évidence le sur-écrouissage dans le cas où la traction et la
554torsion sont déphasées~\cite{fatemi_2011}.
555
556La discrétisation implicite donne pour cette équation~:
557\begin{equation*}
558\text{fa}_{i}=\Delta\,\alpha _{i}-\Delta\,{\varepsilon
559}^{p}+\gamma _{i}(p+\theta \Delta\,p)\left[\delta
560_{i}(\talpha_{i}+\theta \Delta\,{\alpha
561}_{i})+(1-\delta _{i})\left((\talpha_{i}+\theta \Delta
562{\alpha}_{i}):{n}\right){n}\right]\Delta\,p=0
563\end{equation*}
564
565ce qui modifie peu de choses dans le fichier \mfront{}~:
566\begin{enumerate}
567\item au début du fichier, la déclaration des propriétés matériau
568  supplémentaires~:
569  \begin{flushleft}
570    \lstinputlisting[firstline=21,lastline=22,firstnumber=21]{@top_srcdir@/docs/tutorial/mfront/ViscoMemoNrad.mfront}
571  \end{flushleft}
572\item et dans l'intégration~:
573  \begin{flushleft}
574    \lstinputlisting[firstline=86,lastline=88,firstnumber=86]{@top_srcdir@/docs/tutorial/mfront/ViscoMemoNrad.mfront}
575  \end{flushleft}
576\end{enumerate}
577
578On peut voir l'effet de non-radialité par exemple sur un test de
579traction-torsion où les déformations axiales et celles de cisaillement
580suivent un trajet en étoile
581(cf. figure~\ref{fig:mfront:tutorial:etoile:check}). Chaque branche
582correspond à un aller -retour dans le diagramme gamma-epsilon.
583
584\begin{figure}[!h]
585  \centering
586  \includegraphics[width=11cm,height=10cm]{@top_srcdir@/docs/tutorial/images/tutorielch12-img13.png}
587  \caption{chargement en étoile en traction-torsion.}
588  \label{fig:mfront:tutorial:etoile:check}
589\end{figure}
590
591\begin{figure}[!h]
592  \centering
593  \includegraphics[width=11cm,height=10cm]{@top_srcdir@/docs/tutorial/images/tutorielch12-img14.png}
594  \caption{simulation du chargement en étoile - modèles avec et sans non-radialité}
595  \label{fig:mfront:tutorial:numetoile:check}
596\end{figure}
597
598La réponse obtenue avec un modèle sans effet de non-radialité (courbe
599verte sur la figure~~\ref{fig:mfront:tutorial:numetoile:check}) est
600très différente de celle obtenue avec le modèle qui tient compte de
601cet effet (courbes rouge et bleue, superposées).
602
603De même, l'ajout d'un effet de mémoire d'écrouissage ne pose pas de
604problème. Il est important de prendre en compte cet effet, lié à la
605plus grande amplitude de déformation plastique, pour des chargements
606cycliques. Cela revient à modifier la définition de l'écrouissage
607isotrope~: la fonction \(R\paren{p}\) n'est plus connue explicitement,
608mais par l'intermédiaire du système d'équations~:
609\[
610R(p)=R_{{0}}+\bts{R}+\Delta\,R \quad\text{ avec }\quad \Delta\, R=b\paren{Q-R}\,\Delta\,p
611\]
612et
613\[
614Q=Q_{0}{\text{}}{}+\paren{Q_{{m}}-Q_{{0}}}\paren{1-e^{{-2\mu
615    \paren{\bts{q}+{\Delta\,q}}}}}
616\]
617
618On introduit donc une variable interne supplémentaire \(q\),
619déterminée par le critère~:
620\[
621f\left(\tepsilonp,{\txi },q\right)=\Frac{2}{3}\paren{\tepsilonp-\txi}_{\mathrm{eq}}-q=\Frac{2}{3}\sqrt{\Frac{3}{2}\paren{\tepsilonp-\txi}\,\colon\,\paren{\tepsilonp-\txi}}-q\le 0
622\]
623ce qui correspond à un domaine convexe dans l'espace des déformations
624plastiques de centre $\txi$ et de rayon $q$. L'évolution de ce centre
625est donné par la loi de normalité~:
626\[
627\Delta\,{\txi}=\Frac{\left(1-\eta \right)}{\eta}\,\Delta\, q\,\tenseur{n}^{\star{}}\quad\text{avec}\quad
628\tenseur{n}^{\star{}}=\Frac{3}{2}\Frac{\tepsilonp-\txi}{\paren{\tepsilonp-\txi}_{\mathrm{eq}}}
629\]
630
631Introduisons ces équations dans notre comportement \mfront{}~:
632\begin{enumerate}
633\item il faut ajouter les variables internes $\txi $ et $q$~:
634  \begin{flushleft}
635    \lstinputlisting[firstline=44,lastline=45,firstnumber=44]{@top_srcdir@/docs/tutorial/mfront/ViscoMemoNrad.mfront}
636  \end{flushleft}
637\item nous aurons besoin de mémoriser la valeur de l'écrouissage
638  isotrope $R$. Mais il n'est pas nécessaire de définir $R$ en tant
639  que variable interne car ce n'est pas vraiment une inconnue du
640  système d'équations ($\Delta\,R$ peut être déterminé explicitement à
641  partir de $\Delta p$ et $\Delta\,q$).  On choisit donc de la définir
642  comme variable auxiliaire, actualisée après convergence de
643  l'algorithme d'intégration implicite~:
644  \begin{flushleft}
645    \lstinputlisting[firstline=47,lastline=47,firstnumber=47]{@top_srcdir@/docs/tutorial/mfront/ViscoMemoNrad.mfront}
646  \end{flushleft}
647  En fin d'intégration, on trouvera donc~:
648  \begin{flushleft}
649    \lstinputlisting[firstline=106,lastline=112,firstnumber=106]{@top_srcdir@/docs/tutorial/mfront/ViscoMemoNrad.mfront}
650  \end{flushleft}
651\item il reste à ajouter les équations (\texttt{fq} et \texttt{fksi})
652  relatives à l'effet de mémoire~:
653  \begin{flushleft}
654    \lstinputlisting[firstline=102,lastline=112,firstnumber=102]{@top_srcdir@/docs/tutorial/mfront/ViscoMemoNrad.mfront}
655  \end{flushleft}
656\item Et il reste une petite modification sur le calcul du critère de
657  plasticité, puisque $R(p)$ doit être maintenant déterminé à partir
658  de $\Delta\,p$ {et} $\Delta q$~:
659  \begin{flushleft}
660    \lstinputlisting[firstline=76,lastline=78,firstnumber=76]{@top_srcdir@/docs/tutorial/mfront/ViscoMemoNrad.mfront}
661  \end{flushleft}
662\end{enumerate}
663
664\begin{figure}[!h]
665  \centering
666  \includegraphics[width=11cm,height=10cm]{@top_srcdir@/docs/tutorial/images/tutorielch12-img16.png}
667  \caption{chargement en étoile - modèles avec et sans mémoire-sigma-xy --- sigma-xx}
668  \label{fig:mfront:tutorial:memo1:check}
669\end{figure}
670
671\begin{figure}[!h]
672  \centering
673  \includegraphics[width=11cm,height=10cm]{@top_srcdir@/docs/tutorial/images/tutorielch12-img17.png}
674  \caption{chargement en étoile - modèles avec et sans mémoire- sigma-xx -- temps}
675  \label{fig:mfront:tutorial:memo2:check}
676\end{figure}
677
678On obtient donc rapidement un modèle capable de représenter très
679correctement des essais de traction-torsion sur plusieurs cycles
680~\ref{fig:mfront:tutorial:memo1:check}
681et~\ref{fig:mfront:tutorial:memo2:check} (courbes rouge~: \aster{} et
682bleue~: \mfront{} confondues), alors que le modèle initial (sans
683mémoire ni effet de non radialité, courbe verte) est loin de la
684solution.
685
686Il est possible, après avoir vérifié que le modèle convient, et
687fournit la solution attendue, de chercher à l'optimiser pour diminuer
688le temps de résolution (~\cite{aster_chaboche}), en réduisant la taille du
689système et en introduisant la matrice jacobienne. Mais cet exemple
690d'un comportement déjà sophistiqué montre qu'il est possible très
691rapidement de tester des lois de comportement de façon
692opérationnelle.
693
694\begin{table}[htbp]
695  \centering
696  \begin{tabular}{|m{8cm}|m{8cm}|}
697    \hline
698    Loi  &
699    Algorithme \mfront{}
700    et test\\\hline
701    Chaboche &
702    Implicite\\\hline
703    HAYHURST (fluage et
704    endommagement des aciers) &
705    { Implicite, jacobienne ,
706      GDEF\_LOG, Theta=0.5 }
707    et Explicite,
708    Runge-Kutta\\\hline
709    MAZARS (béton,
710    endommagement) &
711    Avec séchage et
712    hydratation\\\hline
713    BETON\_BURGER\_FP &
714    Fluage propre du béton
715    avec retrait\\\hline
716    MONOCRISTAL (MC) &
717    Implicite, jacobienne,
718    petites déformations\\\hline
719    POLYCRISTAL (MC) &
720    Runge-kutta , 30
721    grains\\\hline
722    MONOCRISTAL (DD\_CFC)(+
723    irradiation) &
724    Implicite, jacobienne,
725    petites déformations\\\hline
726    POLYCRISTAL (DD\_CFC) &
727    Runge-Kutta , 30
728    grains\\\hline
729    MONOCRISTAL (DD\_CC)(+
730    irradiation) &
731    Implicite, jacobienne,
732    petites déformations\\\hline
733    META\_LEMA\_ANI &
734    Implicite, jacobienne
735    numérique, avec effet des phases métallurgiques\\\hline
736    MONOCRISTAL (MC) &
737    Implicite, jacobienne
738    numérique, grandes déformations\\\hline
739  \end{tabular}
740  \caption{Quelques exemples de lois de comportement dévelopées avec \mfront{}.}
741  \label{tab:mfront:aster:examples}
742\end{table}
743
744Plusieurs autres lois de comportement ont été développées et sont
745inclues dans les tests de \mfront{} et de \aster{}. Nous en donnons
746une liste partielle au tableau~\ref{tab:mfront:aster:examples}. Pour
747chacun, le temps de développement n'a pas dépassé une demi-journée.
748
749\subsection{Identification des propriétés matériau à l'aide d'\adao{}}
750
751Une fois le modèle validé, il est souvent nécessaire de procéder à
752l'identification de ses propriétés matériau, souvent à partir de
753données expérimentales ou provenant d'autres modèles.
754
755Nous avons vu que \mtest{} permet d'effectuer très efficacement la
756simulation de la réponse d'un point matériel à une sollicitation en
757contraintes ou en déformations.  Ce sera le \og~moteur~\fg{} de
758l'identification, en utilisant l'outil
759\adao{}~\cite{argaud_documentation_2014}, intégré à la plate-forme
760\salome{}~\cite{salome_open_2014}.
761
762\begin{figure}[!h]
763  \centering
764  \includegraphics[width=9cm,height=8cm]{@top_srcdir@/docs/tutorial/images/CourbeExpBurger.png}
765  \caption{courbe expérimentale et recalée}
766  \label{fig:mfront:tutorial:CourbeExpBurger:check}
767\end{figure}
768
769\adao{} permet de trouver, par des algorithmes d'optimisation, les
770valeurs optimales d'un ensemble de paramètres noté $X$, qui minimisent
771une fonctionnelle
772$F=\left|{\left|{Y^{\mathit{obs}}-H(X)}\right|}\right|$, représentant
773l'écart entre des valeurs observées $Y^{\mathit{obs}}$ et la
774simulation $H(X)$.
775
776Le code de simulation (ici \mtest{}, mais cela peut-être \aster) calcule
777pour chaque ensemble de paramètres $X$ la réponse $H(X)$.
778
779Les valeurs $Y^{\mathit{obs}}$ \og~observées~\fg{} peuvent être
780expérimentales ou issues d'autres modèles. Sur la
781figure~\ref{fig:mfront:tutorial:CourbeExpBurger:check}~:
782$Y^{\mathit{obs}}$ correspond aux ordonnées de la courbe rouge, qui
783est une courbe expérimentale.
784
785La courbe verte représente le résultat de la simulation pour un jeu de
786paramètres optimum $H(X^{\mathit{final}})$.
787
788\begin{figure}[!h]
789  \centering
790  \includegraphics[width=16cm,height=14cm]{@top_srcdir@/docs/tutorial/images/tutorielch12-img18.png}
791  \caption{recalage à l'aide de \adao{}}
792  \label{fig:mfront:tutorial:adao:check}
793\end{figure}
794
795Une copie d'écran de l'interface de \adao{} dans \salome{} est présentée
796sur la figure~\ref{fig:mfront:tutorial:adao:check}.
797
798On peut voir sur cette figure~:
799\begin{itemize}
800\item en haut à gauche la décroissance de la fonctionnelle $F$ au
801  cours du processus~;
802\item en haut à droite les courbes expérimentales et calculées~;
803\item en bas les valeurs des paramètres finaux.
804\end{itemize}
805
806\begin{figure}[!h]
807  \centering
808  \includegraphics[width=11cm,height=10cm]{@top_srcdir@/docs/tutorial/images/tutorielch12-img19.png}
809  \caption{courbes expérimentales contrainte (MPa)---déformation pour
810    quatre amplitudes de déformation}
811  \label{fig:mfront:tutorial:quatre-courbes:check}
812\end{figure}
813
814\paragraph{Recalage de la loi élasto-visco-plastique}
815Nous allons utiliser \mtest{} (associé au comportement
816élasto-visco-plastique précédent) comme moteur de simulation $H(X)$
817pour chercher les valeurs des propriétés matériau de cette loi
818permettant de simuler les 4 courbes contraintes-déformation
819représentées en figure~\ref{fig:mfront:tutorial:quatre-courbes:check},
820pour différentes amplitudes de déformation imposée~:
821
822Il faut définir, pour \adao{}, {\em a minima}~:
823\begin{itemize}
824\item les paramètres à identifier $X$~;
825\item leurs valeurs initiales $X^{\mathit{ini}}$~;
826\item la fonction $H(X)$.
827\end{itemize}
828
829Ici, nous choisissons de recaler les \(5\) propriétés matériau~:
830$C_{1}$, $C_{2}$, $\gamma_{1}$, $\gamma_{2}$, $b$, dont les valeurs
831initiales sont~:
832\begin{center}
833{\tt [180000., 45000.,
834  4460., 340., 10.]}
835\end{center}
836
837La fonction $H(X)$ est définie par un appel direct à \mtest{}, via une
838fonction \python{}, à partir des valeurs de $X$ fournies par
839l'algorithme d'optimisation d'\adao{}.
840
841Cette fonction \python{} permet d'appeler \mtest{} directement sans
842passer par des fichiers intermédiaires (on retrouve les principales
843commandes de \mtest{} décrites précédemment)~:
844\begin{figure}[!htbp]
845 \centering
846 \lstinputlisting{@top_srcdir@/docs/tutorial/python/mfrontexec.comm}
847  \caption{fonction python d'appel à \mfront{}}
848  \label{fig:tutorial:mfrontexec}
849\end{figure}
850
851L'opérateur $H(X)$ est défini par la fonction python qui a pour nom
852$\text{DirectOperator}$ par convention dans \adao{}.
853
854La transcription des instructions de \mtest{} définissant les données
855dans la fonction~{\tt Courbe} est directe~:
856
857{\tt @MaterialProperty<constant> 'Para' valeur } devient~:
858
859{\tt m.setMaterialProperty('Para',valeur)}
860
861{\tt m} étant une instance de la classe {\tt Mtest}.
862
863Les arguments d'entrée de la fonction {\tt Courbe} sont ici~:
864\begin{itemize}
865\item les paramètres en cours d'identification {\tt xx}~;
866\item la liste d'instants {\tt linst}~;
867\item le dictionnaire python  {\tt dico} contenant la description du chargement.
868\end{itemize}
869
870Le chargement correspondant à chaque essai
871est en effet décrit par un dictionnaire dont les clés
872sont les instants
873et les valeurs sont les valeurs des déformations imposées.
874
875Ces valeurs sont extraites ici d'un fichier annexe ( {\tt char.py} ).
876
877Les lignes 6 à 19 permettent de mettre ces données (déformations imposées en
878fonction du temps pour les 4 essais) sous forme de 4 dictionnaires python.
879
880Dans la fonction~{\tt Courbe},~l'instruction
881{\tt m.setImposedStrain(’EXX ’,dico) } permet d'imposer l'évolution de la
882composante XX des déformations en fonction du temps.
883
884Quelques instructions supplémentaires permettent d'exécuter le calcul pas à pas,
885pour chaque instant, en gérant la reprise d'un instant à l'autre~:
886
887\begin{itemize}
888\item {\tt     s  = MTestCurrentState() } définit l'état courant~;
889\item {\tt     wk = MTestWorkSpace()   }    définit l'espace de travail~;
890\item {\tt     m.completeInitialisation() }  initialise le calcul~;
891\item {\tt     m.initializeCurrentState(s) } initialise l'état courant~;
892\item {\tt     m.initializeWorkSpace(wk)  } initialise l'espace de travail~;
893\item {\tt     m.execute(s,wk,linst[i],linst[i+1])  } calcule un pas de temps.
894\end{itemize}
895
896Le résultat de la fonction $\text{DirectOperator}$ est un vecteur
897$\text{Y=H(X)}$ qui est transmis à l'algorithme d'optimisation pour évaluer
898la fonctionnelle, et ses gradients par différences finies.
899
900\begin{figure}[!h]
901  \centering
902  \includegraphics[width=15.998cm,height=9.998cm]{@top_srcdir@/docs/tutorial/images/tutorielch12-img20.png}
903  \caption{Copie d'écran \adao{} du recalage sur 4 courbes cycliques }
904  \label{fig:mfront:tutorial:adao-quatre-courbes:check}
905\end{figure}
906
907La figure~\ref{fig:mfront:tutorial:adao-quatre-courbes:check} présente
908une copie d'écran illustrant les résultats de l'optimisation. On peut
909y voir~:
910\begin{itemize}
911\item en haut à gauche la décroissance de la fonctionnelle $F$ au
912  cours du processus~;
913\item en haut à droite les courbes $\sigma =f(t)$ expérimentales et
914  calculées~;
915\item en bas à droite les valeurs des paramètres finaux~;
916\item en bas à gauche le résultat de l'optimisation (courbes
917  expérimentales et simulées quasi-confondues)
918\end{itemize}
919
920
921\subsection{Utilisation dans Code\_Aster}
922
923\subsubsection{Modification du fichier de commandes}
924
925Une fois le comportement défini dans \mfront, et compilé de façon habituelle :
926
927{\tt mfront -{}-obuild -{}-interface=aster Chaboche.mfront }
928
929une bibliothèqe dynamique est produite :
930
931{\tt libAsterBehabviour.so }
932
933Avant de l'utiliser dans un calcul de structures avec \aster, il est
934conseillé d'effectuer les premiers tests sur un point matériel à
935l'aide de \mtest.
936
937Ensuite, tout est prêt pour une étude avec \aster.
938Pour une description complète,
939on pourra consulter la notice d'utilisation \cite{code_notice_2014}.
940
941Pour cela, il suffit de fournir comme donnée de l'étude
942 le fichier {\tt libAsterBehabviour.so }
943(fichier de type "nom" dans {\tt astk }).
944
945Dans le fichier de commandes, il suffit de modifier deux points :
946
947Dans la commande {\tt  DEFI\_MATERIAU}, il faut ajouter :
948
949\begin{minipage}[t]{0.9\linewidth}
950
951{\tt .......=DEFI\_MATERIAU(
952UMAT=\_F( C1 = ... ,  C2 = ... ,   C3 = ... , ),
953}
954\end{minipage}
955
956On fournit les propriétés matériau {\tt Ci} dans l'ordre où elles sont
957définies dans le fichier \mfront.
958
959Par exemple pour le comportement élastoplastique de Chaboche, on donnera~:
960
961\begin{flushleft}
962  \lstinputlisting{@top_srcdir@/docs/tutorial/python/defimateriau.py}
963\end{flushleft}
964
965
966Le mot clé {\tt NB\_VALE } permet d'optimiser le temps de lecture des propriétés.
967
968Le deuxième endroit à modifier est le mot-clé {\tt COMPORTEMENT } dans les
969commandes globales de calcul ({\tt STAT\_NON\_LINE},
970{\tt DYNA\_NON\_LINE}, {\tt SIMU\_POINT\_MAT}, ...),
971
972Le comportement a pour nom « MFRONT ». On spécifie donc dans ces commandes :
973
974\begin{flushleft}
975  \lstinputlisting{@top_srcdir@/docs/tutorial/python/comportement.comm}
976\end{flushleft}
977
978Comme dans l'exemple ci-dessus, il est possible d'ajouter le mot-clé
979{\tt DEFORMATION} pour effectuer un calcul en grandes déformations
980logarithmiques ou le mot-clé {\tt ITER\_INTE\_PAS} par exemple pour
981permettre un redécoupage local du pas de temps.
982
983\subsubsection{Exemple de résultats}
984
985\begin{figure}[!h]
986  \begin{minipage}[b]{0.4\linewidth}
987  \centering
988  \includegraphics[width=8cm,height=9cm]{@top_srcdir@/docs/tutorial/images/hayhurst.png}
989  \caption{déformation maxi--- temps }
990  \label{fig:courbes-fluage}
991  \end{minipage}
992  \hfill
993  \begin{minipage}[b]{0.5\linewidth}
994  \centering
995  \includegraphics[width=9cm,height=9cm]{@top_srcdir@/docs/tutorial/images/Hayhurstiso.png}
996  \caption{ \aster --- \mfront }
997  \label{fig:iso-fluage}
998  \end{minipage}
999\end{figure}
1000
1001\begin{table}
1002  \label{temps-calcul}
1003  \resizebox{\linewidth}{!}{
1004    \begin{tabular}{| c | c | c | c | c | c | c | }
1005      \hline
1006      Éprouvette entaillée 2D axi& MFRONT impl& MFRONT impl  & MFRONT expl & Aster impl & Aster impl& Aster expl\\
1007      & J prog     &  J num       & RK4/5       &  J prog    & J num     & RK2/1 \\
1008      \hline
1009      Nb de pas de temps       &   601               &   601                   & 4011             & 601             &  601             &       4011 \\
1010      \hline
1011      Nb itérations Newton     &   1818        &       1810                   &  17493            &  2479          &  1832             &      17495 \\
1012      \hline
1013      Temps CPU                &    3mn5s      &       3mn19s                 &    32mn21s        &   8mn40s       & 8mn53s           &   46mn37s  \\
1014      \hline
1015    \end{tabular}
1016  }
1017  \caption{comparaison des temps de calcul}
1018\end{table}
1019
1020En guise d'illustration, les résultats d'un calcul de fluage sur une
1021éprouvette entaillée (maillage axisymétrique, 3300 DDL) avec \aster{}
1022sont donnés sur les figures \ref{fig:courbes-fluage}
1023et~\ref{fig:iso-fluage}.
1024
1025La comparaison des temps CPU est nettement en faveur de \mfront{},
1026détaillés au tableau~\ref{temps-calcul}. Notons que même l’intégration
1027implicite avec jacobienne numérique est efficace.
1028
1029%%% Local Variables:
1030%%% mode: latex
1031%%% TeX-master: "tutoriel"
1032%%% End:
1033