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