%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Fichier : introduction %% Auteur : th202608@pleiades077.intra.cea.fr %% Date : 29 avril 2014 %% Répertoire : /home/th202608/Documents/notes/2014/TutorielMFront/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Introduction} L'objet de ce document est de compléter la documentation de référence \mfront{}. Celle-ci se compose aujourd'hui de~: \begin{itemize} \item une présentation générale et un document de référence sur l'écriture de propriétés matériau et de modèles physico-chimiques~\cite{helfer_generateur_2013-1}~; \item un document de référence sur l'écriture de lois de comportement mécanique~\cite{helfer_generateur_2013}~; \item différents documents, distribués avec \mfront{}, qui décrivent les interfaces à différents codes aux éléments finis (\castem{}, \aster{} et \zebulon{} notamment)~; \item différents supports de formation, eux aussi distribués avec \mfront{}. \end{itemize} L'ensemble des ces documents est disponible sur le site officiel de \mfront{}~: \begin{center} \href{http://tfel.sourceforge.net}{http://tfel.sourceforge.net} \end{center} Par ailleurs, les utilisateurs de \aster{} disposent déjà de documentation propre décrivant l'utilisation de \mfront{}~\cite{code_notice_2014,code_mfront01_2014,code_mfront02_2014,code_mfront03_2014}. L'objet du présent document est de permettre aux nouveaux utilisateurs de découvrir pas à pas comment une loi de comportement mécanique peut être implantée avec \mfront{}. Pour les applications, nous utiliserons dans un premier temps des simulations sur point matériel avec \mtest{} (logiciel livré avec \mfront{}) puis, dans un second temps, des simulations par éléments finis, en utilisant soit \aster{}, soit \castem{}. \subsection{Comment écrire une loi de comportement~: un exemple très simple} Dans la suite, les tenseurs d'ordre \(2\) symétriques seront notés \(\tenseur{a}\). Les opérateurs linéaires agissant sur les tenseurs d'ordre \(2\) symétriques seront notés \(\tenseurq{D}\). \subsubsection{La loi de comportement de \nom{Norton}} En guise de préliminaire, prenons par exemple la loi de \nom{Norton}. Elle est définie par~: \[ \left\{ \begin{aligned} \tepsilonto &= \tepsilonel+\tepsilonvis \\ \tsigma &= \tenseurq{D}\,:\,\tepsilonel\\ \tdepsilonvis &= \dot{p}\,\tenseur{n} \\ \dot{p} &= A\,\sigmaeq^{m} \end{aligned} \right. \] où~: \begin{minipage}[t]{0.9\linewidth} \begin{itemize} \item \(\tepsilonto\), \(\tepsilonel\), \(\tepsilonvis\) sont des variables tensorielles symétriques représentent respectivement les déformations totale, élastique et visqueuse~; \item \(\tenseur{n}=\Frac{3}{2}\,\Frac{\tenseur{s}}{\sigmaeq}\) est la direction d'écoulement~; \item \(\tenseur{s}\) est le déviateur des contraintes~; \item \(\sigmaeq\) est la norme de \nom{Von Mises}. \end{itemize} \end{minipage} L'opérateur d'élasticité \(\tenseurq{D}\) est calculé à partir du module d'\nom{Young} \(E\) et du coefficient de \nom{Poisson} \(\nu\). \subsubsection{Discrétisation implicite de la loi de \nom{Norton}} Pour intégrer cette loi dans un calcul de structure, il faut procéder à une discrétisation en temps, ce qui revient à définir une suite d'instants de calcul \(\left\{t_{i}\right\}_{1\le i\le I}\). Pour utiliser un algorithme implicite, il suffit d'écrire toutes les quantités à l'instant \(t_{i}\) et de remplacer les dérivées en temps par leurs incréments sur l'intervalle \(\Delta\, t=t_{i}-t_{i-1}\)~: \[ \left\{ \begin{aligned} \Delta\,\tepsilonel - \Delta\,\tepsilonto + \Delta\,p\,\tenseur{n} = 0 \\ \Delta\,p - \Delta\,t\, A\,\sigmaeq^{m} = 0 \end{aligned} \right. \] avec~: \begin{minipage}[t]{0.9\linewidth} \begin{itemize} \item \(\tsigma = \tenseurq{D}\,:\,\tepsilonel\)~; \item \(\tenseur{n}=\Frac{3}{2}\,\Frac{ \tenseur{s} \paren{t_{i}}} { \sigmaeq \paren{ t_{i}}}\)~. \end{itemize} \end{minipage} On obtient ainsi un système de 7 équations~: 6 équations relatives à la décomposition additive du tenseur des déformations (en 3D), et une équation relative à l'écoulement visco-plastique. Les 7 inconnues sont les 6 composantes de \( \Delta \tepsilonel \) et \( \Delta p \). La résolution implicite de ce système est effectuée par une méthode de \nom{Newton}. \subsubsection{Première implantation} Voici un exemple très simple d'intégration implicite de ce modèle avec \mfront{}~: \begin{center} \begin{minipage}[h]{0.7\linewidth} \lstinputlisting{@top_srcdir@/docs/tutorial/mfront/norton.mfront} \end{minipage} \end{center} \paragraph{Description ligne par ligne} Un fichier \mfront{} commence généralement par une partie déclarative décrivant l'algorithme utilisé pour la résolution, le nom du comportement (ici \nom{Norton}),puis la liste des propriétés matériau utilisées. On fournit ensuite le nom des variables internes, et la description des équations du système à résoudre. \begin{itemize} \item la ligne \(1\) précise que nous allons utiliser une méthode d'intégration implicite~; \item la ligne \(2\) donne le nom de la loi~; \item la ligne \(3\) précise que l'on utilise un algorithme de \nom{Newton} avec jacobienne numérique~; \item la ligne \(5\) demande le calcul de la matrice d'élasticité ~; \item les lignes \(7\) et \(8\) définissent les propriétés matériau de la loi ~; \item la ligne \(10\) déclare la variable interne \( p \). Signalons que la variable interne {\tt eel} (tenseur déformation élastique \(\tepsilonel\)) est prédéfinie par \mfront{}~; \item les lignes \(16\) à \(24\) définissent les équations à résoudre ; la convention de nom est la suivante~: pour chaque variale interne {\tt x}, l'incrément est noté {\tt dx}, et l'équation correspondante {\tt fx} ; \item la ligne \(17\) demande le calcul de la norme de Von Mises ~; \item les lignes \(18\) à \(21\) correspondent au calcul de la direction d'écoulement~; \item la ligne \(22\) définit l'équation \(\Delta\,\tepsilonel - \Delta\,\tepsilonto + \Delta\,p\,\tenseur{n} = 0\). En effet, {\tt feel} est initialisé à {\tt deel} et l'opérateur {\tt +=} cumule les valeurs (comme en langage {\tt c}); \item la ligne \(23\) définit l'équation \(\Delta\, p - \Delta\,t\,A\,\sigmaeq^{m}=0\). Comme précédemment, {\tt fp} est initialisé à {\tt dp}, et {\tt fp -= xx} est équivalent à {\tt fp = fp - xx} . \item les lignes \(26\) à \(29\) permettent de calculer automatiquement l'opérateur tangent à partir de l'inverse de la matrice jacobienne, comme explicité ci-dessous. \end{itemize} On constate que l'écriture de la loi se limite quasiment à la description des équations. De plus on bénéficie d'une écriture compacte, utilisant des variables tensorielles. Différentes méthodes d'intégration sont diponibles dans \mfront (~\cite{helfer_generateur_2013}). L'algorithme d'intégration utilisé ici ({\tt Newton\-Raphson\_\-Numerical\-Jacobian}) permet une écriture rapide, et est donc tout à fait adapté au test de modèles. L'implantation fournit un code beaucoup plus rapide que celle d'un algorithme explicite, mais peut toutefois être optimisée en termes de performances. Pour cela, il suffit d'ajouter les termes de la matrice jacobienne (dérivées des équations par rapport aux inconnues). De plus, la matrice tangente en sortie de l'intégration est calculée automatiquement à partir de la matrice jacobienne, ce qui permet d'économiser un temps de développement important et conduit à une matrice tangente cohérente de très bonne qualité~\cite{helfer_generateur_2013}. Tout ceci conduit, en très peu de temps, à une intégration robuste, et une convergence très bonne. On voit qu'il est possible de profiter de cette simplicité d'écriture pour effectuer des variantes, des tests de modèles, etc. \mfront{} gère la compilation de la loi, il suffit de taper dans un terminal~: \begin{flushleft} {\tt \$ mfront -{}-obuild -{}-interface=aster norton.mfront } \end{flushleft} ou \begin{flushleft} {\tt \$ mfront -{}-obuild -{}-interface=castem norton.mfront } \end{flushleft} suivant le code de résolution que l'on souhaite utiliser~: l'interface {\tt aster} correspond au {\tt Code-Aster}, tandis que l'interface {\tt castem} correspond au code {\tt Cast3M}. Ceci génère deux répertoires~: {\tt src} et {\tt include}. Selon l'interface, le répertoire src contient en particulier une bibliothèque dynamique~: \begin{flushleft} {\tt src/libAsterBehaviour.so } \end{flushleft} pour une exécution avec \aster{}, ou bien~ : \begin{flushleft} { \tt src/libUmatBehaviour.so} \end{flushleft} pour une exécution avec \castem{}. Le nom {\tt Umat} est historique et correspond au nom de la routine que l'utilisateur \castem{} devait surcharger avant le support des appels dynamiques. Dans le cas du code \castem{}, un répertoire nommé {\tt castem} est créé dans la plupart des cas. Ce répertoire contient une mise en données type de la loi de comportement pour les différentes hypothèses de modélisation supportées. \subsubsection{Premier test} L'outil \mtest{} permet d'effectuer très facilement des simulations sur point matériel, afin de calculer la réponse de la loi de comportement à des sollicitations en contraintes ou en déformations. \mtest{}, couplé à un logiciel d'optimisation comme \adao{}, permet de plus d'effectuer le recalage des propriétés matériau. Le fichier de données de \mtest{} (nommé ici {\tt norton.mtest}) se présente de la façon suivante~: \begin{flushleft} \lstinputlisting{@top_srcdir@/docs/tutorial/mtest/norton.mtest} \end{flushleft} \begin{itemize} \item la ligne \(1\) définit la bibliothèque à utiliser et le nom du comportement ~; \item les lignes \(2\) à \(5\) définissent les valeurs des propriétés matériau de la loi ~; \item la ligne \(6\) déclare la valeur de la température (inutile dans le cas présent)~; \item les lignes \(7\) à \(8\) spécifient le chargement, sous la forme de composantes de contraintes ou de déformations en fonction du temps ; \item la ligne \(9\) définit la discrétisation en temps, donc les instants calculés. \end{itemize} \begin{figure}[!h] \centering \includegraphics[width=12.959cm,height=11.448cm]{@top_srcdir@/docs/tutorial/images/tutorielch12-img1.png} \caption{Réponse d'une loi de \nom{Norton} à un essai de fluage en traction-cisaillement} \label{fig:Norton:traction-cisaillement} \end{figure} Il suffit alors de lancer le calcul par : \begin{flushleft} {\tt mtest norton.mtest } \end{flushleft} Ceci produit un fichier résultat { \tt norton.res } contenant les composantes des tenseurs de déformation, de contrainte, et les variables internes en fonction du temps. La réponse en déformation est représentée en figure~\ref{fig:Norton:traction-cisaillement}. \subsection{Plan de ce tutoriel} Ce tutoriel présente en détail comment développer des lois de comportement et ce que l'on peut attendre de \mfront{}. La section~\ref{sec:rappels-integration} a pour but de situer l'intégration de la loi de comportement dans le processus de calcul d'un code par éléments finis. La section~\ref{sec:chaboche} décrit pas à pas l'implantation en MFront d'une loi élasto-plastique de Chaboche, puis de sa variante visco-plastique, relativement simple, et de quelques extensions. Enfin, la section~\ref{sec:impl-dune-loi} fournit davantage de précisions sur l'intégration, sur la gestion des propriétés matériau, et différentes hypothèses de calcul, en décrivant l'implantation d'une loi viscoplastique compressible typique du combustible nucléaire. %%% Local Variables: %%% mode: latex %%% TeX-master: tutoriel %%% End: