1% Utilisation de MFront dans [Cast3M](http://www-cast3m.cea.fr/)
2% Helfer Thomas
3% August 19, 2014
4
5\newcommand{\tenseur}[1]{\underline{#1}}
6\newcommand{\tenseurq}[1]{\underline{\mathbf{#1}}}
7\newcommand{\tns}[1]{\underset{\tilde{}}{\mathbf{#1}}}
8\newcommand{\transpose}[1]{#1^{\mathop{T}}}
9
10\newcommand{\tsigma}{\underline{\sigma}}
11\newcommand{\sigmaeq}{\sigma_{\mathrm{eq}}}
12
13\newcommand{\epsilonth}{\epsilon^{\mathrm{th}}}
14
15\newcommand{\tepsilonto}{\underline{\epsilon}^{\mathrm{to}}}
16\newcommand{\tepsilonel}{\underline{\epsilon}^{\mathrm{el}}}
17\newcommand{\tepsilonth}{\underline{\epsilon}^{\mathrm{th}}}
18
19\newcommand{\tepsilonvis}{\underline{\epsilon}^{\mathrm{vis}}}
20\newcommand{\tdepsilonvis}{\underline{\dot{\epsilon}}^{\mathrm{vis}}}
21
22\newcommand{\tepsilonp}{\underline{\epsilon}^{\mathrm{p}}}
23\newcommand{\tdepsilonp}{\underline{\dot{\epsilon}}^{\mathrm{p}}}
24
25\newcommand{\talpha}{\underline{\alpha}}
26\newcommand{\tdalpha}{\underline{\dot{\alpha}}}
27\newcommand{\txi}{\underline{\xi}}
28\newcommand{\tdxi}{\underline{\dot{\xi}}}
29
30\newcommand{\tDq}{\underline{\mathbf{D}}}
31\newcommand{\trace}[1]{\mathrm{tr}\paren{#1}}
32\newcommand{\Frac}[2]{{\displaystyle \frac{\displaystyle #1}{\displaystyle #2}}}
33\newcommand{\deriv}[2]{{\displaystyle \frac{\displaystyle \partial #1}{\displaystyle \partial #2}}}
34\newcommand{\dtot}{{\mathrm{d}}}
35\newcommand{\paren}[1]{\left(#1\right)}
36\newcommand{\nom}[1]{\textsc{#1}}
37\newcommand{\bts}[1]{\left.#1\right|_{t}}
38\newcommand{\mts}[1]{\left.#1\right|_{t+\theta\,\Delta\,t}}
39\newcommand{\ets}[1]{\left.#1\right|_{t+\Delta\,t}}
40
41# Lois de comportement mécanique
42
43L'utilisation de lois générées par `MFront` dans
44[`Cast3M`](http://www-cast3m.cea.fr/) se fait via l'interface
45générique
46[`UMAT`](http://www-cast3m.cea.fr/index.php?page=sources&source=umat).
47
48Dans la suite de ce document, nous supposons travailler dans un
49environnement `POSIX`. Le shell utilisé est `bash`. Une page dédiée à
50l'utilisation de `MFront` sous `Windows` sera ajoutée à terme.
51
52Nous utiliserons la loi de Norton décrite dans le
53[tutoriel](tutorial.html). L'ensemble des fichiers utilisés dans ce
54document peut être téléchargé
55[ici](downloads/example-castem2014.tar.bz2).
56
57Ce document se découpe en trois partie :
58
59- compilation de la loi ;
60- intégration dans `Cast3M` ;
61- test sur un essai de traction uniaxial.
62
63## Compilation de la loi
64
65MFront gère la compilation de la loi, il suffit de taper dans un
66terminal :
67
68~~~~ {.bash}
69$ mfront --obuild --interface=castem norton.mfront
70~~~~~~~~~~~~~~~~~~~
71
72Ceci génère trois répertoires : `src`, `include` et `castem`.
73
74Le répertoire `src` contient en particulier une bibliothèque dynamique nommée
75`libUmatBehaviour.so`.
76
77Le répertoire `castem` contient un exemple de mise en donnée pour la
78loi générée pour chacune des hypothèses de modélisation supportée.
79
80## Intégration dans `Cast3M`
81
82Il est possible d'utiliser un appel direct à la librairie `MFront`
83générée. Pour la version \(2014\), il est nécessaire d'appliquer les
84[certains patchs](downloads/patchs-Cast3M-2014.tar.bz2). Ce patch
85n'est plus nécessaire depuis la version 2015.
86
87Pour utiliser la librairie générée via les appels dynamiques, l'appel
88à l'opérateur `MODELISER` se fait ainsi :
89
90~~~~{.python}
91mod1 = 'MODELISER' s1 'MECANIQUE' 'ELASTIQUE' 'ISOTROPE'
92   'NON_LINEAIRE' 'UTILISATEUR'
93   'LIB_LOI' 'src/libUmatBehaviour.so'
94   'FCT_LOI' 'umatnorton'
95   'C_MATERIAU' coel2D
96   'C_VARINTER' stav2D
97   'PARA_LOI'   para2D
98   'CONS' M;
99~~~~
100
101Nous avons explicitement indiqué le chemin vers la librairie. En
102pratique, il est préférable de ne pas le faire et de modifier la
103variable `LD_LIBRARY_PATH`.
104
105## Test
106
107Pour tester notre loi, nous pouvons utiliser le jeu de donnés suivant :
108
109~~~~{.python .numberLines}
110'OPTION' 'ERREUR' 'FATALE' ;
111'OPTION' 'DIME' 2 'ELEM' qua4;
112'OPTION' 'MODELISER' 'AXISYMETRIE';
113
114TMAX = 1.;
115NPAS = 50;
116UMAX = 3.5e-2;
117
118O = 0. 0.;
119A = 1. 0.;
120
121l1 = 'DROIT' 1 O A;
122l2 = l1 'PLUS' (0. 1.);
123
124s1 = l1 'REGLER' 1 l2;
125
126coel2D = 'MOTS' 'YOUN' 'NU' 'RHO' 'ALPH' 'A' 'E';
127stav2D = 'MOTS' 'EERR' 'EEZZ' 'EETT' 'EERZ'  'P';
128para2D = 'MOTS' 'T';
129
130mod1 = 'MODELISER' s1 'MECANIQUE' 'ELASTIQUE' 'ISOTROPE'
131   'NON_LINEAIRE' 'UTILISATEUR'
132   'NUME_LOI' 1
133   'C_MATERIAU' coel2D
134   'C_VARINTER' stav2D
135   'PARA_LOI'   para2D
136   'CONS' M;
137
138MAT1 = 'MATERIAU' MOD1 'YOUN' 80e9 'NU' 0.35 'ALPH' 0. 'RHO' 0.
139   'A' (0.003944e-6 '**' 4.39) 'E' 4.39;
140
141***
142LIT1 = PROG 0. PAS (TMAX/ NPAS)  TMAX;
143
144*** CONDITIONS AUX LIMITES
145************************************************
146* Conditions aux limites éprouvette
147CL1 = 'BLOQUE' 'UZ'  L1 ;
148CL2 = 'BLOQUE' 'UZ'  L2 ;
149CLE1 = CL1 ET CL2;
150
151* Chargement mécanique et thermique
152LI1 = PROG 0. TMAX ;
153LI2 = PROG 0. 1. ;
154EV = EVOL MANU T LI1 F(T) LI2 ;
155DEP1 = DEPI CL2 UMAX;
156CHA1 = CHAR 'DIMP' DEP1 EV ;
157
158* Champ de température
159TEK = 293.15;
160THE1 = MANU 'CHPO' S1 1 'T' TEK ;
161EV2 = EVOL MANU (prog 0. TMAX) (prog 1. 1.) ;
162CHARTHER = CHAR 'T' THE1 EV2 ;
163
164** CALCUL
165* Définition des pas de calcul et de sauvegarde
166************************************************************
167* Définition de la table de la phase de charge
168TAB1 = TABLE ;
169*TAB1.'K_SIGMA' =  FAUX;
170TAB1.'MOVA' = 'MOT' 'RIEN' ;
171TAB1.'TEMPERATURES' = TABLE ;
172TAB1.'VARIABLES_INTERNES' = TABLE ;
173TAB1.'BLOCAGES_MECANIQUES' = CLE1 ;
174TAB1.'MODELE' = MOD1 ;
175TAB1.'CHARGEMENT' = CHA1 'ET' CHARTHER ;
176TAB1.'TEMPERATURES' . 0 = THE1 ;
177TAB1.'CARACTERISTIQUES' = MAT1 ;
178TAB1.'TEMPS_CALCULES' = LIT1 ;
179TAB1.'TEMPS_SAUVES' = LIT1 ;
180TAB1.VARIABLES_INTERNES.0 = (ZERO MOD1 'VARINTER');
181TAB1.'PRECISION' = 1.e-8;
182
183* Lancement du calcul de la phase de charge
184PASAPAS TAB1 ;
185
186'REPETER' i ('DIME' tab1.'CONTRAINTES');
187   idx = &i '-' 1;
188   s = tab1.'CONTRAINTES' . idx;
189   d = tab1.'DEPLACEMENTS'. idx;
190   v = tab1.'VARIABLES_INTERNES'. idx;
191   'MESSAGE' ('MAXIMUM' ('EXCO' d 'UZ')) ' '
192             ('MINIMUM' ('EXCO' d 'UR')) ' '
193             ('MAXIMUM' ('EXCO' s 'SMZZ')) ' '
194             ('MAXIMUM' ('EXCO' v 'P'));
195'FIN' i;
196
197nb = ('DIME' tab1.'CONTRAINTES') '-' 1;
198psig = 'PROG';
199peto = 'PROG';
200'REPETER' i nb;
201   s = tab1.'CONTRAINTES' . &i;
202   d = tab1.'DEPLACEMENTS'. &i;
203   psig = psig 'ET' ('PROG' ('MAXIMUM' ('EXCO' s 'SMZZ')));
204   peto = peto 'ET' ('PROG' ('MAXIMUM' ('EXCO' d 'UZ')));
205'FIN' i;
206
207
208EVSIG = 'EVOL' 'ROUG' 'MANU' 'EZZ' peto 'SMZZ' psig;
209'LISTE' evsig;
210'DESSIN' evsig;
211
212'FIN';
213~~~~
214
215 Le résultat obtenu par `Cast3M` peut-être comparé à la simulation
216`MTest` équivalente sur la figure ci-dessous :
217
218![Comparaison des résultats `MTest`/`Cast3M`](img/NortonCreepUniaxialTesting
219 "Comparaison des résultats `MTest`/`Cast3M`")
220
221# Propriétés matériau
222
223## Conductivité thermique du combustible carbure \(UPuC\)
224
225La conductivité thermique d'un combustible carbure \(UPuC\)
226\(k\paren{T,p,\tau}\) est supposée dépendre de la temperature \(T\)
227(Kelvin), de la porosité \(p\) et du taux de combustion \(\tau\)
228\(at.\%\)
229
230Une implantation possible de cette propriété matériau en `MFront` est
231la suivante:
232
233~~~~{#UPuCThermalConductivity .cpp .numberLines}
234@Parser MaterialLaw;
235@Law ThermalConductivity;
236@Material UPuC;
237@Author Thomas Helfer;
238@Output k; //< changing the name of output
239@Input T,p,Bu; //< inputs of the law
240T.setGlossaryName("Temperature"); //< pleiades name
241p.setGlossaryName("Porosity"); //< pleiades name
242Bu.setGlossaryName("BurnUp"); //< pleiades name
243@PhysicalBounds T in [0 :*[; //< temperature physical bounds
244@Bounds T in [0 :2573.15]; //< temperature bounds
245@PhysicalBounds p in [0 :1]; //< porosity physical bounds
246@PhysicalBounds Bu in [0 :*[; //< burn-up physicalbounds
247@Function{
248  if (T<=773.15){
249    k = (8.14e-6*T-0.010096882)*T+19.65063040915;
250  } else {
251    k = (-1.88e-6*T+0.009737044)*T+10.2405949657;
252  }
253  k *= (1.-p)/(1.+2.*p);
254  k *= 1.-(0.02*Bu);
255}
256~~~~~~~~
257
258Cette implantation peut être compilée en une librairie dynamique appelable depuis `Cast3M`:
259
260~~~~{#UPuCThermalConductivity-mfront .bash}
261$ mfront --obuild --interface=castem UPuCThermalConductivity.mfront
262~~~~~~~~~~~~~~~~~~~~~~~~~
263
264# Utilisation dans `Cast3M`
265
266L'appel à des librairies dynamiques depuis l'opérateur `MATERIAU` nécessite
267l'application d'un patch~:
268
269- [Cast3M 2014](downloads/patchs-Cast3M-2014.tar.bz2)
270- [Cast3M 2015](downloads/patchs-Cast3M-2015.tar.bz2)
271
272La directive `MATERIAU` accepte alors une table comme paramètre:
273
274~~~~{#UPuCThermalConductivity-castem .python .numberLines}
275* Création d un modèle thermique isotrope
276ModT1 = 'MODELISER' s1 'THERMIQUE' 'ISOTROPE';
277* Création d une table contenant les données relatives
278* à la propriété externe :
279* - 'MODELE' contient le nom de la fonction appelée
280* - 'LIBRAIRIE' contient le nom de la librairie externe
281* dans laquelle cette fonction est définie
282* - 'VARIABLES' contient la liste des paramètres dont dépend
283* la fonction appelée
284Tmat = 'TABLE';
285Tmat. 'MODELE' = 'UPuC_ThermalConductivity';
286Tmat. 'LIBRAIRIE' = 'libUPuCMaterialProperties.so';
287Tmat. 'VARIABLES' = 'MOTS' 'T' 'PORO' 'FIMA';
288* Création du matériau.
289MatT1 = 'MATERIAU' ModT1 'K' Tmat;
290~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
291
292Pour une utilisation dans `PASAPAS`, deux chargements `PORO` et `FIMA`
293doivent être définis.
294
295<!-- Local IspellDict: english -->
296